Use rk_rename from roken
authorSimon Wilkinson <sxw@your-file-system.com>
Sat, 19 May 2012 19:36:12 +0000 (20:36 +0100)
committerDerrick Brashear <shadow@dementix.org>
Fri, 31 Aug 2012 17:21:38 +0000 (10:21 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>

19 files changed:
src/audit/audit-file.c
src/auth/userok.c
src/bozo/bnode.c
src/bozo/bosoprocs.c
src/bozo/bosserver.c
src/config/afsconfig-windows.h
src/roken/Makefile.in
src/roken/NTMakefile
src/roken/afsroken.def
src/shlibafsauthent/libafsauthent.map
src/update/client.c
src/util/afsutil_prototypes.h
src/util/fileutil.c
src/util/fileutil.h
src/util/serverLog.c
src/viced/serialize_state.c
src/viced/viced.c
src/vlserver/cnvldb.c
src/vol/vol-salvage.c

index 3c3c8d2..0ccf447 100644 (file)
@@ -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);
index 3c3926a..eb98b32 100644 (file)
@@ -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
index 8f65e36..be63a39 100644 (file)
@@ -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);
 }
 
index 79c6aaf..b7d6410 100644 (file)
@@ -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
index bc4993b..bab0f62 100644 (file)
@@ -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",
index 0dd71fa..350a5c7 100644 (file)
 #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;
index ab2ec1b..dc7fe4b 100644 (file)
@@ -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
 
index 665286a..015f8af 100644 (file)
@@ -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 \
index d514154..3b7f17b 100644 (file)
@@ -48,3 +48,4 @@ EXPORTS
         rk_realloc              @52
         rk_strdup               @53
         rk_wcsdup               @54
+       rk_rename               @55
index fb2e651..3698b63 100644 (file)
@@ -71,7 +71,6 @@
        pthread_recursive_mutex_unlock;
        grmutex;
        initAFSDirPath;
-       renamefile;
        pr_GetCPS;
        pr_Initialize;
        pr_GetHostCPS;
index 5bf827b..bdcfd52 100644 (file)
@@ -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,
index dd3d7fb..15136b1 100644 (file)
@@ -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);
 
index fcd6f58..d3f748f 100644 (file)
 
 #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.
index 029104e..597b037 100644 (file)
@@ -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
index d94dd84..29df7d4 100644 (file)
@@ -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);
     }
 
index 321b03a..bda5e09 100644 (file)
@@ -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,
index 5f03ee6..35a7e26 100644 (file)
@@ -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);
index 2217975..6fdc56f 100644 (file)
@@ -239,7 +239,7 @@ handleit(struct cmd_syndesc *as, void *arock)
     }
     close(new);
 
-    renamefile(tempname, pathname);
+    rk_rename(tempname, pathname);
     sleep(5);
     exit(0);
 }
index a689a29..c1bf1ce 100644 (file)
@@ -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 */