diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-06-18 16:28:03 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-06-18 16:28:03 +0000 |
commit | fae49c6287347a588cbc9e454fa000499210046e (patch) | |
tree | 5791ff9727b60d39983e505ce5ad4161109707a3 /intl/localealias.c | |
parent | 2216362439c416dafc58ddd7023eb7d324eb1960 (diff) | |
download | glibc-fae49c6287347a588cbc9e454fa000499210046e.tar.gz glibc-fae49c6287347a588cbc9e454fa000499210046e.tar.xz glibc-fae49c6287347a588cbc9e454fa000499210046e.zip |
Update.
2003-06-18 Ulrich Drepper <drepper@redhat.com> * intl/localealias.c (read_alias_file): Determine whether line is read incompletely early, before we modify the line.
Diffstat (limited to 'intl/localealias.c')
-rw-r--r-- | intl/localealias.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/intl/localealias.c b/intl/localealias.c index 697ef8c43a..324f2fe662 100644 --- a/intl/localealias.c +++ b/intl/localealias.c @@ -1,5 +1,5 @@ /* Handle aliases for locale names. - Copyright (C) 1995-1999, 2000,01,02 Free Software Foundation, Inc. + Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -243,11 +243,15 @@ read_alias_file (fname, fname_len) char *alias; char *value; char *cp; + int complete_line; if (FGETS (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; + /* Determine whether the line is complete. */ + complete_line = strchr (buf, '\n') != NULL; + cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) @@ -334,11 +338,13 @@ read_alias_file (fname, fname_len) /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ - while (strchr (buf, '\n') == NULL) - if (FGETS (buf, sizeof buf, fp) == NULL) - /* Make sure the inner loop will be left. The outer loop - will exit at the `feof' test. */ - break; + if (! complete_line) + do + if (FGETS (buf, sizeof buf, fp) == NULL) + /* Make sure the inner loop will be left. The outer loop + will exit at the `feof' test. */ + break; + while (strchr (buf, '\n') == NULL) } /* Should we test for ferror()? I think we have to silently ignore |