changeset 3240:e278594ae5d4

(base_name): Remove; now in dirname.h. Include <dirname.h> after size_t is defined. (find_backup_file_name, max_backup_version): Use base_len instead of rolling it ourselves. Handle the case of "" and (on DOS) "C:" correctly.
author Jim Meyering <jim@meyering.net>
date Sat, 12 May 2001 14:20:43 +0000
parents 8146aedc0fe9
children 3de6cd0813b1
files lib/backupfile.c
diffstat 1 files changed, 16 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lib/backupfile.c
+++ b/lib/backupfile.c
@@ -1,5 +1,6 @@
 /* backupfile.c -- make Emacs style backup file names
-   Copyright (C) 1990-1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright 1990,91,92,93,94,95,96,97,98,99,2000, 2001 Free Software
+   Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -23,9 +24,6 @@
 # include <config.h>
 #endif
 
-#include <argmatch.h>
-#include <backupfile.h>
-
 #include <stdio.h>
 #include <sys/types.h>
 #if HAVE_STRING_H
@@ -76,8 +74,6 @@
 char *malloc ();
 #endif
 
-char *base_name PARAMS ((char const *));
-
 #if HAVE_DIRENT_H || HAVE_NDIR_H || HAVE_SYS_DIR_H || HAVE_SYS_NDIR_H
 # define HAVE_DIR 1
 #else
@@ -111,6 +107,10 @@
 # define REAL_DIR_ENTRY(dp) 1
 #endif
 
+#include <argmatch.h>
+#include <backupfile.h>
+#include <dirname.h>
+
 /* The extension added to file names to produce a simple (as opposed
    to numbered) backup file name. */
 const char *simple_backup_suffix = "~";
@@ -137,29 +137,31 @@
   if (HAVE_DIR && backup_suffix_size_max < numbered_suffix_size_max)
     backup_suffix_size_max = numbered_suffix_size_max;
 
-  s = malloc (file_len + backup_suffix_size_max + numbered_suffix_size_max);
+  s = malloc (file_len + 1
+	      + backup_suffix_size_max + numbered_suffix_size_max);
   if (s)
     {
-      strcpy (s, file);
-
 #if HAVE_DIR
       if (backup_type != simple)
 	{
 	  int highest_backup;
-	  size_t dir_len = base_name (s) - s;
+	  size_t dirlen = dir_len (file);
 
-	  strcpy (s + dir_len, ".");
-	  highest_backup = max_backup_version (file + dir_len, s);
+	  memcpy (s, file, dirlen);
+	  if (dirlen == FILESYSTEM_PREFIX_LEN (file))
+	    s[dirlen++] = '.';
+	  s[dirlen] = '\0';
+	  highest_backup = max_backup_version (base_name (file), s);
 	  if (! (backup_type == numbered_existing && highest_backup == 0))
 	    {
 	      char *numbered_suffix = s + (file_len + backup_suffix_size_max);
 	      sprintf (numbered_suffix, ".~%d~", highest_backup + 1);
 	      suffix = numbered_suffix;
 	    }
-	  strcpy (s, file);
 	}
 #endif /* HAVE_DIR */
 
+      strcpy (s, file);
       addext (s, suffix, '~');
     }
   return s;
@@ -186,7 +188,7 @@
     return 0;
 
   highest_version = 0;
-  file_name_length = strlen (file);
+  file_name_length = base_len (file);
 
   while ((dp = readdir (dirp)) != 0)
     {