aboutsummaryrefslogtreecommitdiff
path: root/intl/localealias.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-06-18 16:28:03 +0000
committerUlrich Drepper <drepper@redhat.com>2003-06-18 16:28:03 +0000
commitfae49c6287347a588cbc9e454fa000499210046e (patch)
tree5791ff9727b60d39983e505ce5ad4161109707a3 /intl/localealias.c
parent2216362439c416dafc58ddd7023eb7d324eb1960 (diff)
downloadglibc-fae49c6287347a588cbc9e454fa000499210046e.tar
glibc-fae49c6287347a588cbc9e454fa000499210046e.tar.gz
glibc-fae49c6287347a588cbc9e454fa000499210046e.tar.bz2
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.c18
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