1 /** @file 2 3 Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials are licensed and made available under 5 the terms and conditions of the BSD License that accompanies this distribution. 6 The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license. 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 * Copyright (c) 1988, 1993 13 * The Regents of the University of California. All rights reserved. 14 * 15 * Redistribution and use in source and binary forms, with or without 16 * modification, are permitted provided that the following conditions 17 * are met: 18 * 1. Redistributions of source code must retain the above copyright 19 * notice, this list of conditions and the following disclaimer. 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in the 22 * documentation and/or other materials provided with the distribution. 23 * 3. Neither the name of the University nor the names of its contributors 24 * may be used to endorse or promote products derived from this software 25 * without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37 * SUCH DAMAGE. 38 39 tempnam.c 8.1 (Berkeley) 6/4/93 40 NetBSD: tempnam.c,v 1.19 2005/07/27 13:23:07 drochner Exp 41 **/ 42 #include <LibConfig.h> 43 #include <sys/EfiCdefs.h> 44 45 #include "namespace.h" 46 #include <sys/param.h> 47 #include <errno.h> 48 #include <stdio.h> 49 #include <stdlib.h> 50 #include <string.h> 51 #include <unistd.h> 52 #include <paths.h> 53 #include "reentrant.h" 54 #include "local.h" 55 56 __warn_references(tempnam, 57 "warning: tempnam() possibly used unsafely, use mkstemp() or mkdtemp()") 58 59 static const char * 60 trailsl(const char *f) 61 { 62 const char *s = f; 63 while (*s) 64 s++; 65 return (f != s && s[-1] == '/') ? "" : "/"; 66 } 67 68 static char * 69 gentemp(char *name, size_t len, const char *tmp, const char *pfx) 70 { 71 (void)snprintf(name, len, "%s%s%sXXXX", tmp, trailsl(tmp), pfx); 72 return _mktemp(name); 73 } 74 75 char * 76 tempnam(const char *dir, const char *pfx) 77 { 78 int sverrno; 79 char *name, *f; 80 const char *tmp; 81 82 if ((name = malloc((size_t)MAXPATHLEN)) == NULL) 83 return NULL; 84 85 if (!pfx) 86 pfx = "tmp."; 87 88 if ((tmp = getenv("TMPDIR")) != NULL && 89 (f = gentemp(name, (size_t)MAXPATHLEN, tmp, pfx)) != NULL) 90 return f; 91 92 if (dir != NULL && 93 (f = gentemp(name, (size_t)MAXPATHLEN, dir, pfx)) != NULL) 94 return f; 95 96 //if ((f = gentemp(name, (size_t)MAXPATHLEN, P_tmpdir, pfx)) != NULL) 97 // return f; 98 99 if ((f = gentemp(name, (size_t)MAXPATHLEN, _PATH_TMP, pfx)) != NULL) 100 return f; 101 102 sverrno = errno; 103 free(name); 104 errno = sverrno; 105 return(NULL); 106 } 107