]> diplodocus.org Git - nmh/blobdiff - sbr/m_mktemp.c
Put, rather than print, single characters.
[nmh] / sbr / m_mktemp.c
index 17cf74580265b4fb92210bce3d495c8ae12b4702..6bfa705f405f1d3e7b987e3a834b3420a43166ef 100644 (file)
@@ -170,7 +170,7 @@ m_mktemps(
 
     fd = mkstemps(tmpfil, (int) strlen(suffix));
 #else  /* ! HAVE_MKSTEMPS */
-    /* Solaris 10, e.g. */
+    /* NetBSD, Solaris 10 */
 
     if (pfx_in == NULL) {
         tmpfil = concat(get_temp_dir(), "/nmhXXXXXX", NULL);
@@ -181,31 +181,15 @@ m_mktemps(
     fd = mkstemp(tmpfil);
     {
         char *oldfilename = tmpfil;
-
         tmpfil = concat(oldfilename, suffix, NULL);
 
-        /* link(2) requires that the new path not exist.  And if we
-           have to resort to rename(2), at least try to remove a file
-           that would be in the way. */
-        if (unlink(tmpfil) != 0  &&  errno != ENOENT) {
-            advise("unlink", "Failed to unlink \"%s\"", tmpfil);
+        if (rename(oldfilename, tmpfil) != 0) {
             (void) unlink(oldfilename);
             free(oldfilename);
             free(tmpfil);
             return NULL;
         }
 
-        /* link() doesn't always work, such as on Windows FAT
-           filesystems.  If it fails, try rename(). */
-        if (link(oldfilename, tmpfil) != 0  &&
-            rename(oldfilename, tmpfil) != 0) {
-            (void) unlink(oldfilename);
-            free(oldfilename);
-            free(tmpfil);
-            return NULL;
-        }
-
-        (void) unlink(oldfilename);
         free(oldfilename);
     }
 #endif /* ! HAVE_MKSTEMPS */
@@ -371,13 +355,13 @@ remove_registered_files(int sig) {
 
         exit(1);
     } else {
+        remove_registered_files_atexit();
+
         act.sa_handler = SIG_DFL;
         (void) sigemptyset(&act.sa_mask);
         act.sa_flags = 0;
         (void) sigaction(sig, &act, 0);
 
-        remove_registered_files_atexit();
-
         (void) raise(sig);
     }
 }