-
-
-/* this deletes any files on the receiving side that are not present
- on the sending side. For version 1.6.4 I have changed the behaviour
- to match more closely what most people seem to expect of this option */
-static void delete_files(struct file_list *flist)
-{
- struct file_list *local_file_list;
- int i, j;
- char *name;
-
- if (cvs_exclude)
- add_cvs_excludes();
-
- if (io_error) {
- rprintf(FINFO,"IO error encountered - skipping file deletion\n");
- return;
- }
-
- for (j=0;j<flist->count;j++) {
- if (!S_ISDIR(flist->files[j]->mode) ||
- !(flist->files[j]->flags & FLAG_DELETE)) continue;
-
- if (remote_version < 19 &&
- delete_already_done(flist, j)) continue;
-
- name = strdup(f_name(flist->files[j]));
-
- if (!(local_file_list = send_file_list(-1,1,&name))) {
- free(name);
- continue;
- }
-
- if (verbose > 1)
- rprintf(FINFO,"deleting in %s\n", name);
-
- for (i=local_file_list->count-1;i>=0;i--) {
- if (!local_file_list->files[i]->basename) continue;
- if (remote_version < 19 &&
- S_ISDIR(local_file_list->files[i]->mode))
- add_delete_entry(local_file_list->files[i]);
- if (-1 == flist_find(flist,local_file_list->files[i])) {
- char *f = f_name(local_file_list->files[i]);
- int k = strlen(f) - strlen(backup_suffix);
- if (make_backups && ((k <= 0) ||
- (strcmp(f+k,backup_suffix) != 0))) {
- (void) make_backup(f);
- } else {
- delete_one(local_file_list->files[i]);
- }
- }
- }
- flist_free(local_file_list);
- free(name);
- }
-}
-
+/*
+ * get_tmpname() - create a tmp filename for a given filename
+ *
+ * If a tmpdir is defined, use that as the directory to
+ * put it in. Otherwise, the tmp filename is in the same
+ * directory as the given name. Note that there may be no
+ * directory at all in the given name!
+ *
+ * The tmp filename is basically the given filename with a
+ * dot prepended, and .XXXXXX appended (for mkstemp() to
+ * put its unique gunk in). Take care to not exceed
+ * either the MAXPATHLEN or NAME_MAX, esp. the last, as
+ * the basename basically becomes 8 chars longer. In that
+ * case, the original name is shortened sufficiently to
+ * make it all fit.
+ *
+ * Of course, there's no real reason for the tmp name to
+ * look like the original, except to satisfy us humans.
+ * As long as it's unique, rsync will work.
+ */