Module Name:    src
Committed By:   christos
Date:           Wed Jun 18 17:47:58 UTC 2014

Modified Files:
        src/lib/libc: shlib_version
        src/lib/libc/stdio: Makefile.inc gettemp.c local.h mkdtemp.c mkstemp.c
            mktemp.3 mktemp.c
Added Files:
        src/lib/libc/stdio: gettemp.h mkostemp.c mkostemps.c mkstemps.c

Log Message:
add mkostemp, mkostemps, mkstemps from FreeBSD.


To generate a diff of this commit:
cvs rdiff -u -r1.251 -r1.252 src/lib/libc/shlib_version
cvs rdiff -u -r1.43 -r1.44 src/lib/libc/stdio/Makefile.inc
cvs rdiff -u -r1.17 -r1.18 src/lib/libc/stdio/gettemp.c
cvs rdiff -u -r0 -r1.1 src/lib/libc/stdio/gettemp.h \
    src/lib/libc/stdio/mkostemp.c src/lib/libc/stdio/mkostemps.c \
    src/lib/libc/stdio/mkstemps.c
cvs rdiff -u -r1.37 -r1.38 src/lib/libc/stdio/local.h
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/stdio/mkdtemp.c \
    src/lib/libc/stdio/mkstemp.c
cvs rdiff -u -r1.28 -r1.29 src/lib/libc/stdio/mktemp.3
cvs rdiff -u -r1.20 -r1.21 src/lib/libc/stdio/mktemp.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/shlib_version
diff -u src/lib/libc/shlib_version:1.251 src/lib/libc/shlib_version:1.252
--- src/lib/libc/shlib_version:1.251	Fri Jun 13 11:45:05 2014
+++ src/lib/libc/shlib_version	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: shlib_version,v 1.251 2014/06/13 15:45:05 joerg Exp $
+#	$NetBSD: shlib_version,v 1.252 2014/06/18 17:47:58 christos Exp $
 #	Remember to update distrib/sets/lists/base/shl.* when changing
 #
 # things we wish to do on next major version bump:
@@ -41,4 +41,4 @@
 # - redo stdin/stdout/stderr to not require copy relocations
 # - move gethostbyname to a compat library
 major=12
-minor=191
+minor=192

Index: src/lib/libc/stdio/Makefile.inc
diff -u src/lib/libc/stdio/Makefile.inc:1.43 src/lib/libc/stdio/Makefile.inc:1.44
--- src/lib/libc/stdio/Makefile.inc:1.43	Thu Jan 16 15:31:43 2014
+++ src/lib/libc/stdio/Makefile.inc	Wed Jun 18 13:47:58 2014
@@ -1,5 +1,5 @@
 #	from: @(#)Makefile.inc	5.7 (Berkeley) 6/27/91
-#	$NetBSD: Makefile.inc,v 1.43 2014/01/16 20:31:43 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.44 2014/06/18 17:47:58 christos Exp $
 
 # stdio sources
 .PATH: ${.CURDIR}/stdio
@@ -13,8 +13,9 @@ SRCS+=	clrerr.c dprintf.c fclose.c fdope
 	fread.c freopen.c fscanf.c fseek.c fseeko.c fsetpos.c ftell.c ftello.c \
 	funopen.c fvwrite.c fwalk.c fwide.c fwprintf.c fwrite.c fwscanf.c \
 	getc.c getchar.c getdelim.c getline.c gettemp.c getw.c getwc.c \
-	getwchar.c makebuf.c mkdtemp.c mkstemp.c perror.c printf.c putc.c \
-	putchar.c puts.c putw.c putwc.c putwchar.c refill.c remove.c rewind.c \
+	getwchar.c makebuf.c mkdtemp.c mkstemp.c mkstemps.c mkostemp.c \
+	mkostemps.c perror.c printf.c putc.c putchar.c puts.c putw.c putwc.c \
+	putwchar.c refill.c remove.c rewind.c \
 	rget.c scanf.c setbuf.c setbuffer.c setvbuf.c snprintf_ss.c \
 	sscanf.c stdio.c swprintf.c swscanf.c tmpfile.c ungetc.c ungetwc.c \
 	vasprintf.c vdprintf.c vfprintf.c vfscanf.c vfwprintf.c vfwscanf.c \

