]>
git.saurik.com Git - apple/shell_cmds.git/blob - mktemp/mktemp.c
11db17e4db7972275cd0be7cb5214e72300f24b3
   2  * Copyright (c) 1994, 1995, 1996, 1998 Peter Wemm <peter@netplex.com.au> 
   5  * Redistribution and use in source and binary forms, with or without 
   6  * modification, are permitted provided that the following conditions 
   8  * 1. Redistributions of source code must retain the above copyright 
   9  *    notice, this list of conditions and the following disclaimer. 
  10  * 2. Redistributions in binary form must reproduce the above copyright 
  11  *    notice, this list of conditions and the following disclaimer in the 
  12  *    documentation and/or other materials provided with the distribution. 
  14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 
  15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 
  18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  29  * This program was originally written long ago, originally for a non 
  30  * BSD-like OS without mkstemp().  It's been modified over the years 
  31  * to use mkstemp() rather than the original O_CREAT|O_EXCL/fstat/lstat 
  33  * A cleanup, misc options and mkdtemp() calls were added to try and work 
  34  * more like the OpenBSD version - which was first to publish the interface. 
  48 static const char rcsid
[] = 
  52 static void usage(void); 
  55 main(int argc
, char **argv
) 
  61         int dflag
, qflag
, tflag
, uflag
; 
  63         char tmpbuf
[PATH_MAX
]; 
  67         ret 
= dflag 
= qflag 
= tflag 
= uflag 
= 0; 
  71         while ((c 
= getopt(argc
, argv
, "dqt:u")) != -1) 
  97         if (!tflag 
&& argc 
< 1) { 
 104                 if (confstr(_CS_DARWIN_USER_TEMP_DIR
, tmpbuf
, sizeof(tmpbuf
)) > 0) { 
 107                         tmpdir 
= getenv("TMPDIR"); 
 110                 if (tmpdir 
== NULL
) { 
 114                 len 
= strlen(tmpdir
); 
 115                 if (len 
> 0 && tmpdir
[len 
- 1] == '/') { 
 116                         asprintf(&name
, "%s%s.XXXXXXXX", tmpdir
, prefix
); 
 118                         asprintf(&name
, "%s/%s.XXXXXXXX", tmpdir
, prefix
); 
 121                 tmpdir 
= getenv("TMPDIR"); 
 123                         asprintf(&name
, "%s%s.XXXXXXXX", _PATH_TMP
, prefix
); 
 125                         asprintf(&name
, "%s/%s.XXXXXXXX", tmpdir
, prefix
); 
 127                 /* if this fails, the program is in big trouble already */ 
 132                                 errx(1, "cannot generate template"); 
 136         /* generate all requested files */ 
 137         while (name 
!= NULL 
|| argc 
> 0) { 
 139                         name 
= strdup(argv
[0]); 
 145                         if (mkdtemp(name
) == NULL
) { 
 148                                         warn("mkdtemp failed on %s", name
); 
 150                                 printf("%s\n", name
); 
 159                                         warn("mkstemp failed on %s", name
); 
 164                                 printf("%s\n", name
); 
 178                 "usage: mktemp [-d] [-q] [-t prefix] [-u] template ...\n"); 
 180                 "       mktemp [-d] [-q] [-u] -t prefix \n");