Mercurial > hg > octave-lojdl > gnulib-hg
annotate lib/tmpdir.c @ 16214:ec738d6aeef5
Talk about "native Windows API", not "Win32".
* lib/classpath.c: Update comments to mention native Windows.
* lib/csharpexec.c: Likewise.
* lib/dup2.c: Likewise.
* lib/error.c: Likewise.
* lib/fcntl.c: Likewise.
* lib/filename.h: Likewise.
* lib/findprog.c: Likewise.
* lib/get-rusage-as.c: Likewise.
* lib/get-rusage-data.c: Likewise.
* lib/getpagesize.c: Likewise.
* lib/javaexec.c: Likewise.
* lib/msvc-inval.c: Likewise.
* lib/msvc-nothrow.c: Likewise.
* lib/nanosleep.c: Likewise.
* lib/nonblocking.c: Likewise.
* lib/printf-parse.c: Likewise.
* lib/setlocale.c: Likewise.
* lib/sigaction.c: Likewise.
* lib/strerror_r.c: Likewise.
* lib/tmpdir.c: Likewise.
* lib/vasnprintf.c: Likewise.
* lib/w32spawn.h: Likewise.
* lib/waitpid.c: Likewise.
* lib/stdio.in.h (fdopen, fopen, freopen): Likewise.
* m4/locale-ar.m4: Likewise.
* m4/locale-fr.m4: Likewise.
* m4/locale-ja.m4: Likewise.
* m4/locale-tr.m4: Likewise.
* m4/locale-zh.m4: Likewise.
* m4/printf.m4: Likewise.
* tests/test-cloexec.c: Likewise.
* tests/test-copy-acl.sh: Likewise.
* tests/test-copy-file.sh: Likewise.
* tests/test-file-has-acl.sh: Likewise.
* tests/test-set-mode-acl.sh: Likewise.
* tests/test-dup-safer.c: Likewise.
* tests/test-dup2.c: Likewise.
* tests/test-dup3.c: Likewise.
* tests/test-fcntl.c: Likewise.
* tests/test-nonblocking-pipe.h: Likewise.
* tests/test-nonblocking-socket.h: Likewise.
* tests/test-pipe.c: Likewise.
* tests/test-pipe2.c: Likewise.
* tests/test-spawn-pipe-child.c: Likewise.
* doc/acl-resources.txt: Likewise.
* lib/getaddrinfo.c (WINDOWS_NATIVE): Renamed from WIN32_NATIVE.
* tests/test-poll.c (WINDOWS_NATIVE): Likewise.
* tests/test-select.h (WINDOWS_NATIVE): Likewise.
* lib/localcharset.c: Update comments to mention native Windows.
(WINDOWS_NATIVE): Renamed from WIN32_NATIVE.
* lib/localename.c: Likewise.
* lib/progreloc.c: Likewise.
* lib/relocatable.c: Likewise.
* lib/poll.c (WINDOWS_NATIVE): Renamed from WIN32_NATIVE.
(windows_compute_revents): Renamed from win32_compute_revents.
(windows_compute_revents_socket): Renamed from
win32_compute_revents_socket.
* lib/select.c: Update comments to mention native Windows.
(windows_poll_handle): Renamed from win32_poll_handle.
* m4/threadlib.m4: Update comments to mention native Windows.
(gl_THREADLIB_EARLY_BODY, gl_THREADLIB_BODY): Expect
--enable-threads=windows instead of --enable-threads=win32. Set
USE_WINDOWS_THREADS, not USE_WIN32_THREADS.
* lib/glthread/lock.h: Update comments to mention native Windows.
(USE_WINDOWS_THREADS): Renamed from USE_WIN32_THREADS.
* lib/glthread/lock.c (USE_WINDOWS_THREADS): Renamed from
USE_WIN32_THREADS.
* lib/glthread/cond.h (USE_WINDOWS_THREADS): Likewise.
* lib/glthread/cond.c (USE_WINDOWS_THREADS): Likewise.
* lib/glthread/thread.h (USE_WINDOWS_THREADS): Likewise.
* lib/glthread/thread.c (USE_WINDOWS_THREADS): Likewise.
* lib/glthread/tls.h (USE_WINDOWS_THREADS): Likewise.
* lib/glthread/tls.c (USE_WINDOWS_THREADS): Likewise.
* lib/glthread/yield.h (USE_WINDOWS_THREADS): Likewise.
* tests/test-cond.c (USE_WINDOWS_THREADS): Likewise.
* tests/test-thread_create.c (USE_WINDOWS_THREADS): Likewise.
* tests/test-lock.c (USE_WINDOWS_THREADS): Likewise.
(TEST_WINDOWS_THREADS): Renamed from TEST_WIN32_THREADS.
* tests/test-tls.c: Likewise.
Rationale:
Microsoft renamed the "Win32 API" to "Windows API", as it is available
on both 32-bit and 64-bit Windows systems.
But in gnulib, we treat Cygwin like a Unix platform, therefore the main
line of distinction is between "native Windows" on one side and Unix/
POSIX systems on the other side. More details in
<https://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00027.html>.
Suggested by Paul Eggert.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Wed, 04 Jan 2012 14:31:33 +0100 |
parents | 8250f2777afc |
children | e542fd46ad6f |
rev | line source |
---|---|
16201
8250f2777afc
maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents:
15534
diff
changeset
|
1 /* Copyright (C) 1999, 2001-2002, 2006, 2009-2012 Free Software Foundation, |
12559
c2cbabec01dd
update nearly all FSF copyright year lists to include 2010
Jim Meyering <meyering@redhat.com>
parents:
12518
diff
changeset
|
2 Inc. |
7043 | 3 This file is part of the GNU C Library. |
4 | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7588
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
7139
adb21c293305
Add copyright notices to long-enough files that lack them, since
Paul Eggert <eggert@cs.ucla.edu>
parents:
7043
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7588
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7588
diff
changeset
|
8 (at your option) any later version. |
7043 | 9 |
7139
adb21c293305
Add copyright notices to long-enough files that lack them, since
Paul Eggert <eggert@cs.ucla.edu>
parents:
7043
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
7043 | 11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
7139
adb21c293305
Add copyright notices to long-enough files that lack them, since
Paul Eggert <eggert@cs.ucla.edu>
parents:
7043
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
adb21c293305
Add copyright notices to long-enough files that lack them, since
Paul Eggert <eggert@cs.ucla.edu>
parents:
7043
diff
changeset
|
13 GNU General Public License for more details. |
7043 | 14 |
7139
adb21c293305
Add copyright notices to long-enough files that lack them, since
Paul Eggert <eggert@cs.ucla.edu>
parents:
7043
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7588
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
7043 | 17 |
18 /* Extracted from sysdeps/posix/tempname.c. */ | |
19 | |
7304
1c4ed7637c24
Include <config.h> unconditionally.
Bruno Haible <bruno@clisp.org>
parents:
7139
diff
changeset
|
20 #include <config.h> |
7043 | 21 |
22 /* Specification. */ | |
23 #include "tmpdir.h" | |
24 | |
25 #include <stdbool.h> | |
26 #include <stdlib.h> | |
27 #include <string.h> | |
28 | |
29 #include <errno.h> | |
30 #ifndef __set_errno | |
31 # define __set_errno(Val) errno = (Val) | |
32 #endif | |
33 | |
34 #include <stdio.h> | |
35 #ifndef P_tmpdir | |
15534
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
36 # ifdef _P_tmpdir /* native Windows */ |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
37 # define P_tmpdir _P_tmpdir |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
38 # else |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
39 # define P_tmpdir "/tmp" |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
40 # endif |
7043 | 41 #endif |
42 | |
43 #include <sys/stat.h> | |
44 | |
15534
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
45 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
46 # define WIN32_LEAN_AND_MEAN /* avoid including junk */ |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
47 # include <windows.h> |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
48 #endif |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
49 |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
50 #include "pathmax.h" |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
51 |
7043 | 52 #if _LIBC |
53 # define struct_stat64 struct stat64 | |
54 #else | |
55 # define struct_stat64 struct stat | |
56 # define __xstat64(version, path, buf) stat (path, buf) | |
57 #endif | |
58 | |
59 #if ! (HAVE___SECURE_GETENV || _LIBC) | |
60 # define __secure_getenv getenv | |
61 #endif | |
62 | |
63 /* Pathname support. | |
64 ISSLASH(C) tests whether C is a directory separator character. | |
65 */ | |
66 #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ | |
16214
ec738d6aeef5
Talk about "native Windows API", not "Win32".
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
67 /* Native Windows, Cygwin, OS/2, DOS */ |
7043 | 68 # define ISSLASH(C) ((C) == '/' || (C) == '\\') |
69 #else | |
70 /* Unix */ | |
71 # define ISSLASH(C) ((C) == '/') | |
72 #endif | |
73 | |
74 | |
75 /* Return nonzero if DIR is an existent directory. */ | |
76 static bool | |
77 direxists (const char *dir) | |
78 { | |
79 struct_stat64 buf; | |
80 return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); | |
81 } | |
82 | |
83 /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is | |
84 non-null and exists, uses it; otherwise uses the first of $TMPDIR, | |
85 P_tmpdir, /tmp that exists. Copies into TMPL a template suitable | |
86 for use with mk[s]temp. Will fail (-1) if DIR is non-null and | |
87 doesn't exist, none of the searched dirs exists, or there's not | |
88 enough space in TMPL. */ | |
89 int | |
90 path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
91 bool try_tmpdir) |
7043 | 92 { |
93 const char *d; | |
94 size_t dlen, plen; | |
95 | |
96 if (!pfx || !pfx[0]) | |
97 { | |
98 pfx = "file"; | |
99 plen = 4; | |
100 } | |
101 else | |
102 { | |
103 plen = strlen (pfx); | |
104 if (plen > 5) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
105 plen = 5; |
7043 | 106 } |
107 | |
108 if (try_tmpdir) | |
109 { | |
110 d = __secure_getenv ("TMPDIR"); | |
111 if (d != NULL && direxists (d)) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
112 dir = d; |
7043 | 113 else if (dir != NULL && direxists (dir)) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
114 /* nothing */ ; |
7043 | 115 else |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
116 dir = NULL; |
7043 | 117 } |
118 if (dir == NULL) | |
119 { | |
15534
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
120 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
121 char dirbuf[PATH_MAX]; |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
122 DWORD retval; |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
123 |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
124 /* Find Windows temporary file directory. |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
125 We try this before P_tmpdir because Windows defines P_tmpdir to "\\" |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
126 and will therefore try to put all temporary files in the root |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
127 directory (unless $TMPDIR is set). */ |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
128 retval = GetTempPath (PATH_MAX, dirbuf); |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
129 if (retval > 0 && retval < PATH_MAX && direxists (dirbuf)) |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
130 dir = dirbuf; |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
131 else |
3ef509e539a1
tmpdir: Use a good default directory on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
132 #endif |
7043 | 133 if (direxists (P_tmpdir)) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
134 dir = P_tmpdir; |
7043 | 135 else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
136 dir = "/tmp"; |
7043 | 137 else |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
138 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
139 __set_errno (ENOENT); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
140 return -1; |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
141 } |
7043 | 142 } |
143 | |
144 dlen = strlen (dir); | |
145 while (dlen >= 1 && ISSLASH (dir[dlen - 1])) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
146 dlen--; /* remove trailing slashes */ |
7043 | 147 |
148 /* check we have room for "${dir}/${pfx}XXXXXX\0" */ | |
149 if (tmpl_len < dlen + 1 + plen + 6 + 1) | |
150 { | |
151 __set_errno (EINVAL); | |
152 return -1; | |
153 } | |
154 | |
155 sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); | |
156 return 0; | |
157 } |