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) 1990, 1993 13 * The Regents of the University of California. All rights reserved. 14 * 15 * This code is derived from software contributed to Berkeley by 16 * Chris Torek. 17 * 18 * Redistribution and use in source and binary forms, with or without 19 * modification, are permitted provided that the following conditions 20 * are met: 21 * 1. Redistributions of source code must retain the above copyright 22 * notice, this list of conditions and the following disclaimer. 23 * 2. Redistributions in binary form must reproduce the above copyright 24 * notice, this list of conditions and the following disclaimer in the 25 * documentation and/or other materials provided with the distribution. 26 * 3. Neither the name of the University nor the names of its contributors 27 * may be used to endorse or promote products derived from this software 28 * without specific prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 31 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 34 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 35 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 36 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 37 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 38 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 39 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 40 * SUCH DAMAGE. 41 42 tmpfile.c 8.1 (Berkeley) 6/4/93 43 NetBSD: tmpfile.c,v 1.11 2003/08/07 16:43:33 agc Exp 44 **/ 45 #include <LibConfig.h> 46 #include <sys/EfiCdefs.h> 47 48 #include "namespace.h" 49 #include <sys/types.h> 50 #include <signal.h> 51 #include <errno.h> 52 #include <stdio.h> 53 #include <stdlib.h> 54 #include <string.h> 55 #include <paths.h> 56 #include <unistd.h> 57 58 #define TRAILER "tmp.XXXX" 59 60 FILE * 61 tmpfile() 62 { 63 //sigset_t set, oset; 64 FILE *fp; 65 int fd, sverrno; 66 char buf[sizeof(_PATH_TMP) + sizeof(TRAILER)]; 67 68 (void)memcpy(buf, _PATH_TMP, sizeof(_PATH_TMP) - 1); 69 (void)memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER)); 70 71 //sigfillset(&set); 72 //(void)sigprocmask(SIG_BLOCK, &set, &oset); 73 74 fd = mkstemp(buf); 75 if (fd != -1) { 76 /* Changed from unlink(buf) because of differences between the behavior 77 of Unix and UEFI file systems. 78 */ 79 (void)DeleteOnClose(fd); 80 } 81 82 //(void)sigprocmask(SIG_SETMASK, &oset, NULL); 83 84 if (fd == -1) 85 return (NULL); 86 87 if ((fp = fdopen(fd, "w+")) == NULL) { 88 sverrno = errno; 89 (void)close(fd); 90 errno = sverrno; 91 return (NULL); 92 } 93 return (fp); 94 } 95