diff options
author | Jim Meyering <jim@meyering.net> | 2001-05-12 14:20:43 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2001-05-12 14:20:43 +0000 |
commit | 9ce2d237743beea2c52b236ace8222d949b67e71 (patch) | |
tree | d6cebf6dd1052ddd8664e6ada76b83a49d532c11 /lib | |
parent | d45e530c210ee6d2c33eec7f1c98f7c5f1c8a95f (diff) | |
download | coreutils-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')
-rw-r--r-- | lib/backupfile.c | 30 |
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) { |