1 /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
2 /* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */
3 /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
4 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
5 //#include <crtdll/stubs.h>
6 #include <crtdll/stdio.h>
7 #include <crtdll/string.h>
8 #include <crtdll/stdlib.h>
9 #include <crtdll/errno.h>
10 #include <crtdll/fcntl.h>
11 //#include <crtdll/unistd.h>
12 #include <crtdll/io.h>
13 #include <crtdll/internal/file.h>
14 #include <crtdll/share.h>
17 #ifndef __dj_include_stdio_h_
18 #define _name_to_remove _tmpfname
22 FILE * __alloc_file(void);
29 char *temp_name = tmpnam(0);
30 char *n_t_r = (char *)malloc(L_tmpnam);
35 /* We could have a race condition, whereby another program
36 (in another virtual machine, or if the temporary file is
37 in a directory which is shared via a network) opens the
38 file returned by `tmpnam' between the call above and the
39 moment when we actually open the file below. This loop
40 retries the call to `tmpnam' until we actually succeed
41 to create the file which didn't exist before. */
44 temp_fd = _open(temp_name, 0, SH_DENYRW);
45 // if ( errno == ENOENT )
47 } while (temp_fd == -1 && (temp_name = tmpnam(0)) != 0);
52 /* This should have been fdopen(temp_fd, "wb+"), but `fdopen'
53 is non-ANSI. So we need to dump some of its guts here. Sigh... */
60 f->_flag = _IORMONCL | _IOREAD | _IOWRT;
61 f->_name_to_remove = n_t_r;
62 strcpy(f->_name_to_remove, temp_name);
63 f->_base = f->_ptr = NULL;