Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Jan 2000 19:25:02 -0500 (EST)
From:      Mike Heffner <mheffner@mailandnews.com>
To:        FreeBSD-audit <FreeBSD-audit@freebsd.org>, mike@gnu.ai.mit.edu
Subject:   sort, revised patch
Message-ID:  <XFMail.20000128192502.mheffner@mailandnews.com>

next in thread | raw e-mail | index | archive | help
Alright, since it was our fourth snow day in a row =), I had time to redo
this. Here's the revised patch, it keeps the original naming scheme for
tempfiles, but puts them in a dir made with mkdtemp(3).

Index: sort.c
===================================================================
RCS file: /home/ncvs/src/gnu/usr.bin/sort/sort.c,v
retrieving revision 1.15
diff -u -r1.15 sort.c
--- sort.c      1999/04/25 22:14:05     1.15
+++ sort.c      2000/01/29 00:12:21
@@ -171,6 +171,8 @@
 
 /* Prefix for temporary file names. */
 static char *temp_file_prefix;
+/* Temporary dir for temp files, *with* above prefix */
+static char *temp_dir = NULL;
 
 /* Flag to reverse the order of all comparisons. */
 static int reverse;
@@ -288,6 +290,9 @@
 
   for (node = temphead.next; node; node = node->next)
     unlink (node->name);
+  if( temp_dir )
+    rmdir(temp_dir);
+  
 }
 
 /* Allocate N bytes of memory dynamically, with error checking.  */
@@ -413,6 +418,7 @@
     }
 }
 
+#define DIR_TEMPLATE    "sortXXXXXXXXXX"
 /* Return a name for a temporary file. */
 
 static char *
@@ -420,14 +426,28 @@
 {
   static unsigned int seq;
   int len = strlen (temp_file_prefix);
-  char *name = xmalloc (len + 1 + sizeof ("sort") - 1 + 5 + 5 + 1);
+  char *name;
   struct tempnode *node;
 
   node = (struct tempnode *) xmalloc (sizeof (struct tempnode));
+  if( !temp_dir )
+    {
+      temp_dir = xmalloc( len + 1 + strlen(DIR_TEMPLATE) + 1 );
+      sprintf(temp_dir,
+              "%s%s%s",
+              temp_file_prefix,
+              (len && temp_file_prefix[len - 1] != '/') ? "/" : "",
+              DIR_TEMPLATE);
+      if( mkdtemp(temp_dir) == NULL )
+        {
+          error(0, errno, _("can't make temp dir"));
+          exit(2);
+        }
+    }
+  name = xmalloc(strlen(temp_dir) + 1 + strlen("sort") + 5 + 5 + 1);
   sprintf (name,
-          "%s%ssort%5.5d%5.5d",
-          temp_file_prefix,
-          (len && temp_file_prefix[len - 1] != '/') ? "/" : "",
+          "%s/sort%5.5d%5.5d",
+          temp_dir,
           (unsigned int) getpid () & 0xffff, seq);
 
   /* Make sure that SEQ's value fits in 5 digits.  */

---------------------------------
Mike Heffner <spock@techfour.net>
Fredericksburg, VA
ICQ# 882073
Date: 28-Jan-2000   Time: 19:15:54
---------------------------------


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20000128192502.mheffner>