From owner-freebsd-audit Fri Jan 28 16:23:36 2000 Delivered-To: freebsd-audit@freebsd.org Received: from MailAndNews.com (MailAndNews.com [199.29.68.160]) by hub.freebsd.org (Postfix) with ESMTP id 2B35B1503E for ; Fri, 28 Jan 2000 16:23:31 -0800 (PST) (envelope-from mheffner@mailandnews.com) Received: from muriel.penguinpowered.com [208.138.198.103] (mheffner@mailandnews.com); Fri, 28 Jan 2000 19:23:27 -0500 X-WM-Posted-At: MailAndNews.com; Fri, 28 Jan 00 19:23:27 -0500 Content-Length: 2309 Message-ID: X-Mailer: XFMail 1.4.4 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 Date: Fri, 28 Jan 2000 19:25:02 -0500 (EST) Reply-To: Mike Heffner From: Mike Heffner To: FreeBSD-audit , mike@gnu.ai.mit.edu Subject: sort, revised patch Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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 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