changeset 9975:e21b0674f37c

* etags.c (<errno.h>): #include added. (etags_getcwd): Check return value from getcwd.
author Francesco Potortì <pot@gnu.org>
date Wed, 16 Nov 1994 10:29:33 +0000
parents 5cda62e4222a
children 2869e501c2de
files lib-src/etags.c
diffstat 1 files changed, 15 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/lib-src/etags.c	Wed Nov 16 06:17:13 1994 +0000
+++ b/lib-src/etags.c	Wed Nov 16 10:29:33 1994 +0000
@@ -52,6 +52,10 @@
 
 #include <stdio.h>
 #include <ctype.h>
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -430,7 +434,7 @@
   if (!CTAGS)
     typedefs = typedefs_and_cplusplus = constantypedefs = 1;
 
-  for (;;)
+  while (1)
     {
       int opt;
       opt = getopt_long (argc, argv, "aCdDf:o:StTi:BuvxwVH", longopts, 0);
@@ -3194,25 +3198,28 @@
 }
 #else /* not DOS_NT */
 /* Does the same work as the system V getcwd, but does not need to
-   guess buffer size in advance.  Included mostly for compatibility. */
+   guess buffer size in advance. */
 char *
 etags_getcwd ()
 {
-  char *buf;
   int bufsize = 256;
+  char *buf = xnew (bufsize, char);
 
 #ifdef HAVE_GETCWD
-  do
+  while (getcwd (buf, bufsize / 2) == NULL)
     {
+      if (errno != ERANGE)
+	{
+	  perror ("pwd");
+	  exit (BAD);
+	}
+      bufsize *= 2;
       buf = xnew (bufsize, char);
-      bufsize *= 2;
     }
-  while (getcwd (buf, bufsize / 2) == NULL);
 #else
   do
     {
       FILE *pipe;
-      buf = xnew (bufsize, char);
 
       pipe = (FILE *) popen ("pwd 2>/dev/null", "r");
       if (pipe == NULL)
@@ -3228,6 +3235,7 @@
       pclose (pipe);
 
       bufsize *= 2;
+      buf = xnew (bufsize, char);
 
     } while (buf[strlen (buf) - 1] != '\n');
 #endif