- int c;
- if (feof (f))
- return 1;
- while ((c = getc (f)) != EOF
- && isdigit (c))
- {
- score->score *= 10;
- score->score += (c-48);
- }
- while ((c = getc (f)) != EOF
- && isspace (c))
- ;
- if (c == EOF)
- return -1;
- ungetc (c, f);
-#ifdef HAVE_GETDELIM
- {
- size_t count = 0;
- if (getdelim (&score->username, &count, ' ', f) < 1
- || score->username == NULL)
- return -1;
- /* Trim the space */
- score->username[strlen (score->username)-1] = '\0';
- }
-#else
- {
- int unameread = 0;
- int unamelen = 30;
- char *username = malloc (unamelen);
- if (!username)
- return -1;
-
- while ((c = getc (f)) != EOF
- && !isspace (c))
- {
- if (unameread >= unamelen-1)
- if (!(username = realloc (username, unamelen *= 2)))
- return -1;
- username[unameread] = c;
- unameread++;
- }
- if (c == EOF)
- return -1;
- username[unameread] = '\0';
- score->username = username;
- }
-#endif
-#ifdef HAVE_GETLINE
- score->data = NULL;
- errno = 0;
- {
- size_t len;
- if (getline (&score->data, &len, f) < 0)
- return -1;
- score->data[strlen (score->data)-1] = '\0';
- }
-#else
- {
- int cur = 0;
- int len = 16;
- char *buf = malloc (len);
- if (!buf)
- return -1;
- while ((c = getc (f)) != EOF
- && c != '\n')
- {
- if (cur >= len-1)
- {
- if (!(buf = realloc (buf, len *= 2)))
- return -1;
- }
- buf[cur] = c;
- cur++;
- }
- score->data = buf;
- score->data[cur] = '\0';
- }
-#endif
- return 0;