From owner-freebsd-audit Wed Jan 26 21:28:27 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 46510154A7 for ; Wed, 26 Jan 2000 21:28:24 -0800 (PST) (envelope-from mheffner@mailandnews.com) Received: from muriel.penguinpowered.com [208.138.198.103] (mheffner@mailandnews.com); Thu, 27 Jan 2000 00:28:21 -0500 X-WM-Posted-At: MailAndNews.com; Thu, 27 Jan 00 00:28:21 -0500 Content-Length: 1993 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: Thu, 27 Jan 2000 00:30:05 -0500 (EST) Reply-To: Mike Heffner From: Mike Heffner To: FreeBSD-audit , To: FreeBSD-audit , Mike Haertel Subject: use mkstemp(3) for sort Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG This patch uses mkstemp(3), instead of a pid + sequence number(usually zero), for a tempfile name...reviewers? 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/27 05:17:26 @@ -276,6 +276,7 @@ static struct tempnode { char *name; + int fd; struct tempnode *next; } temphead; @@ -336,9 +337,15 @@ xtmpfopen (const char *file) { FILE *fp; - int fd; + int fd=-1; + struct tempnode *temp; - fd = open (file, O_EXCL | O_WRONLY | O_CREAT | O_TRUNC, 0600); + /* find the fd for file */ + for(temp = &temphead; temp->next; temp = temp->next) + if( strcmp(temp->next->name, file) == 0 ) + break; + if( temp->next ) + fd = temp->next->fd; if (fd < 0 || (fp = fdopen (fd, "w")) == NULL) { error (0, errno, "%s", file); @@ -418,23 +425,16 @@ static char * tempname (void) { - 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)); - sprintf (name, - "%s%ssort%5.5d%5.5d", - temp_file_prefix, - (len && temp_file_prefix[len - 1] != '/') ? "/" : "", - (unsigned int) getpid () & 0xffff, seq); - - /* Make sure that SEQ's value fits in 5 digits. */ - ++seq; - if (seq >= 100000) - seq = 0; - + asprintf(&name, + "%s%ssortXXXXXXXXXX", + temp_file_prefix, + (len && temp_file_prefix[len - 1] != '/') ? "/" : ""); + node->fd = mkstemp(name); node->name = name; node->next = temphead.next; temphead.next = node; --------------------------------- Mike Heffner Fredericksburg, VA ICQ# 882073 Date: 27-Jan-2000 Time: 00:20:59 --------------------------------- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message