(read_alias_file): Use only about 400 bytes of stack space instead of 16k.
authorUlrich Drepper <drepper@redhat.com>
Wed, 20 Nov 2002 04:19:45 +0000 (04:19 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 20 Nov 2002 04:19:45 +0000 (04:19 +0000)
intl/localealias.c

index f5d4e57dc31bdd6c59a14ba01f175ba93bea6572..697ef8c43a6a075ffea3b6405a3990750e878344 100644 (file)
@@ -236,8 +236,10 @@ read_alias_file (fname, fname_len)
         a) we are only interested in the first two fields
         b) these fields must be usable as file names and so must not
            be that long
-       */
-      char buf[BUFSIZ];
+        We avoid a multi-kilobyte buffer here since this would use up
+        stack space which we might not have if the program ran out of
+        memory.  */
+      char buf[400];
       char *alias;
       char *value;
       char *cp;
@@ -246,19 +248,6 @@ read_alias_file (fname, fname_len)
        /* EOF reached.  */
        break;
 
-      /* Possibly not the whole line fits into the buffer.  Ignore
-        the rest of the line.  */
-      if (strchr (buf, '\n') == NULL)
-       {
-         char altbuf[BUFSIZ];
-         do
-           if (FGETS (altbuf, sizeof altbuf, fp) == NULL)
-             /* Make sure the inner loop will be left.  The outer loop
-                will exit at the `feof' test.  */
-             break;
-         while (strchr (altbuf, '\n') == NULL);
-       }
-
       cp = buf;
       /* Ignore leading white space.  */
       while (isspace ((unsigned char) cp[0]))
@@ -342,6 +331,14 @@ read_alias_file (fname, fname_len)
              ++added;
            }
        }
+
+      /* 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;
     }
 
   /* Should we test for ferror()?  I think we have to silently ignore