Moved dlopen wrappers to loader.c.
[wine/testsucceed.git] / libs / port / mkstemp.c
blob17a2adc84473b2d55b6d78c82021e3165cdcb071
1 /*
2 * mkstemp function
4 * Copyright 1996 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "config.h"
22 #include "wine/port.h"
24 #include <fcntl.h>
25 #include <stdlib.h>
26 #ifdef HAVE_UNISTD_H
27 # include <unistd.h>
28 #endif
30 #ifndef HAVE_MKSTEMP
31 int mkstemp(char *tmpfn)
33 int tries;
34 char *xstart;
36 xstart = tmpfn+strlen(tmpfn)-1;
37 while ((xstart > tmpfn) && (*xstart == 'X'))
38 xstart--;
39 tries = 10;
40 while (tries--)
42 char *newfn = mktemp(tmpfn);
43 int fd;
44 if (!newfn) /* something else broke horribly */
45 return -1;
46 fd = open(newfn,O_CREAT|O_RDWR|O_EXCL,0600);
47 if (fd!=-1)
48 return fd;
49 newfn = xstart;
50 /* fill up with X and try again ... */
51 while (*newfn) *newfn++ = 'X';
53 return -1;
55 #endif /* HAVE_MKSTEMP */