about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--posix/glob.h12
-rw-r--r--sysdeps/generic/glob.c2
3 files changed, 19 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index d2a51436e1..32b645b54e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+1999-09-11  Paul Eggert  <eggert@twinsun.com>
+
+	* posix/glob.h (glob): If #defining to glob64, do this before
+	declaring it, so that all declarations and uses match, and do not
+	declare glob64, to avoid a declaration clash.
+	(globfree): Likewise with globfree64.
+
+1999-09-08  Eli Zaretskii  <eliz@is.elta.co.il>
+
+	* sysdeps/generic/glob.c (prefix_array) [__MSDOS__,WINDOWS32]:
+	Keep the trailing slash unless DIRNAME is just "x:/".
+
 1999-10-11  Andreas Jaeger  <aj@suse.de>
 
 	* sysdeps/unix/sysv/linux/bits/siginfo.h (SI_KERNEL): Added.
diff --git a/posix/glob.h b/posix/glob.h
index 6a3ab1817f..d92026f794 100644
--- a/posix/glob.h
+++ b/posix/glob.h
@@ -140,6 +140,11 @@ typedef struct
   } glob64_t;
 #endif
 
+#if _FILE_OFFSET_BITS == 64 && __GNUC__ < 2
+# define glob glob64
+# define globfree globfree64
+#endif
+
 /* Do glob searching for PATTERN, placing results in PGLOB.
    The bits defined above may be set in FLAGS.
    If a directory cannot be opened or read and ERRFUNC is not nil,
@@ -148,7 +153,7 @@ typedef struct
    `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
    If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
    Otherwise, `glob' returns zero.  */
-#if _FILE_OFFSET_BITS != 64
+#if _FILE_OFFSET_BITS != 64 || __GNUC__ < 2
 extern int glob __P ((__const char *__pattern, int __flags,
 		      int (*__errfunc) (__const char *, int),
 		      glob_t *__pglob));
@@ -156,16 +161,11 @@ extern int glob __P ((__const char *__pattern, int __flags,
 /* Free storage allocated in PGLOB by a previous `glob' call.  */
 extern void globfree __P ((glob_t *__pglob));
 #else
-# if __GNUC__ >= 2
 extern int glob __P ((__const char *__pattern, int __flags,
 		      int (*__errfunc) (__const char *, int),
 		      glob_t *__pglob)) __asm__ ("glob64");
 
 extern void globfree __P ((glob_t *__pglob)) __asm__ ("globfree64");
-# else
-#  define glob glob64
-#  define globfree globfree64
-# endif
 #endif
 
 #ifdef _LARGEFILE64_SOURCE
diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c
index 1ab5d8b629..65055fb7f8 100644
--- a/sysdeps/generic/glob.c
+++ b/sysdeps/generic/glob.c
@@ -1105,7 +1105,7 @@ prefix_array (dirname, array, n)
 #if defined __MSDOS__ || defined WINDOWS32
   else if (dirlen > 1)
     {
-      if (dirname[dirlen - 1] == '/')
+      if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':')
 	/* DIRNAME is "d:/".  Don't prepend the slash from DIRNAME.  */
 	--dirlen;
       else if (dirname[dirlen - 1] == ':')