char * find_backup_file_name(char *file) { char *dir; char *base_versions; int highest_backup; if (backup_type == simple) { char *s = malloc (strlen (file) + strlen (simple_backup_suffix) + 1); strcpy (s, file); addext (s, simple_backup_suffix, '~'); return s; } base_versions = concat (basename (file), ".~"); if (base_versions == 0) return 0; dir = dirname (file); if (dir == 0) { free (base_versions); return 0; } highest_backup = max_backup_version (base_versions, dir); free (base_versions); free (dir); if (backup_type == numbered_existing && highest_backup == 0) return concat (file, simple_backup_suffix); return make_version_name (file, highest_backup + 1); }
/* * Return the name of the new backup file for file FILE, allocated with * malloc. Return 0 if out of memory. FILE must not end with a '/' unless it * is the root directory. Do not call this function if backup_type == none. */ char * find_backup_file_name(const char *file) { char *dir, *base_versions, *tmp_file; int highest_backup; if (backup_type == simple) return concat(file, simple_backup_suffix); tmp_file = strdup(file); if (tmp_file == NULL) return NULL; base_versions = concat(basename(tmp_file), ".~"); free(tmp_file); if (base_versions == NULL) return NULL; tmp_file = strdup(file); if (tmp_file == NULL) { free(base_versions); return NULL; } dir = dirname(tmp_file); if (dir == NULL) { free(base_versions); free(tmp_file); return NULL; } highest_backup = max_backup_version(base_versions, dir); free(base_versions); free(tmp_file); if (backup_type == numbered_existing && highest_backup == 0) return concat(file, simple_backup_suffix); return make_version_name(file, highest_backup + 1); }
char * find_backup_file_name (char *file) { char *dir; char *base_versions; int highest_backup; if (backup_type == simple) return concat (file, simple_backup_suffix); base_versions = concat (basename (file), ".~"); if (base_versions == 0) return 0; dir = dirname (file); if (dir == 0) { free (base_versions); return 0; } highest_backup = max_backup_version (base_versions, dir); free (base_versions); free (dir); if (backup_type == numbered_existing && highest_backup == 0) return concat (file, simple_backup_suffix); return make_version_name (file, highest_backup + 1); }