Index: src/lib/libc/stdio/gettemp.c
diff -u src/lib/libc/stdio/gettemp.c:1.17 src/lib/libc/stdio/gettemp.c:1.18
--- src/lib/libc/stdio/gettemp.c:1.17	Tue Jan 21 14:09:48 2014
+++ src/lib/libc/stdio/gettemp.c	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: gettemp.c,v 1.17 2014/01/21 19:09:48 seanb Exp $	*/
+/*	$NetBSD: gettemp.c,v 1.18 2014/06/18 17:47:58 christos Exp $	*/
 
 /*
  * Copyright (c) 1987, 1993
@@ -29,9 +29,7 @@
  * SUCH DAMAGE.
  */
 
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
+#include "gettemp.h"
 
 #if !HAVE_NBTOOL_CONFIG_H || !HAVE_MKSTEMP || !HAVE_MKDTEMP
 
@@ -40,129 +38,119 @@
 #if 0
 static char sccsid[] = "@(#)mktemp.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: gettemp.c,v 1.17 2014/01/21 19:09:48 seanb Exp $");
+__RCSID("$NetBSD: gettemp.c,v 1.18 2014/06/18 17:47:58 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
+#include <sys/param.h>
 #include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
+#include <string.h>
 
-#if HAVE_NBTOOL_CONFIG_H
-#define	GETTEMP		__nbcompat_gettemp
-#else
-#include "reentrant.h"
-#include "local.h"
-#define	GETTEMP		__gettemp
-#endif
+static const unsigned char padchar[] =
+"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
 int
-GETTEMP(char *path, int *doopen, int domkdir)
+GETTEMP(char *path, int *doopen, int domkdir, int slen, int oflags)
 {
-	char *start, *trv;
+	char *start, *trv, *suffp, *carryp;
+	char *pad;
 	struct stat sbuf;
-	u_int pid;
-
-	/* To guarantee multiple calls generate unique names even if
-	   the file is not created. 676 different possibilities with 7
-	   or more X's, 26 with 6 or less. */
-	static char xtra[2] = "aa";
-	int xcnt = 0;
+	int rval;
+	uint32_t rand;
+	char carrybuf[MAXPATHLEN];
 
 	_DIAGASSERT(path != NULL);
 	/* doopen may be NULL */
+	if ((doopen != NULL && domkdir) || slen < 0 ||
+	    (oflags & ~(O_APPEND | O_DIRECT | O_SHLOCK | O_EXLOCK | O_SYNC |
+	    O_CLOEXEC)) != 0) {
+		errno = EINVAL;
+		return 0;
+	}
 
-	pid = getpid();
+	for (trv = path; *trv != '\0'; ++trv)
+		continue;
 
-	/* Move to end of path and count trailing X's. */
-	for (trv = path; *trv; ++trv)
-		if (*trv == 'X')
-			xcnt++;
-		else
-			xcnt = 0;	
-
-	/* Use at least one from xtra.  Use 2 if more than 6 X's. */
-	if (xcnt > 0) {
-		*--trv = xtra[0];
-		xcnt--;
-	}
-	if (xcnt > 5) {
-		*--trv = xtra[1];
-		xcnt--;
-	}
-
-	/* Set remaining X's to pid digits with 0's to the left. */
-	for (; xcnt > 0; xcnt--) {
-		*--trv = (pid % 10) + '0';
-		pid /= 10;
-	}
-
-	/* update xtra for next call. */
-	if (xtra[0] != 'z')
-		xtra[0]++;
-	else {
-		xtra[0] = 'a';
-		if (xtra[1] != 'z')
-			xtra[1]++;
-		else
-			xtra[1] = 'a';
+	if (trv - path >= MAXPATHLEN) {
+		errno = ENAMETOOLONG;
+		return 0;
 	}
+	trv -= slen;
+	suffp = trv;
+	--trv;
+	if (trv < path || NULL != strchr(suffp, '/')) {
+		errno = EINVAL;
+		return 0;
+	}
+
+	/* Fill space with random characters */
+	while (trv >= path && *trv == 'X') {
+		rand = arc4random_uniform(sizeof(padchar) - 1);
+		*trv-- = padchar[rand];
+	}
+	start = trv + 1;
+
+	/* save first combination of random characters */
+	memcpy(carrybuf, start, suffp - start);
 
 	/*
-	 * check the target directory; if you have six X's and it
-	 * doesn't exist this runs for a *very* long time.
+	 * check the target directory.
 	 */
-	for (start = trv + 1;; --trv) {
-		if (trv <= path)
-			break;
-		if (*trv == '/') {
-			int e;
-			*trv = '\0';
-			e = stat(path, &sbuf);
-			*trv = '/';
-			if (e == -1)
-				return doopen == NULL && !domkdir;
-			if (!S_ISDIR(sbuf.st_mode)) {
-				errno = ENOTDIR;
-				return doopen == NULL && !domkdir;
+	if (doopen != NULL || domkdir) {
+		for (; trv > path; --trv) {
+			if (*trv == '/') {
+				*trv = '\0';
+				rval = stat(path, &sbuf);
+				*trv = '/';
+				if (rval != 0)
+					return 0;
+				if (!S_ISDIR(sbuf.st_mode)) {
+					errno = ENOTDIR;
+					return 0;
+				}
+				break;
 			}
-			break;
 		}
 	}
 
 	for (;;) {
 		if (doopen) {
-			if ((*doopen =
-			    open(path, O_CREAT | O_EXCL | O_RDWR, 0600)) >= 0)
+			if ((*doopen = open(path, O_CREAT|O_EXCL|O_RDWR|oflags,
+			    0600)) != -1)
 				return 1;
 			if (errno != EEXIST)
 				return 0;
 		} else if (domkdir) {
-			if (mkdir(path, 0700) >= 0)
+			if (mkdir(path, 0700) != -1)
 				return 1;
 			if (errno != EEXIST)
 				return 0;
 		} else if (lstat(path, &sbuf))
-			return errno == ENOENT ? 1 : 0;
+			return errno == ENOENT;
 
-		/* tricky little algorithm for backward compatibility */
-		for (trv = start;;) {
-			if (!*trv)
+		/*
+		 * If we have a collision,
+		 * cycle through the space of filenames
+		 */
+		for (trv = start, carryp = carrybuf;;) {
+			/* have we tried all possible permutations? */
+			if (trv == suffp)
+				return 0; /* yes - exit with EEXIST */
+			pad = strchr((const char *)padchar, *trv);
+			if (pad == NULL) {
+				/* this should never happen */
+				errno = EIO;
 				return 0;
-			if (*trv == 'z')
-				*trv++ = 'a';
-			else {
-				if (isdigit((unsigned char)*trv))
-					*trv = 'a';
-				else
-					++*trv;
+			}
+			/* increment character */
+			*trv = (*++pad == '\0') ? padchar[0] : *pad;
+			/* carry to next position? */
+			if (*trv == *carryp) {
+				/* increment position and loop */
+				++trv;
+				++carryp;
+			} else {
+				/* try with new name */
 				break;
 			}
 		}

Index: src/lib/libc/stdio/local.h
diff -u src/lib/libc/stdio/local.h:1.37 src/lib/libc/stdio/local.h:1.38
--- src/lib/libc/stdio/local.h:1.37	Fri Oct  4 16:49:16 2013
+++ src/lib/libc/stdio/local.h	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: local.h,v 1.37 2013/10/04 20:49:16 christos Exp $	*/
+/*	$NetBSD: local.h,v 1.38 2014/06/18 17:47:58 christos Exp $	*/
 
 /*-
  * Copyright (c) 1990, 1993
@@ -60,7 +60,7 @@ extern void	(*__cleanup)(void);
 extern void	__smakebuf(FILE *);
 extern int	__swhatbuf(FILE *, size_t *, int *);
 extern int	_fwalk(int (*)(FILE *));
-extern char	*_mktemp(char *);
+extern char    *_mktemp(char *);
 extern int	__swsetup(FILE *);
 extern int	__sflags(const char *, int *);
 extern int	__svfscanf(FILE * __restrict, const char * __restrict,
@@ -75,8 +75,6 @@ extern int	__vfprintf_unlocked_l(FILE * 
 
 extern int	__sdidinit;
 
-extern int	__gettemp(char *, int *, int);
-
 extern wint_t	__fgetwc_unlock(FILE *);
 extern wint_t	__fputwc_unlock(wchar_t, FILE *);
 

Index: src/lib/libc/stdio/mkdtemp.c
diff -u src/lib/libc/stdio/mkdtemp.c:1.11 src/lib/libc/stdio/mkdtemp.c:1.12
--- src/lib/libc/stdio/mkdtemp.c:1.11	Thu Mar 15 14:22:30 2012
+++ src/lib/libc/stdio/mkdtemp.c	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mkdtemp.c,v 1.11 2012/03/15 18:22:30 christos Exp $	*/
+/*	$NetBSD: mkdtemp.c,v 1.12 2014/06/18 17:47:58 christos Exp $	*/
 
 /*
  * Copyright (c) 1987, 1993
@@ -29,9 +29,7 @@
  * SUCH DAMAGE.
  */
 
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
+#include "gettemp.h"
 
 #if !HAVE_NBTOOL_CONFIG_H || !HAVE_MKDTEMP
 
@@ -40,29 +38,16 @@
 #if 0
 static char sccsid[] = "@(#)mktemp.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: mkdtemp.c,v 1.11 2012/03/15 18:22:30 christos Exp $");
+__RCSID("$NetBSD: mkdtemp.c,v 1.12 2014/06/18 17:47:58 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
-#if HAVE_NBTOOL_CONFIG_H
-#define	GETTEMP		__nbcompat_gettemp
-#else
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-#define	GETTEMP		__gettemp
-#endif
-
 char *
 mkdtemp(char *path)
 {
 	_DIAGASSERT(path != NULL);
 
-	return GETTEMP(path, NULL, 1) ? path : NULL;
+	return GETTEMP(path, NULL, 1, 0, 0) ? path : NULL;
 }
 
 #endif /* !HAVE_NBTOOL_CONFIG_H || !HAVE_MKDTEMP */
Index: src/lib/libc/stdio/mkstemp.c
diff -u src/lib/libc/stdio/mkstemp.c:1.11 src/lib/libc/stdio/mkstemp.c:1.12
--- src/lib/libc/stdio/mkstemp.c:1.11	Thu Mar 15 14:22:30 2012
+++ src/lib/libc/stdio/mkstemp.c	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mkstemp.c,v 1.11 2012/03/15 18:22:30 christos Exp $	*/
+/*	$NetBSD: mkstemp.c,v 1.12 2014/06/18 17:47:58 christos Exp $	*/
 
 /*
  * Copyright (c) 1987, 1993
@@ -28,10 +28,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
+#include "gettemp.h"
 
 #if !HAVE_NBTOOL_CONFIG_H || !HAVE_MKSTEMP
 
@@ -40,25 +37,10 @@
 #if 0
 static char sccsid[] = "@(#)mktemp.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: mkstemp.c,v 1.11 2012/03/15 18:22:30 christos Exp $");
+__RCSID("$NetBSD: mkstemp.c,v 1.12 2014/06/18 17:47:58 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
-#include "namespace.h"
-
-#if HAVE_NBTOOL_CONFIG_H
-#define	GETTEMP		__nbcompat_gettemp
-#else
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-#define	GETTEMP		__gettemp
-#endif
-
 #ifdef __weak_alias
 __weak_alias(mkstemp,_mkstemp)
 #endif
@@ -70,7 +52,7 @@ mkstemp(char *path)
 
 	_DIAGASSERT(path != NULL);
 
-	return GETTEMP(path, &fd, 0) ? fd : -1;
+	return GETTEMP(path, &fd, 0, 0, 0) ? fd : -1;
 }
 
 #endif /* !HAVE_NBTOOL_CONFIG_H || !HAVE_MKSTEMP */

Index: src/lib/libc/stdio/mktemp.3
diff -u src/lib/libc/stdio/mktemp.3:1.28 src/lib/libc/stdio/mktemp.3:1.29
--- src/lib/libc/stdio/mktemp.3:1.28	Thu May 13 23:22:49 2010
+++ src/lib/libc/stdio/mktemp.3	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-.\"	$NetBSD: mktemp.3,v 1.28 2010/05/14 03:22:49 joerg Exp $
+.\"	$NetBSD: mktemp.3,v 1.29 2014/06/18 17:47:58 christos Exp $
 .\"
 .\" Copyright (c) 1989, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -45,8 +45,15 @@
 .Fn mktemp "char *template"
 .Ft int
 .Fn mkstemp "char *template"
+.Ft int
+.Fn mkostemp "char *template" "int oflags"
+.Ft int
+.Fn mkostemps "char *template" "int suffixlen" "int oflags"
 .Ft char *
 .Fn mkdtemp "char *template"
+.In unistd.h
+.Ft int
+.Fn mkstemps "char *template" "int suffixlen"
 .Sh DESCRIPTION
 The
 .Fn mktemp
@@ -92,6 +99,42 @@ makes the same replacement to the templa
 mode 0600, returning a file descriptor opened for reading and writing.
 This avoids the race between testing for a file's existence and opening it
 for use.
+The
+.Fn mkostemp
+function
+is like
+.Fn mkstemp
+but allows specifying additional
+.Xr open 2
+flags (defined in
+.In fcntl.h ) .
+The permitted flags are
+.Dv O_APPEND ,
+.Dv O_DIRECT ,
+.Dv O_SHLOCK ,
+.Dv O_EXLOCK ,
+.Dv O_SYNC
+and
+.Dv O_CLOEXEC .
+.Pp
+The
+.Fn mkstemps
+and
+.Fn mkostemps
+functions act the same as
+.Fn mkstemp
+and
+.Fn mkostemp
+respectively,
+except they permit a suffix to exist in the template.
+The template should be of the form
+.Pa /tmp/tmpXXXXXXsuffix .
+The
+.Fn mkstemps
+and
+.Fn mkostemps
+function
+are told the length of the suffix string.
 .Pp
 The
 .Fn mkdtemp
@@ -115,8 +158,12 @@ return a pointer to the template on succ
 .Dv NULL
 on failure.
 The
-.Fn mkstemp
-function
+.Fn mkstemp ,
+.Fn mkostemp ,
+.Fn mkstemps
+and
+.Fn mkostemps
+functions
 returns \-1 if no suitable file could be created.
 If either call fails an error code is placed in the global variable
 .Va errno .
@@ -201,8 +248,10 @@ of
 .Er EEXIST .
 .Sh ERRORS
 The
-.Fn mktemp ,
-.Fn mkstemp
+.Fn mkstemp ,
+.Fn mkostemp ,
+.Fn mkstemps ,
+.Fn mkostemps
 and
 .Fn mkdtemp
 functions
@@ -281,6 +330,22 @@ The
 .Fn mkdtemp
 function appeared in
 .Nx 1.4 .
+The
+.Fn mkstemps
+function first appeared in
+.Ox 2.4 ,
+and later in
+.Fx 3.4 
+and
+.Nx 7.0
+The
+.Fn mkostemp
+and
+.Fn mkostemps
+functions appeared in
+.Fx 10.0 
+and
+.Nx 7.0
 .Sh BUGS
 For
 .Fn mktemp

Index: src/lib/libc/stdio/mktemp.c
diff -u src/lib/libc/stdio/mktemp.c:1.20 src/lib/libc/stdio/mktemp.c:1.21
--- src/lib/libc/stdio/mktemp.c:1.20	Thu Mar 15 14:22:30 2012
+++ src/lib/libc/stdio/mktemp.c	Wed Jun 18 13:47:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mktemp.c,v 1.20 2012/03/15 18:22:30 christos Exp $	*/
+/*	$NetBSD: mktemp.c,v 1.21 2014/06/18 17:47:58 christos Exp $	*/
 
 /*
  * Copyright (c) 1987, 1993
@@ -28,22 +28,17 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
+#include "gettemp.h"
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
 #if 0
 static char sccsid[] = "@(#)mktemp.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: mktemp.c,v 1.20 2012/03/15 18:22:30 christos Exp $");
+__RCSID("$NetBSD: mktemp.c,v 1.21 2014/06/18 17:47:58 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "reentrant.h"
 #include "local.h"
 
 char *
@@ -52,7 +47,7 @@ _mktemp(char *path)
 
 	_DIAGASSERT(path != NULL);
 
-	return __gettemp(path, NULL, 0) ? path : NULL;
+	return GETTEMP(path, NULL, 0, 0, 0) ? path : NULL;
 }
 
 __warn_references(mktemp,
@@ -64,5 +59,5 @@ mktemp(char *path)
 
 	_DIAGASSERT(path != NULL);
 
-	return __gettemp(path, NULL, 0) ? path : NULL;
+	return GETTEMP(path, NULL, 0, 0, 0) ? path : NULL;
 }

Added files:

Index: src/lib/libc/stdio/gettemp.h
diff -u /dev/null src/lib/libc/stdio/gettemp.h:1.1
--- /dev/null	Wed Jun 18 13:47:58 2014
+++ src/lib/libc/stdio/gettemp.h	Wed Jun 18 13:47:58 2014
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _GETTEMP_H_
+#define _GETTEMP_H_
+
+#include "namespace.h"
+
+#if HAVE_NBTOOL_CONFIG_H
+# include "nbtool_config.h"
+# define	GETTEMP		__nbcompat_gettemp
+#else
+# include <assert.h>
+# include <errno.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <unistd.h>
+# include "reentrant.h"
+# define	GETTEMP		__gettemp
+#endif
+
+__BEGIN_DECLS
+int     GETTEMP(char *, int *, int, int, int);
+__END_DECLS
+
+#endif /* _GETTEMP_H_ */
Index: src/lib/libc/stdio/mkostemp.c
diff -u /dev/null src/lib/libc/stdio/mkostemp.c:1.1
--- /dev/null	Wed Jun 18 13:47:58 2014
+++ src/lib/libc/stdio/mkostemp.c	Wed Jun 18 13:47:58 2014
@@ -0,0 +1,36 @@
+/*	$NetBSD: mkostemp.c,v 1.1 2014/06/18 17:47:58 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "gettemp.h"
+
+int
+mkostemp(char *path, int oflags)
+{
+	int fd;
+
+	return GETTEMP(path, &fd, 0, 0, oflags) ? fd : -1;
+}
Index: src/lib/libc/stdio/mkostemps.c
diff -u /dev/null src/lib/libc/stdio/mkostemps.c:1.1
--- /dev/null	Wed Jun 18 13:47:58 2014
+++ src/lib/libc/stdio/mkostemps.c	Wed Jun 18 13:47:58 2014
@@ -0,0 +1,36 @@
+/*	$NetBSD: mkostemps.c,v 1.1 2014/06/18 17:47:58 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "gettemp.h"
+
+int
+mkostemps(char *path, int slen, int oflags)
+{
+	int fd;
+
+	return GETTEMP(path, &fd, 0, slen, oflags) ? fd : -1;
+}
Index: src/lib/libc/stdio/mkstemps.c
diff -u /dev/null src/lib/libc/stdio/mkstemps.c:1.1
--- /dev/null	Wed Jun 18 13:47:58 2014
+++ src/lib/libc/stdio/mkstemps.c	Wed Jun 18 13:47:58 2014
@@ -0,0 +1,36 @@
+/*	$NetBSD: mkstemps.c,v 1.1 2014/06/18 17:47:58 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "gettemp.h"
+
+int
+mkstemps(char *path, int slen)
+{
+	int fd;
+
+	return GETTEMP(path, &fd, 0, slen, 0) ? fd : -1;
+}

Reply via email to