From 5911fee567b0e54527403ec742bce217adf9f78d Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 10 Jan 2004 22:13:19 +0000 Subject: [PATCH] A slightly better reset mechanism for send_file_entry() and receive_file_entry(). --- batch.c | 3 +-- flist.c | 51 +++++++++++++++++++++++++++------------------------ 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/batch.c b/batch.c index 753eae99..4560a914 100644 --- a/batch.c +++ b/batch.c @@ -45,7 +45,6 @@ void write_batch_flist_info(int flist_count, struct file_struct **files) write_int(f, protocol_version); write_int(f, flist_count); - reset_file_entry_vars(); for (i = 0; i < flist_count; i++) send_file_entry(files[i], f, files[i]->flags & LIVE_FLAGS); send_file_entry(NULL, f, 0); @@ -157,7 +156,7 @@ struct file_list *create_flist_from_batch(void) flags |= read_byte(f) << 8; receive_file_entry(&batch_flist->files[i], flags, f); } - reset_file_entry_vars(); + receive_file_entry(NULL, 0, 0); /* Signal that we're done. */ protocol_version = save_pv; stats.total_read = save_read; diff --git a/flist.c b/flist.c index 41605340..06019017 100644 --- a/flist.c +++ b/flist.c @@ -351,32 +351,16 @@ static void flist_expand(struct file_list *flist) } } -/* These vars are used by both send_file_entry() and receive_file_entry() - * (but just one at a time). They have been placed outside these functions - * so that we can reset the values when the batch-processing wants to make - * extra use of these functions (which needs to start from a known state). */ -static time_t modtime; -static mode_t mode; -static DEV64_T rdev; /* just high bytes in p28 onward */ -static uid_t uid; -static gid_t gid; -static DEV64_T dev; -static char lastname[MAXPATHLEN]; - -void reset_file_entry_vars(void) -{ - modtime = 0; - mode = 0; - rdev = 0; - uid = 0; - gid = 0; - dev = 0; - *lastname = '\0'; -} - void send_file_entry(struct file_struct *file, int f, unsigned short base_flags) { unsigned short flags; + static time_t modtime; + static mode_t mode; + static DEV64_T rdev; /* just high bytes in p28 onward */ + static DEV64_T dev; + static uid_t uid; + static gid_t gid; + static char lastname[MAXPATHLEN]; char *fname, fbuf[MAXPATHLEN]; int l1, l2; @@ -385,6 +369,10 @@ void send_file_entry(struct file_struct *file, int f, unsigned short base_flags) if (!file) { write_byte(f, 0); + modtime = 0, mode = 0; + rdev = 0, dev = 0; + uid = 0, gid = 0; + *lastname = '\0'; return; } @@ -531,11 +519,26 @@ void send_file_entry(struct file_struct *file, int f, unsigned short base_flags) void receive_file_entry(struct file_struct **fptr, unsigned short flags, int f) { + static time_t modtime; + static mode_t mode; + static DEV64_T rdev; /* just high bytes in p28 onward */ + static DEV64_T dev; + static uid_t uid; + static gid_t gid; + static char lastname[MAXPATHLEN]; char thisname[MAXPATHLEN]; unsigned int l1 = 0, l2 = 0; char *p; struct file_struct *file; + if (!fptr) { + modtime = 0, mode = 0; + rdev = 0, dev = 0; + uid = 0, gid = 0; + *lastname = '\0'; + return; + } + if (flags & SAME_NAME) l1 = read_byte(f); @@ -1190,7 +1193,7 @@ struct file_list *recv_file_list(int f) f_name(flist->files[i])); } } - + receive_file_entry(NULL, 0, 0); /* Signal that we're done. */ if (verbose > 2) rprintf(FINFO, "received %d names\n", flist->count); -- 2.34.1