URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Subversion Repositories openrisc_2011-10-31
[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libc/] [stdio64/] [tmpfile64.c] - Rev 207
Compare with Previous | Blame | View Log
/* FUNCTION <<tmpfile64>>---create a large temporary file INDEX tmpfile64 INDEX _tmpfile64_r ANSI_SYNOPSIS #include <stdio.h> FILE *tmpfile64(void); FILE *_tmpfile64_r(void *<[reent]>); TRAD_SYNOPSIS #include <stdio.h> FILE *tmpfile64(); FILE *_tmpfile64_r(<[reent]>) char *<[reent]>; DESCRIPTION Create a large temporary file (a file which will be deleted automatically), using a name generated by <<tmpnam>>. The temporary file is opened with the mode <<"wb+">>, permitting you to read and write anywhere in it as a binary file (without any data transformations the host system may perform for text files). The file may be larger than 2GB. The alternate function <<_tmpfile64_r>> is a reentrant version. The argument <[reent]> is a pointer to a reentrancy structure. Both <<tmpfile64>> and <<_tmpfile64_r>> are only defined if __LARGE64_FILES is defined. RETURNS <<tmpfile64>> normally returns a pointer to the temporary file. If no temporary file could be created, the result is NULL, and <<errno>> records the reason for failure. PORTABILITY <<tmpfile64>> is a glibc extension. Supporting OS subroutines required: <<close>>, <<fstat>>, <<getpid>>, <<isatty>>, <<lseek64>>, <<open64>>, <<read>>, <<sbrk>>, <<write>>. <<tmpfile64>> also requires the global pointer <<environ>>. */ #include <stdio.h> #include <reent.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #ifndef O_BINARY # define O_BINARY 0 #endif #ifdef __LARGE64_FILES FILE * _DEFUN (_tmpfile64_r, (ptr), struct _reent *ptr) { FILE *fp; int e; char *f; char buf[L_tmpnam]; int fd; do { if ((f = _tmpnam_r (ptr, buf)) == NULL) return NULL; fd = _open64_r (ptr, f, O_RDWR | O_CREAT | O_EXCL | O_BINARY, S_IRUSR | S_IWUSR); } while (fd < 0 && ptr->_errno == EEXIST); if (fd < 0) return NULL; fp = _fdopen64_r (ptr, fd, "wb+"); e = ptr->_errno; if (!fp) _close_r (ptr, fd); _CAST_VOID _remove_r (ptr, f); ptr->_errno = e; return fp; } #ifndef _REENT_ONLY FILE * _DEFUN_VOID (tmpfile64) { return _tmpfile64_r (_REENT); } #endif #endif /* __LARGE64_FILES */