*** empty log message ***
[gnulib.git] / lib / dirname.c
index 7cc1040..cf62de7 100644 (file)
@@ -15,7 +15,7 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#ifdef HAVE_CONFIG_H
+#if HAVE_CONFIG_H
 # include <config.h>
 #endif
 
@@ -33,14 +33,15 @@ char *malloc ();
 # endif
 #endif
 
+#include "dirname.h"
+
 /* Return the leading directories part of PATH,
    allocated with malloc.  If out of memory, return 0.
    Assumes that trailing slashes have already been
    removed.  */
 
 char *
-dirname (path)
-     char *path;
+dir_name (const char *path)
 {
   char *newpath;
   char *slash;
@@ -56,8 +57,17 @@ dirname (path)
   else
     {
       /* Remove any trailing slashes from the result.  */
+#ifdef MSDOS
+      char *lim = (path[0] >= 'A' && path[0] <= 'z' && path[1] == ':')
+                 ? path + 2 : path;
+
+      /* If canonicalized "d:/path", leave alone the root case "d:/".  */
+      while (slash > lim && *slash == '/')
+       --slash;
+#else
       while (slash > path && *slash == '/')
        --slash;
+#endif
 
       length = slash - path + 1;
     }