From 6705646e8d6d12c165a159ca7b1318e2fd92a085 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sat, 19 May 2012 20:36:12 +0100 Subject: [PATCH] Use rk_rename from roken Rather than using our own renamefile() implementation on Windows, pull in rk_rename() from libroken wherever a rename which unlinks the destination file is required. Change-Id: Ied8ac26b90a0983283b02704328da123bdd4f4b2 Reviewed-on: http://gerrit.openafs.org/8026 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/audit/audit-file.c | 2 +- src/auth/userok.c | 2 +- src/bozo/bnode.c | 2 +- src/bozo/bosoprocs.c | 12 ++++++------ src/bozo/bosserver.c | 14 ++++++-------- src/config/afsconfig-windows.h | 3 +++ src/roken/Makefile.in | 7 +++++-- src/roken/NTMakefile | 1 + src/roken/afsroken.def | 1 + src/shlibafsauthent/libafsauthent.map | 1 - src/update/client.c | 2 +- src/util/afsutil_prototypes.h | 1 - src/util/fileutil.c | 22 ---------------------- src/util/fileutil.h | 3 --- src/util/serverLog.c | 4 ++-- src/viced/serialize_state.c | 2 +- src/viced/viced.c | 4 ++-- src/vlserver/cnvldb.c | 2 +- src/vol/vol-salvage.c | 2 +- 19 files changed, 33 insertions(+), 54 deletions(-) diff --git a/src/audit/audit-file.c b/src/audit/audit-file.c index 3c3c8d2fb..0ccf4479d 100644 --- a/src/audit/audit-file.c +++ b/src/audit/audit-file.c @@ -52,7 +52,7 @@ open_file(const char *fileName) { strcpy(oldName, fileName); strcat(oldName, ".old"); - renamefile(fileName, oldName); + rk_rename(fileName, oldName); flags = O_WRONLY | O_TRUNC | O_CREAT; } tempfd = open(fileName, flags, 0666); diff --git a/src/auth/userok.c b/src/auth/userok.c index 3c3926af8..eb98b3236 100644 --- a/src/auth/userok.c +++ b/src/auth/userok.c @@ -208,7 +208,7 @@ afsconf_DeleteIdentity(struct afsconf_dir *adir, struct rx_identity *user) strcat(nbuffer, ".NXX"); /* generate new file name again */ if (flag == 0) { /* try the rename */ - flag = renamefile(nbuffer, tbuffer); + flag = rk_rename(nbuffer, tbuffer); if (flag == 0) flag = chmod(tbuffer, tstat.st_mode); } else diff --git a/src/bozo/bnode.c b/src/bozo/bnode.c index 8f65e369b..be63a396b 100644 --- a/src/bozo/bnode.c +++ b/src/bozo/bnode.c @@ -149,7 +149,7 @@ SaveCore(struct bnode *abnode, struct bnode_proc TimeFields->tm_hour, TimeFields->tm_min, TimeFields->tm_sec); strcpy(tbuffer, FileName); #endif - code = renamefile(corefile, tbuffer); + code = rk_rename(corefile, tbuffer); free(corefile); } diff --git a/src/bozo/bosoprocs.c b/src/bozo/bosoprocs.c index 79c6aaf4e..b7d641004 100644 --- a/src/bozo/bosoprocs.c +++ b/src/bozo/bosoprocs.c @@ -197,16 +197,16 @@ SBOZO_UnInstall(struct rx_call *acall, char *aname) strcpy(fpOld, filepath); strcat(fpOld, ".OLD"); - code = renamefile(fpBak, filepath); + code = rk_rename(fpBak, filepath); if (code) { /* can't find .BAK, try .OLD */ - code = renamefile(fpOld, filepath); + code = rk_rename(fpOld, filepath); if (code && errno == ENOENT) /* If doesn't exist don't fail */ code = 0; } else { /* now rename .OLD to .BAK */ if (stat(fpOld, &tstat) == 0) - code = renamefile(fpOld, fpBak); + code = rk_rename(fpOld, fpBak); } if (code) code = errno; @@ -251,11 +251,11 @@ SaveOldFiles(char *aname) if (bakTime && (oldTime == 0 || bakTime < now - BOZO_OLDTIME)) { /* no .OLD file, or .BAK is at least a week old */ - code = renamefile(bbuffer, obuffer); + code = rk_rename(bbuffer, obuffer); } /* finally rename to .BAK extension */ - renamefile(aname, bbuffer); + rk_rename(aname, bbuffer); } afs_int32 @@ -325,7 +325,7 @@ SBOZO_Install(struct rx_call *acall, char *aname, afs_int32 asize, afs_int32 mod /* all done, rename to final name */ strcpy(tbuffer, filepath); strcat(tbuffer, ".NEW"); - code = (renamefile(tbuffer, filepath) ? errno : 0); + code = (rk_rename(tbuffer, filepath) ? errno : 0); /* label file with same time for our sanity */ #ifdef AFS_NT40_ENV diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c index bc4993b4e..bab0f622e 100644 --- a/src/bozo/bosserver.c +++ b/src/bozo/bosserver.c @@ -268,16 +268,14 @@ ReadBozoFile(char *aname) /* if BozoInit exists and BosConfig doesn't, try a rename */ if (access(AFSDIR_SERVER_BOZINIT_FILEPATH, 0) == 0 && access(AFSDIR_SERVER_BOZCONF_FILEPATH, 0) != 0) { - code = - renamefile(AFSDIR_SERVER_BOZINIT_FILEPATH, - AFSDIR_SERVER_BOZCONF_FILEPATH); + code = rk_rename(AFSDIR_SERVER_BOZINIT_FILEPATH, + AFSDIR_SERVER_BOZCONF_FILEPATH); if (code < 0) perror("bosconfig rename"); } if (access(AFSDIR_SERVER_BOZCONFNEW_FILEPATH, 0) == 0) { - code = - renamefile(AFSDIR_SERVER_BOZCONFNEW_FILEPATH, - AFSDIR_SERVER_BOZCONF_FILEPATH); + code = rk_rename(AFSDIR_SERVER_BOZCONFNEW_FILEPATH, + AFSDIR_SERVER_BOZCONF_FILEPATH); if (code < 0) perror("bosconfig rename"); } @@ -466,7 +464,7 @@ WriteBozoFile(char *aname) unlink(tbuffer); return -1; } - code = renamefile(tbuffer, aname); + code = rk_rename(tbuffer, aname); if (code) { unlink(tbuffer); return -1; @@ -1025,7 +1023,7 @@ main(int argc, char **argv, char **envp) ) { strcpy(namebuf, AFSDIR_BOZLOG_FILE); strcat(namebuf, ".old"); - renamefile(AFSDIR_BOZLOG_FILE, namebuf); /* try rename first */ + rk_rename(AFSDIR_BOZLOG_FILE, namebuf); /* try rename first */ bozo_logFile = fopen(AFSDIR_BOZLOG_FILE, "a"); if (!bozo_logFile) { printf("bosserver: can't initialize log file (%s).\n", diff --git a/src/config/afsconfig-windows.h b/src/config/afsconfig-windows.h index 0dd71fa15..350a5c781 100644 --- a/src/config/afsconfig-windows.h +++ b/src/config/afsconfig-windows.h @@ -199,6 +199,9 @@ #include "redhat-fix.h" #endif +/* Define if rename() does not unlink an existing file */ +#define RENAME_DOES_NOT_UNLINK 1 + /* Windows does not provide socklen_t prior to WDK 6.0 */ #define HAVE_SOCKLEN_T 1 typedef int socklen_t; diff --git a/src/roken/Makefile.in b/src/roken/Makefile.in index ab2ec1bb0..dc7fe4b4f 100644 --- a/src/roken/Makefile.in +++ b/src/roken/Makefile.in @@ -38,8 +38,8 @@ clean: OBJECTS = $(ROKEN_LIBOBJS) \ base64.o \ - cloexec.o ct.o hex.o issuid.o net_read.o net_write.o socket.o \ - snprintf.o warnerr.o + cloexec.o ct.o hex.o issuid.o net_read.o net_write.o \ + rename.o socket.o snprintf.o warnerr.o $(TOP_LIBDIR)/$(SHLIBOBJ): $(SHLIBOBJ) $(TOP_OBJDIR)/src/config/shlib-install -d $(TOP_LIBDIR) \ @@ -124,6 +124,9 @@ net_read.o: ${UPSTREAM}/net_read.c ${HEADERS} net_write.o: ${UPSTREAM}/net_write.c ${HEADERS} $(AFS_CCRULE) $(UPSTREAM)/net_write.c +rename.o: ${UPSTREAM}/rename.c ${HEADERS} + $(AFS_CCRULE) $(UPSTREAM)/rename.c + setenv.o: ${UPSTREAM}/setenv.c ${HEADERS} $(AFS_CCRULE) $(UPSTREAM)/setenv.c diff --git a/src/roken/NTMakefile b/src/roken/NTMakefile index 665286aad..015f8afa5 100644 --- a/src/roken/NTMakefile +++ b/src/roken/NTMakefile @@ -44,6 +44,7 @@ ROKEN_OBJS = \ $(OUT)\net_read.obj \ $(OUT)\net_write.obj \ $(OUT)\realloc.obj \ + $(OUT)\rename.obj \ $(OUT)\setprogname.obj \ $(OUT)\snprintf.obj \ $(OUT)\socket.obj \ diff --git a/src/roken/afsroken.def b/src/roken/afsroken.def index d514154e0..3b7f17ba5 100644 --- a/src/roken/afsroken.def +++ b/src/roken/afsroken.def @@ -48,3 +48,4 @@ EXPORTS rk_realloc @52 rk_strdup @53 rk_wcsdup @54 + rk_rename @55 diff --git a/src/shlibafsauthent/libafsauthent.map b/src/shlibafsauthent/libafsauthent.map index fb2e6519e..3698b635a 100644 --- a/src/shlibafsauthent/libafsauthent.map +++ b/src/shlibafsauthent/libafsauthent.map @@ -71,7 +71,6 @@ pthread_recursive_mutex_unlock; grmutex; initAFSDirPath; - renamefile; pr_GetCPS; pr_Initialize; pr_GetHostCPS; diff --git a/src/update/client.c b/src/update/client.c index 5bf827bdc..bdcfd521f 100644 --- a/src/update/client.c +++ b/src/update/client.c @@ -600,7 +600,7 @@ RenameNewFiles(struct filestr *modFiles) strcat(newname, ".NEW"); if (verbose >= 2) printf(" renaming %s\n", newname); - errcode = renamefile(newname, fname); + errcode = rk_rename(newname, fname); if (errcode) { printf("could not rename %s to %s\n", newname, fname); afs_com_err(whoami, errno, "could not rename %s to %s", newname, diff --git a/src/util/afsutil_prototypes.h b/src/util/afsutil_prototypes.h index dd3d7fbbf..15136b16e 100644 --- a/src/util/afsutil_prototypes.h +++ b/src/util/afsutil_prototypes.h @@ -43,7 +43,6 @@ extern char* afs_exec_alt(int argc, char **argv, const char *prefix, const char *suffix); /* fileutil.c */ -extern int renamefile(const char *oldname, const char *newname); extern void FilepathNormalizeEx(char *path, int slashType); extern void FilepathNormalize(char *path); diff --git a/src/util/fileutil.c b/src/util/fileutil.c index fcd6f581f..d3f748ff6 100644 --- a/src/util/fileutil.c +++ b/src/util/fileutil.c @@ -23,28 +23,6 @@ #include "fileutil.h" - -/* - * renamefile() -- rename a file (Unix rename() semantics) - */ -int -renamefile(const char *oldname, const char *newname) -{ - int rc = 0; - -#ifdef AFS_NT40_ENV - if (!MoveFileEx(oldname, newname, MOVEFILE_REPLACE_EXISTING)) { - /* rename failed */ - errno = nterr_nt2unix(GetLastError(), EIO); - rc = -1; - } -#else - rc = rename(oldname, newname); -#endif - return rc; -} - - /* * FilepathNormalizeEx() -- normalize file path; i.e., use only forward (or only * backward) slashes, remove multiple and trailing slashes. diff --git a/src/util/fileutil.h b/src/util/fileutil.h index 029104e30..597b037b2 100644 --- a/src/util/fileutil.h +++ b/src/util/fileutil.h @@ -12,9 +12,6 @@ /* File-oriented utility functions */ -extern int - renamefile(const char *oldname, const char *newname); - /* Path normalization routines */ #define FPN_FORWARD_SLASHES 1 #define FPN_BACK_SLASHES 2 diff --git a/src/util/serverLog.c b/src/util/serverLog.c index d94dd84fa..29df7d4dd 100644 --- a/src/util/serverLog.c +++ b/src/util/serverLog.c @@ -313,7 +313,7 @@ OpenLog(const char *fileName) goto makefilename; } if (!isfifo) - renamefile(fileName, FileName); /* don't check error code */ + rk_rename(fileName, FileName); /* don't check error code */ tempfd = open(fileName, O_WRONLY | O_TRUNC | O_CREAT | (isfifo?O_NONBLOCK:0), 0666); } else { strcpy(oldName, fileName); @@ -321,7 +321,7 @@ OpenLog(const char *fileName) /* don't check error */ if (!isfifo) - renamefile(fileName, oldName); + rk_rename(fileName, oldName); tempfd = open(fileName, O_WRONLY | O_TRUNC | O_CREAT | (isfifo?O_NONBLOCK:0), 0666); } diff --git a/src/viced/serialize_state.c b/src/viced/serialize_state.c index 321b03afe..bda5e09bd 100644 --- a/src/viced/serialize_state.c +++ b/src/viced/serialize_state.c @@ -317,7 +317,7 @@ fs_stateCreateDump(struct fs_dump_state * state) snprintf(savedump, sizeof(savedump), "%s.old", state->fn); if (afs_stat(state->fn, &status) == 0) { - renamefile(state->fn, savedump); + rk_rename(state->fn, savedump); } if (((fd = afs_open(state->fn, diff --git a/src/viced/viced.c b/src/viced/viced.c index 5f03ee683..35a7e266a 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -1618,8 +1618,8 @@ WriteSysIdFile(void) /* * File exists; keep the old one around */ - renamefile(AFSDIR_SERVER_SYSID_FILEPATH, - AFSDIR_SERVER_OLDSYSID_FILEPATH); + rk_rename(AFSDIR_SERVER_SYSID_FILEPATH, + AFSDIR_SERVER_OLDSYSID_FILEPATH); } fd = afs_open(AFSDIR_SERVER_SYSID_FILEPATH, O_WRONLY | O_TRUNC | O_CREAT, 0666); diff --git a/src/vlserver/cnvldb.c b/src/vlserver/cnvldb.c index 221797534..6fdc56fc4 100644 --- a/src/vlserver/cnvldb.c +++ b/src/vlserver/cnvldb.c @@ -239,7 +239,7 @@ handleit(struct cmd_syndesc *as, void *arock) } close(new); - renamefile(tempname, pathname); + rk_rename(tempname, pathname); sleep(5); exit(0); } diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index a689a2900..c1bf1ce03 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -4745,7 +4745,7 @@ CheckLogFile(char * log_path) strcpy(oldSlvgLog, log_path); strcat(oldSlvgLog, ".old"); if (!logFile) { - renamefile(log_path, oldSlvgLog); + rk_rename(log_path, oldSlvgLog); logFile = afs_fopen(log_path, "a"); if (!logFile) { /* still nothing, use stdout */ -- 2.39.5