X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a039749b4c21e3439dc06fcdd5355828f1f95463..7bc8218d814a9014536685e0e544aa7fd06b9868:/backup.c diff --git a/backup.c b/backup.c index 6604f0b0..0fb6373a 100644 --- a/backup.c +++ b/backup.c @@ -21,6 +21,7 @@ #include "rsync.h" extern int verbose; +extern int suffix_specified; extern char *backup_suffix; extern char *backup_dir; @@ -39,7 +40,7 @@ static int make_simple_backup(char *fname) return 0; } - slprintf(fnamebak,sizeof(fnamebak),"%s%s",fname,backup_suffix); + snprintf(fnamebak,sizeof(fnamebak),"%s%s",fname,backup_suffix); if (do_rename(fname,fnamebak) != 0) { /* cygwin (at least version b19) reports EINVAL */ if (errno != ENOENT && errno != EINVAL) { @@ -92,9 +93,9 @@ static int make_bak_dir(char *fname,char *bak_path) while(strncmp(bak_path,"./",2)==0) bak_path += 2; if(bak_path[strlen(bak_path)-1]!='/') { - slprintf(fullpath,sizeof(fullpath),"%s/",bak_path); + snprintf(fullpath,sizeof(fullpath),"%s/",bak_path); } else { - slprintf(fullpath,sizeof(fullpath),"%s",bak_path); + snprintf(fullpath,sizeof(fullpath),"%s",bak_path); } p=fullpath; q=&fullpath[strlen(fullpath)]; /* End of bak_path string */ @@ -203,12 +204,17 @@ static int keep_backup(char *fname) if (!file) return 1; /* make a complete pathname for backup file */ - if (strlen(backup_dir) + strlen(fname) > (MAXPATHLEN - 1)) { + if (strlen(backup_dir) + strlen(fname) + + (suffix_specified ? strlen(backup_suffix) : 0) > (MAXPATHLEN - 1)) { rprintf (FERROR, "keep_backup filename too long\n"); return 0; } - slprintf(keep_name, sizeof (keep_name), "%s/%s", backup_dir, fname); + if (suffix_specified) { + snprintf(keep_name, sizeof (keep_name), "%s/%s%s", backup_dir, fname, backup_suffix); + } else { + snprintf(keep_name, sizeof (keep_name), "%s/%s", backup_dir, fname); + } #ifdef HAVE_MKNOD