summaryrefslogtreecommitdiff
path: root/lib/backupfile.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2001-05-12 14:20:43 +0000
committerJim Meyering <jim@meyering.net>2001-05-12 14:20:43 +0000
commit9ce2d237743beea2c52b236ace8222d949b67e71 (patch)
treed6cebf6dd1052ddd8664e6ada76b83a49d532c11 /lib/backupfile.c
parentd45e530c210ee6d2c33eec7f1c98f7c5f1c8a95f (diff)
downloadcoreutils-9ce2d237743beea2c52b236ace8222d949b67e71.tar.xz
(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.
Diffstat (limited to 'lib/backupfile.c')
-rw-r--r--lib/backupfile.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/lib/backupfile.c b/lib/backupfile.c
index 100e0a53b..0339caee2 100644
--- 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 *getenv ();
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 @@ char *base_name PARAMS ((char const *));
# 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 @@ find_backup_file_name (const char *file, enum backup_type backup_type)
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 @@ max_backup_version (const char *file, const char *dir)
return 0;
highest_version = 0;
- file_name_length = strlen (file);
+ file_name_length = base_len (file);
while ((dp = readdir (dirp)) != 0)
{