Mercurial > emacs
annotate src/w32.c @ 110544:bb46575a984d
Fix int/EMACS_INT in bidi.c.
dispextern.h (struct bidi_saved_info): Use EMACS_INT for buffer positions.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Fri, 24 Sep 2010 08:05:24 -0400 |
parents | 2892adf3a65b |
children | aa7656773a38 |
rev | line source |
---|---|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
1 /* Utility and Unix shadow routines for GNU Emacs on the Microsoft W32 API. |
96462 | 2 Copyright (C) 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
106815 | 3 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
9803 | 4 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
5 This file is part of GNU Emacs. |
9803 | 6 |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94816
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94816
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94816
diff
changeset
|
10 (at your option) any later version. |
9803 | 11 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
15 GNU General Public License for more details. |
9803 | 16 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94816
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94816
diff
changeset
|
19 |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94816
diff
changeset
|
20 /* |
9803 | 21 Geoff Voelker (voelker@cs.washington.edu) 7-29-94 |
22 */ | |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
23 #include <stddef.h> /* for offsetof */ |
9803 | 24 #include <stdlib.h> |
25 #include <stdio.h> | |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
26 #include <float.h> /* for DBL_EPSILON */ |
9803 | 27 #include <io.h> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
28 #include <errno.h> |
9803 | 29 #include <fcntl.h> |
30 #include <ctype.h> | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
31 #include <signal.h> |
22363 | 32 #include <sys/file.h> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
33 #include <sys/time.h> |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
34 #include <sys/utime.h> |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
35 #include <mbstring.h> /* for _mbspbrk */ |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
36 #include <math.h> |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
103868
diff
changeset
|
37 #include <setjmp.h> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
38 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
39 /* must include CRT headers *before* config.h */ |
42469 | 40 |
41 #ifdef HAVE_CONFIG_H | |
42 #include <config.h> | |
43 #endif | |
44 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
45 #undef access |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
46 #undef chdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
47 #undef chmod |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
48 #undef creat |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
49 #undef ctime |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
50 #undef fopen |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
51 #undef link |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
52 #undef mkdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
53 #undef mktemp |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
54 #undef open |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
55 #undef rename |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
56 #undef rmdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
57 #undef unlink |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
58 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
59 #undef close |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
60 #undef dup |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
61 #undef dup2 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
62 #undef pipe |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
63 #undef read |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
64 #undef write |
9803 | 65 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
66 #undef strerror |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
67 |
9803 | 68 #include "lisp.h" |
69 | |
70 #include <pwd.h> | |
53123 | 71 #include <grp.h> |
9803 | 72 |
31350
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
73 #ifdef __GNUC__ |
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
74 #define _ANONYMOUS_UNION |
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
75 #define _ANONYMOUS_STRUCT |
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
76 #endif |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
77 #include <windows.h> |
97486
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
78 /* Some versions of compiler define MEMORYSTATUSEX, some don't, so we |
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
79 use a different name to avoid compilation problems. */ |
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
80 typedef struct _MEMORY_STATUS_EX { |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
81 DWORD dwLength; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
82 DWORD dwMemoryLoad; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
83 DWORDLONG ullTotalPhys; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
84 DWORDLONG ullAvailPhys; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
85 DWORDLONG ullTotalPageFile; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
86 DWORDLONG ullAvailPageFile; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
87 DWORDLONG ullTotalVirtual; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
88 DWORDLONG ullAvailVirtual; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
89 DWORDLONG ullAvailExtendedVirtual; |
97486
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
90 } MEMORY_STATUS_EX,*LPMEMORY_STATUS_EX; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
91 |
91878
a5f49adf9035
(init_user_info): Use TOKEN_USER and TOKEN_PRIMARY_GROUP instead of
Eli Zaretskii <eliz@gnu.org>
parents:
88048
diff
changeset
|
92 #include <lmcons.h> |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
93 #include <shlobj.h> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
94 |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
95 #include <tlhelp32.h> |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
96 #include <psapi.h> |
110400 | 97 #include <w32api.h> |
98 #if !defined(__MINGW32__) || __W32API_MAJOR_VERSION < 3 || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION < 15) | |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
99 /* This either is not in psapi.h or guarded by higher value of |
110400 | 100 _WIN32_WINNT than what we use. w32api suplied with MinGW 3.15 |
101 defines it in psapi.h */ | |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
102 typedef struct _PROCESS_MEMORY_COUNTERS_EX { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
103 DWORD cb; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
104 DWORD PageFaultCount; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
105 DWORD PeakWorkingSetSize; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
106 DWORD WorkingSetSize; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
107 DWORD QuotaPeakPagedPoolUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
108 DWORD QuotaPagedPoolUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
109 DWORD QuotaPeakNonPagedPoolUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
110 DWORD QuotaNonPagedPoolUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
111 DWORD PagefileUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
112 DWORD PeakPagefileUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
113 DWORD PrivateUsage; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
114 } PROCESS_MEMORY_COUNTERS_EX,*PPROCESS_MEMORY_COUNTERS_EX; |
110400 | 115 #endif |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
116 |
110431
9fe8167bbd9b
Don't make W32 code conditional on HAVE_SOCKETS, it's always defined.
Juanma Barranquero <lekktu@gmail.com>
parents:
110400
diff
changeset
|
117 /* TCP connection support. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
118 #include <sys/socket.h> |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
119 #undef socket |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
120 #undef bind |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
121 #undef connect |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
122 #undef htons |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
123 #undef ntohs |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
124 #undef inet_addr |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
125 #undef gethostname |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
126 #undef gethostbyname |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
127 #undef getservbyname |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
128 #undef getpeername |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
129 #undef shutdown |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
130 #undef setsockopt |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
131 #undef listen |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
132 #undef getsockname |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
133 #undef accept |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
134 #undef recvfrom |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
135 #undef sendto |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
136 |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
137 #include "w32.h" |
9803 | 138 #include "ndir.h" |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
139 #include "w32heap.h" |
35286
fcd8120b294a
(init_environment, sys_shutdown, sys_pipe): Remove unused
Jason Rumney <jasonr@gnu.org>
parents:
34696
diff
changeset
|
140 #include "systime.h" |
95277 | 141 #include "dispextern.h" /* for xstrcasecmp */ |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
142 #include "coding.h" /* for Vlocale_coding_system */ |
35286
fcd8120b294a
(init_environment, sys_shutdown, sys_pipe): Remove unused
Jason Rumney <jasonr@gnu.org>
parents:
34696
diff
changeset
|
143 |
95917 | 144 /* For serial_configure and serial_open. */ |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
145 #include "process.h" |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
146 |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
147 typedef HRESULT (WINAPI * ShGetFolderPath_fn) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
148 (IN HWND, IN int, IN HANDLE, IN DWORD, OUT char *); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
149 |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
150 void globals_of_w32 (void); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
151 static DWORD get_rid (PSID); |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
152 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
153 extern Lisp_Object Vw32_downcase_file_names; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
154 extern Lisp_Object Vw32_generate_fake_inodes; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
155 extern Lisp_Object Vw32_get_true_file_attributes; |
80484
796bbedc63b1
(stat): When Vw32_get_true_file_attributes is Qlocal, get
Jason Rumney <jasonr@gnu.org>
parents:
80376
diff
changeset
|
156 /* Defined in process.c for its own purpose. */ |
796bbedc63b1
(stat): When Vw32_get_true_file_attributes is Qlocal, get
Jason Rumney <jasonr@gnu.org>
parents:
80376
diff
changeset
|
157 extern Lisp_Object Qlocal; |
796bbedc63b1
(stat): When Vw32_get_true_file_attributes is Qlocal, get
Jason Rumney <jasonr@gnu.org>
parents:
80376
diff
changeset
|
158 |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
159 extern int w32_num_mouse_buttons; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
160 |
34696
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
161 |
92124
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
162 /* Initialization states. |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
163 |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
164 WARNING: If you add any more such variables for additional APIs, |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
165 you MUST add initialization for them to globals_of_w32 |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
166 below. This is because these variables might get set |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
167 to non-NULL values during dumping, but the dumped Emacs |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
168 cannot reuse those values, because it could be run on a |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
169 different version of the OS, where API addresses are |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
170 different. */ |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
171 static BOOL g_b_init_is_windows_9x; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
172 static BOOL g_b_init_open_process_token; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
173 static BOOL g_b_init_get_token_information; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
174 static BOOL g_b_init_lookup_account_sid; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
175 static BOOL g_b_init_get_sid_identifier_authority; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
176 static BOOL g_b_init_get_sid_sub_authority; |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
177 static BOOL g_b_init_get_sid_sub_authority_count; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
178 static BOOL g_b_init_get_file_security; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
179 static BOOL g_b_init_get_security_descriptor_owner; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
180 static BOOL g_b_init_get_security_descriptor_group; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
181 static BOOL g_b_init_is_valid_sid; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
182 static BOOL g_b_init_create_toolhelp32_snapshot; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
183 static BOOL g_b_init_process32_first; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
184 static BOOL g_b_init_process32_next; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
185 static BOOL g_b_init_open_thread_token; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
186 static BOOL g_b_init_impersonate_self; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
187 static BOOL g_b_init_revert_to_self; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
188 static BOOL g_b_init_get_process_memory_info; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
189 static BOOL g_b_init_get_process_working_set_size; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
190 static BOOL g_b_init_global_memory_status; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
191 static BOOL g_b_init_global_memory_status_ex; |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
192 static BOOL g_b_init_get_length_sid; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
193 static BOOL g_b_init_equal_sid; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
194 static BOOL g_b_init_copy_sid; |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
195 static BOOL g_b_init_get_native_system_info; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
196 static BOOL g_b_init_get_system_times; |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
197 |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
198 /* |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
199 BEGIN: Wrapper functions around OpenProcessToken |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
200 and other functions in advapi32.dll that are only |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
201 supported in Windows NT / 2k / XP |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
202 */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
203 /* ** Function pointer typedefs ** */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
204 typedef BOOL (WINAPI * OpenProcessToken_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
205 HANDLE ProcessHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
206 DWORD DesiredAccess, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
207 PHANDLE TokenHandle); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
208 typedef BOOL (WINAPI * GetTokenInformation_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
209 HANDLE TokenHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
210 TOKEN_INFORMATION_CLASS TokenInformationClass, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
211 LPVOID TokenInformation, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
212 DWORD TokenInformationLength, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
213 PDWORD ReturnLength); |
81421
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
214 typedef BOOL (WINAPI * GetProcessTimes_Proc) ( |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
215 HANDLE process_handle, |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
216 LPFILETIME creation_time, |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
217 LPFILETIME exit_time, |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
218 LPFILETIME kernel_time, |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
219 LPFILETIME user_time); |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
220 |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
221 GetProcessTimes_Proc get_process_times_fn = NULL; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
222 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
223 #ifdef _UNICODE |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
224 const char * const LookupAccountSid_Name = "LookupAccountSidW"; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
225 const char * const GetFileSecurity_Name = "GetFileSecurityW"; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
226 #else |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
227 const char * const LookupAccountSid_Name = "LookupAccountSidA"; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
228 const char * const GetFileSecurity_Name = "GetFileSecurityA"; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
229 #endif |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
230 typedef BOOL (WINAPI * LookupAccountSid_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
231 LPCTSTR lpSystemName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
232 PSID Sid, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
233 LPTSTR Name, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
234 LPDWORD cbName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
235 LPTSTR DomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
236 LPDWORD cbDomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
237 PSID_NAME_USE peUse); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
238 typedef PSID_IDENTIFIER_AUTHORITY (WINAPI * GetSidIdentifierAuthority_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
239 PSID pSid); |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
240 typedef PDWORD (WINAPI * GetSidSubAuthority_Proc) ( |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
241 PSID pSid, |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
242 DWORD n); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
243 typedef PUCHAR (WINAPI * GetSidSubAuthorityCount_Proc) ( |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
244 PSID pSid); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
245 typedef BOOL (WINAPI * GetFileSecurity_Proc) ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
246 LPCTSTR lpFileName, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
247 SECURITY_INFORMATION RequestedInformation, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
248 PSECURITY_DESCRIPTOR pSecurityDescriptor, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
249 DWORD nLength, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
250 LPDWORD lpnLengthNeeded); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
251 typedef BOOL (WINAPI * GetSecurityDescriptorOwner_Proc) ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
252 PSECURITY_DESCRIPTOR pSecurityDescriptor, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
253 PSID *pOwner, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
254 LPBOOL lpbOwnerDefaulted); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
255 typedef BOOL (WINAPI * GetSecurityDescriptorGroup_Proc) ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
256 PSECURITY_DESCRIPTOR pSecurityDescriptor, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
257 PSID *pGroup, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
258 LPBOOL lpbGroupDefaulted); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
259 typedef BOOL (WINAPI * IsValidSid_Proc) ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
260 PSID sid); |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
261 typedef HANDLE (WINAPI * CreateToolhelp32Snapshot_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
262 DWORD dwFlags, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
263 DWORD th32ProcessID); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
264 typedef BOOL (WINAPI * Process32First_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
265 HANDLE hSnapshot, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
266 LPPROCESSENTRY32 lppe); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
267 typedef BOOL (WINAPI * Process32Next_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
268 HANDLE hSnapshot, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
269 LPPROCESSENTRY32 lppe); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
270 typedef BOOL (WINAPI * OpenThreadToken_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
271 HANDLE ThreadHandle, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
272 DWORD DesiredAccess, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
273 BOOL OpenAsSelf, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
274 PHANDLE TokenHandle); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
275 typedef BOOL (WINAPI * ImpersonateSelf_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
276 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
277 typedef BOOL (WINAPI * RevertToSelf_Proc) (void); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
278 typedef BOOL (WINAPI * GetProcessMemoryInfo_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
279 HANDLE Process, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
280 PPROCESS_MEMORY_COUNTERS ppsmemCounters, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
281 DWORD cb); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
282 typedef BOOL (WINAPI * GetProcessWorkingSetSize_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
283 HANDLE hProcess, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
284 DWORD * lpMinimumWorkingSetSize, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
285 DWORD * lpMaximumWorkingSetSize); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
286 typedef BOOL (WINAPI * GlobalMemoryStatus_Proc) ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
287 LPMEMORYSTATUS lpBuffer); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
288 typedef BOOL (WINAPI * GlobalMemoryStatusEx_Proc) ( |
97486
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
289 LPMEMORY_STATUS_EX lpBuffer); |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
290 typedef BOOL (WINAPI * CopySid_Proc) ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
291 DWORD nDestinationSidLength, |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
292 PSID pDestinationSid, |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
293 PSID pSourceSid); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
294 typedef BOOL (WINAPI * EqualSid_Proc) ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
295 PSID pSid1, |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
296 PSID pSid2); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
297 typedef DWORD (WINAPI * GetLengthSid_Proc) ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
298 PSID pSid); |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
299 typedef void (WINAPI * GetNativeSystemInfo_Proc) ( |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
300 LPSYSTEM_INFO lpSystemInfo); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
301 typedef BOOL (WINAPI * GetSystemTimes_Proc) ( |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
302 LPFILETIME lpIdleTime, |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
303 LPFILETIME lpKernelTime, |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
304 LPFILETIME lpUserTime); |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
305 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
306 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
307 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
308 /* ** A utility function ** */ |
74947 | 309 static BOOL |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
310 is_windows_9x (void) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
311 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
312 static BOOL s_b_ret=0; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
313 OSVERSIONINFO os_ver; |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
314 if (g_b_init_is_windows_9x == 0) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
315 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
316 g_b_init_is_windows_9x = 1; |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
317 ZeroMemory (&os_ver, sizeof (OSVERSIONINFO)); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
318 os_ver.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
319 if (GetVersionEx (&os_ver)) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
320 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
321 s_b_ret = (os_ver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
322 } |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
323 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
324 return s_b_ret; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
325 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
326 |
81421
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
327 /* Get total user and system times for get-internal-run-time. |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
328 Returns a list of three integers if the times are provided by the OS |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
329 (NT derivatives), otherwise it returns the result of current-time. */ |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
330 Lisp_Object |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
331 w32_get_internal_run_time (void) |
81421
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
332 { |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
333 if (get_process_times_fn) |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
334 { |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
335 FILETIME create, exit, kernel, user; |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
336 HANDLE proc = GetCurrentProcess (); |
81421
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
337 if ((*get_process_times_fn) (proc, &create, &exit, &kernel, &user)) |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
338 { |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
339 LARGE_INTEGER user_int, kernel_int, total; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
340 int microseconds; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
341 user_int.LowPart = user.dwLowDateTime; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
342 user_int.HighPart = user.dwHighDateTime; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
343 kernel_int.LowPart = kernel.dwLowDateTime; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
344 kernel_int.HighPart = kernel.dwHighDateTime; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
345 total.QuadPart = user_int.QuadPart + kernel_int.QuadPart; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
346 /* FILETIME is 100 nanosecond increments, Emacs only wants |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
347 microsecond resolution. */ |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
348 total.QuadPart /= 10; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
349 microseconds = total.QuadPart % 1000000; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
350 total.QuadPart /= 1000000; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
351 |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
352 /* Sanity check to make sure we can represent the result. */ |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
353 if (total.HighPart == 0) |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
354 { |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
355 int secs = total.LowPart; |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
356 |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
357 return list3 (make_number ((secs >> 16) & 0xffff), |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
358 make_number (secs & 0xffff), |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
359 make_number (microseconds)); |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
360 } |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
361 } |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
362 } |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
363 |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
364 return Fcurrent_time (); |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
365 } |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
366 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
367 /* ** The wrapper functions ** */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
368 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
369 BOOL WINAPI open_process_token ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
370 HANDLE ProcessHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
371 DWORD DesiredAccess, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
372 PHANDLE TokenHandle) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
373 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
374 static OpenProcessToken_Proc s_pfn_Open_Process_Token = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
375 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
376 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
377 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
378 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
379 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
380 if (g_b_init_open_process_token == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
381 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
382 g_b_init_open_process_token = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
383 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
384 s_pfn_Open_Process_Token = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
385 (OpenProcessToken_Proc) GetProcAddress (hm_advapi32, "OpenProcessToken"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
386 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
387 if (s_pfn_Open_Process_Token == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
388 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
389 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
390 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
391 return ( |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
392 s_pfn_Open_Process_Token ( |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
393 ProcessHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
394 DesiredAccess, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
395 TokenHandle) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
396 ); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
397 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
398 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
399 BOOL WINAPI get_token_information ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
400 HANDLE TokenHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
401 TOKEN_INFORMATION_CLASS TokenInformationClass, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
402 LPVOID TokenInformation, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
403 DWORD TokenInformationLength, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
404 PDWORD ReturnLength) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
405 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
406 static GetTokenInformation_Proc s_pfn_Get_Token_Information = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
407 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
408 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
409 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
410 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
411 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
412 if (g_b_init_get_token_information == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
413 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
414 g_b_init_get_token_information = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
415 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
416 s_pfn_Get_Token_Information = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
417 (GetTokenInformation_Proc) GetProcAddress (hm_advapi32, "GetTokenInformation"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
418 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
419 if (s_pfn_Get_Token_Information == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
420 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
421 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
422 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
423 return ( |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
424 s_pfn_Get_Token_Information ( |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
425 TokenHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
426 TokenInformationClass, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
427 TokenInformation, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
428 TokenInformationLength, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
429 ReturnLength) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
430 ); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
431 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
432 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
433 BOOL WINAPI lookup_account_sid ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
434 LPCTSTR lpSystemName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
435 PSID Sid, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
436 LPTSTR Name, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
437 LPDWORD cbName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
438 LPTSTR DomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
439 LPDWORD cbDomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
440 PSID_NAME_USE peUse) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
441 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
442 static LookupAccountSid_Proc s_pfn_Lookup_Account_Sid = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
443 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
444 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
445 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
446 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
447 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
448 if (g_b_init_lookup_account_sid == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
449 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
450 g_b_init_lookup_account_sid = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
451 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
452 s_pfn_Lookup_Account_Sid = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
453 (LookupAccountSid_Proc) GetProcAddress (hm_advapi32, LookupAccountSid_Name); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
454 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
455 if (s_pfn_Lookup_Account_Sid == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
456 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
457 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
458 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
459 return ( |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
460 s_pfn_Lookup_Account_Sid ( |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
461 lpSystemName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
462 Sid, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
463 Name, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
464 cbName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
465 DomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
466 cbDomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
467 peUse) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
468 ); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
469 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
470 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
471 PSID_IDENTIFIER_AUTHORITY WINAPI get_sid_identifier_authority ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
472 PSID pSid) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
473 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
474 static GetSidIdentifierAuthority_Proc s_pfn_Get_Sid_Identifier_Authority = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
475 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
476 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
477 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
478 return NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
479 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
480 if (g_b_init_get_sid_identifier_authority == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
481 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
482 g_b_init_get_sid_identifier_authority = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
483 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
484 s_pfn_Get_Sid_Identifier_Authority = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
485 (GetSidIdentifierAuthority_Proc) GetProcAddress ( |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
486 hm_advapi32, "GetSidIdentifierAuthority"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
487 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
488 if (s_pfn_Get_Sid_Identifier_Authority == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
489 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
490 return NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
491 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
492 return (s_pfn_Get_Sid_Identifier_Authority (pSid)); |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
493 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
494 |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
495 PDWORD WINAPI get_sid_sub_authority ( |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
496 PSID pSid, |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
497 DWORD n) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
498 { |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
499 static GetSidSubAuthority_Proc s_pfn_Get_Sid_Sub_Authority = NULL; |
87998
3ef9b6e3d2fa
(get_sid_sub_authority, get_sid_sub_authority_count): Fix return values
Eli Zaretskii <eliz@gnu.org>
parents:
87995
diff
changeset
|
500 static DWORD zero = 0U; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
501 HMODULE hm_advapi32 = NULL; |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
502 if (is_windows_9x () == TRUE) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
503 { |
87998
3ef9b6e3d2fa
(get_sid_sub_authority, get_sid_sub_authority_count): Fix return values
Eli Zaretskii <eliz@gnu.org>
parents:
87995
diff
changeset
|
504 return &zero; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
505 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
506 if (g_b_init_get_sid_sub_authority == 0) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
507 { |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
508 g_b_init_get_sid_sub_authority = 1; |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
509 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
510 s_pfn_Get_Sid_Sub_Authority = |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
511 (GetSidSubAuthority_Proc) GetProcAddress ( |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
512 hm_advapi32, "GetSidSubAuthority"); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
513 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
514 if (s_pfn_Get_Sid_Sub_Authority == NULL) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
515 { |
87998
3ef9b6e3d2fa
(get_sid_sub_authority, get_sid_sub_authority_count): Fix return values
Eli Zaretskii <eliz@gnu.org>
parents:
87995
diff
changeset
|
516 return &zero; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
517 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
518 return (s_pfn_Get_Sid_Sub_Authority (pSid, n)); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
519 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
520 |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
521 PUCHAR WINAPI get_sid_sub_authority_count ( |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
522 PSID pSid) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
523 { |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
524 static GetSidSubAuthorityCount_Proc s_pfn_Get_Sid_Sub_Authority_Count = NULL; |
87998
3ef9b6e3d2fa
(get_sid_sub_authority, get_sid_sub_authority_count): Fix return values
Eli Zaretskii <eliz@gnu.org>
parents:
87995
diff
changeset
|
525 static UCHAR zero = 0U; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
526 HMODULE hm_advapi32 = NULL; |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
527 if (is_windows_9x () == TRUE) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
528 { |
87998
3ef9b6e3d2fa
(get_sid_sub_authority, get_sid_sub_authority_count): Fix return values
Eli Zaretskii <eliz@gnu.org>
parents:
87995
diff
changeset
|
529 return &zero; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
530 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
531 if (g_b_init_get_sid_sub_authority_count == 0) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
532 { |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
533 g_b_init_get_sid_sub_authority_count = 1; |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
534 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
535 s_pfn_Get_Sid_Sub_Authority_Count = |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
536 (GetSidSubAuthorityCount_Proc) GetProcAddress ( |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
537 hm_advapi32, "GetSidSubAuthorityCount"); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
538 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
539 if (s_pfn_Get_Sid_Sub_Authority_Count == NULL) |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
540 { |
87998
3ef9b6e3d2fa
(get_sid_sub_authority, get_sid_sub_authority_count): Fix return values
Eli Zaretskii <eliz@gnu.org>
parents:
87995
diff
changeset
|
541 return &zero; |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
542 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
543 return (s_pfn_Get_Sid_Sub_Authority_Count (pSid)); |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
544 } |
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
545 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
546 BOOL WINAPI get_file_security ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
547 LPCTSTR lpFileName, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
548 SECURITY_INFORMATION RequestedInformation, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
549 PSECURITY_DESCRIPTOR pSecurityDescriptor, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
550 DWORD nLength, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
551 LPDWORD lpnLengthNeeded) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
552 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
553 static GetFileSecurity_Proc s_pfn_Get_File_Security = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
554 HMODULE hm_advapi32 = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
555 if (is_windows_9x () == TRUE) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
556 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
557 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
558 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
559 if (g_b_init_get_file_security == 0) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
560 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
561 g_b_init_get_file_security = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
562 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
563 s_pfn_Get_File_Security = |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
564 (GetFileSecurity_Proc) GetProcAddress ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
565 hm_advapi32, GetFileSecurity_Name); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
566 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
567 if (s_pfn_Get_File_Security == NULL) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
568 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
569 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
570 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
571 return (s_pfn_Get_File_Security (lpFileName, RequestedInformation, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
572 pSecurityDescriptor, nLength, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
573 lpnLengthNeeded)); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
574 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
575 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
576 BOOL WINAPI get_security_descriptor_owner ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
577 PSECURITY_DESCRIPTOR pSecurityDescriptor, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
578 PSID *pOwner, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
579 LPBOOL lpbOwnerDefaulted) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
580 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
581 static GetSecurityDescriptorOwner_Proc s_pfn_Get_Security_Descriptor_Owner = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
582 HMODULE hm_advapi32 = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
583 if (is_windows_9x () == TRUE) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
584 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
585 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
586 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
587 if (g_b_init_get_security_descriptor_owner == 0) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
588 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
589 g_b_init_get_security_descriptor_owner = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
590 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
591 s_pfn_Get_Security_Descriptor_Owner = |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
592 (GetSecurityDescriptorOwner_Proc) GetProcAddress ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
593 hm_advapi32, "GetSecurityDescriptorOwner"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
594 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
595 if (s_pfn_Get_Security_Descriptor_Owner == NULL) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
596 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
597 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
598 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
599 return (s_pfn_Get_Security_Descriptor_Owner (pSecurityDescriptor, pOwner, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
600 lpbOwnerDefaulted)); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
601 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
602 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
603 BOOL WINAPI get_security_descriptor_group ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
604 PSECURITY_DESCRIPTOR pSecurityDescriptor, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
605 PSID *pGroup, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
606 LPBOOL lpbGroupDefaulted) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
607 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
608 static GetSecurityDescriptorGroup_Proc s_pfn_Get_Security_Descriptor_Group = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
609 HMODULE hm_advapi32 = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
610 if (is_windows_9x () == TRUE) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
611 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
612 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
613 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
614 if (g_b_init_get_security_descriptor_group == 0) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
615 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
616 g_b_init_get_security_descriptor_group = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
617 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
618 s_pfn_Get_Security_Descriptor_Group = |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
619 (GetSecurityDescriptorGroup_Proc) GetProcAddress ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
620 hm_advapi32, "GetSecurityDescriptorGroup"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
621 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
622 if (s_pfn_Get_Security_Descriptor_Group == NULL) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
623 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
624 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
625 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
626 return (s_pfn_Get_Security_Descriptor_Group (pSecurityDescriptor, pGroup, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
627 lpbGroupDefaulted)); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
628 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
629 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
630 BOOL WINAPI is_valid_sid ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
631 PSID sid) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
632 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
633 static IsValidSid_Proc s_pfn_Is_Valid_Sid = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
634 HMODULE hm_advapi32 = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
635 if (is_windows_9x () == TRUE) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
636 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
637 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
638 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
639 if (g_b_init_is_valid_sid == 0) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
640 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
641 g_b_init_is_valid_sid = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
642 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
643 s_pfn_Is_Valid_Sid = |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
644 (IsValidSid_Proc) GetProcAddress ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
645 hm_advapi32, "IsValidSid"); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
646 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
647 if (s_pfn_Is_Valid_Sid == NULL) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
648 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
649 return FALSE; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
650 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
651 return (s_pfn_Is_Valid_Sid (sid)); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
652 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
653 |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
654 BOOL WINAPI equal_sid ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
655 PSID sid1, |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
656 PSID sid2) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
657 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
658 static EqualSid_Proc s_pfn_Equal_Sid = NULL; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
659 HMODULE hm_advapi32 = NULL; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
660 if (is_windows_9x () == TRUE) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
661 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
662 return FALSE; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
663 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
664 if (g_b_init_equal_sid == 0) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
665 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
666 g_b_init_equal_sid = 1; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
667 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
668 s_pfn_Equal_Sid = |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
669 (EqualSid_Proc) GetProcAddress ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
670 hm_advapi32, "EqualSid"); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
671 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
672 if (s_pfn_Equal_Sid == NULL) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
673 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
674 return FALSE; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
675 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
676 return (s_pfn_Equal_Sid (sid1, sid2)); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
677 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
678 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
679 DWORD WINAPI get_length_sid ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
680 PSID sid) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
681 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
682 static GetLengthSid_Proc s_pfn_Get_Length_Sid = NULL; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
683 HMODULE hm_advapi32 = NULL; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
684 if (is_windows_9x () == TRUE) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
685 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
686 return 0; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
687 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
688 if (g_b_init_get_length_sid == 0) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
689 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
690 g_b_init_get_length_sid = 1; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
691 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
692 s_pfn_Get_Length_Sid = |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
693 (GetLengthSid_Proc) GetProcAddress ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
694 hm_advapi32, "GetLengthSid"); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
695 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
696 if (s_pfn_Get_Length_Sid == NULL) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
697 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
698 return 0; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
699 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
700 return (s_pfn_Get_Length_Sid (sid)); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
701 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
702 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
703 BOOL WINAPI copy_sid ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
704 DWORD destlen, |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
705 PSID dest, |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
706 PSID src) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
707 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
708 static CopySid_Proc s_pfn_Copy_Sid = NULL; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
709 HMODULE hm_advapi32 = NULL; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
710 if (is_windows_9x () == TRUE) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
711 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
712 return FALSE; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
713 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
714 if (g_b_init_copy_sid == 0) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
715 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
716 g_b_init_copy_sid = 1; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
717 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
718 s_pfn_Copy_Sid = |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
719 (CopySid_Proc) GetProcAddress ( |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
720 hm_advapi32, "CopySid"); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
721 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
722 if (s_pfn_Copy_Sid == NULL) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
723 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
724 return FALSE; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
725 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
726 return (s_pfn_Copy_Sid (destlen, dest, src)); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
727 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
728 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
729 /* |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
730 END: Wrapper functions around OpenProcessToken |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
731 and other functions in advapi32.dll that are only |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
732 supported in Windows NT / 2k / XP |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
733 */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
734 |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
735 void WINAPI get_native_system_info ( |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
736 LPSYSTEM_INFO lpSystemInfo) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
737 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
738 static GetNativeSystemInfo_Proc s_pfn_Get_Native_System_Info = NULL; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
739 if (is_windows_9x () != TRUE) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
740 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
741 if (g_b_init_get_native_system_info == 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
742 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
743 g_b_init_get_native_system_info = 1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
744 s_pfn_Get_Native_System_Info = |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
745 (GetNativeSystemInfo_Proc)GetProcAddress (GetModuleHandle ("kernel32.dll"), |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
746 "GetNativeSystemInfo"); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
747 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
748 if (s_pfn_Get_Native_System_Info != NULL) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
749 s_pfn_Get_Native_System_Info (lpSystemInfo); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
750 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
751 else |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
752 lpSystemInfo->dwNumberOfProcessors = -1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
753 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
754 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
755 BOOL WINAPI get_system_times ( |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
756 LPFILETIME lpIdleTime, |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
757 LPFILETIME lpKernelTime, |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
758 LPFILETIME lpUserTime) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
759 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
760 static GetSystemTimes_Proc s_pfn_Get_System_times = NULL; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
761 if (is_windows_9x () == TRUE) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
762 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
763 return FALSE; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
764 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
765 if (g_b_init_get_system_times == 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
766 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
767 g_b_init_get_system_times = 1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
768 s_pfn_Get_System_times = |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
769 (GetSystemTimes_Proc)GetProcAddress (GetModuleHandle ("kernel32.dll"), |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
770 "GetSystemTimes"); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
771 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
772 if (s_pfn_Get_System_times == NULL) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
773 return FALSE; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
774 return (s_pfn_Get_System_times (lpIdleTime, lpKernelTime, lpUserTime)); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
775 } |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
776 |
34696
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
777 /* Equivalent of strerror for W32 error codes. */ |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
778 char * |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
779 w32_strerror (int error_no) |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
780 { |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
781 static char buf[500]; |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
782 |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
783 if (error_no == 0) |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
784 error_no = GetLastError (); |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
785 |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
786 buf[0] = '\0'; |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
787 if (!FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
788 error_no, |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
789 0, /* choose most suitable language */ |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
790 buf, sizeof (buf), NULL)) |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
791 sprintf (buf, "w32 error %u", error_no); |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
792 return buf; |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
793 } |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
794 |
72286
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
795 /* Return 1 if P is a valid pointer to an object of size SIZE. Return |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
796 0 if P is NOT a valid pointer. Return -1 if we cannot validate P. |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
797 |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
798 This is called from alloc.c:valid_pointer_p. */ |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
799 int |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
800 w32_valid_pointer_p (void *p, int size) |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
801 { |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
802 SIZE_T done; |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
803 HANDLE h = OpenProcess (PROCESS_VM_READ, FALSE, GetCurrentProcessId ()); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
804 |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
805 if (h) |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
806 { |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
807 unsigned char *buf = alloca (size); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
808 int retval = ReadProcessMemory (h, p, buf, size, &done); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
809 |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
810 CloseHandle (h); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
811 return retval; |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
812 } |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
813 else |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
814 return -1; |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
815 } |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
816 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
817 static char startup_dir[MAXPATHLEN]; |
9803 | 818 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
819 /* Get the current working directory. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
820 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
821 getwd (char *dir) |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
822 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
823 #if 0 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
824 if (GetCurrentDirectory (MAXPATHLEN, dir) > 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
825 return dir; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
826 return NULL; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
827 #else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
828 /* Emacs doesn't actually change directory itself, and we want to |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
829 force our real wd to be where emacs.exe is to avoid unnecessary |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
830 conflicts when trying to rename or delete directories. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
831 strcpy (dir, startup_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
832 return dir; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
833 #endif |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
834 } |
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
835 |
9803 | 836 /* Emulate getloadavg. */ |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
837 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
838 struct load_sample { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
839 time_t sample_time; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
840 ULONGLONG idle; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
841 ULONGLONG kernel; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
842 ULONGLONG user; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
843 }; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
844 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
845 /* Number of processors on this machine. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
846 static unsigned num_of_processors; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
847 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
848 /* We maintain 1-sec samples for the last 16 minutes in a circular buffer. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
849 static struct load_sample samples[16*60]; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
850 static int first_idx = -1, last_idx = -1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
851 static int max_idx = sizeof (samples) / sizeof (samples[0]); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
852 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
853 static int |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
854 buf_next (int from) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
855 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
856 int next_idx = from + 1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
857 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
858 if (next_idx >= max_idx) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
859 next_idx = 0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
860 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
861 return next_idx; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
862 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
863 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
864 static int |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
865 buf_prev (int from) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
866 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
867 int prev_idx = from - 1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
868 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
869 if (prev_idx < 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
870 prev_idx = max_idx - 1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
871 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
872 return prev_idx; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
873 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
874 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
875 static void |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
876 sample_system_load (ULONGLONG *idle, ULONGLONG *kernel, ULONGLONG *user) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
877 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
878 SYSTEM_INFO sysinfo; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
879 FILETIME ft_idle, ft_user, ft_kernel; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
880 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
881 /* Initialize the number of processors on this machine. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
882 if (num_of_processors <= 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
883 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
884 get_native_system_info (&sysinfo); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
885 num_of_processors = sysinfo.dwNumberOfProcessors; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
886 if (num_of_processors <= 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
887 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
888 GetSystemInfo (&sysinfo); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
889 num_of_processors = sysinfo.dwNumberOfProcessors; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
890 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
891 if (num_of_processors <= 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
892 num_of_processors = 1; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
893 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
894 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
895 /* TODO: Take into account threads that are ready to run, by |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
896 sampling the "\System\Processor Queue Length" performance |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
897 counter. The code below accounts only for threads that are |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
898 actually running. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
899 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
900 if (get_system_times (&ft_idle, &ft_kernel, &ft_user)) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
901 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
902 ULARGE_INTEGER uidle, ukernel, uuser; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
903 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
904 memcpy (&uidle, &ft_idle, sizeof (ft_idle)); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
905 memcpy (&ukernel, &ft_kernel, sizeof (ft_kernel)); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
906 memcpy (&uuser, &ft_user, sizeof (ft_user)); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
907 *idle = uidle.QuadPart; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
908 *kernel = ukernel.QuadPart; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
909 *user = uuser.QuadPart; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
910 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
911 else |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
912 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
913 *idle = 0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
914 *kernel = 0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
915 *user = 0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
916 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
917 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
918 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
919 /* Produce the load average for a given time interval, using the |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
920 samples in the samples[] array. WHICH can be 0, 1, or 2, meaning |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
921 1-minute, 5-minute, or 15-minute average, respectively. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
922 static double |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
923 getavg (int which) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
924 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
925 double retval = -1.0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
926 double tdiff; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
927 int idx; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
928 double span = (which == 0 ? 1.0 : (which == 1 ? 5.0 : 15.0)) * 60; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
929 time_t now = samples[last_idx].sample_time; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
930 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
931 if (first_idx != last_idx) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
932 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
933 for (idx = buf_prev (last_idx); ; idx = buf_prev (idx)) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
934 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
935 tdiff = difftime (now, samples[idx].sample_time); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
936 if (tdiff >= span - 2*DBL_EPSILON*now) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
937 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
938 long double sys = |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
939 samples[last_idx].kernel + samples[last_idx].user |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
940 - (samples[idx].kernel + samples[idx].user); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
941 long double idl = samples[last_idx].idle - samples[idx].idle; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
942 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
943 retval = (1.0 - idl / sys) * num_of_processors; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
944 break; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
945 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
946 if (idx == first_idx) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
947 break; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
948 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
949 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
950 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
951 return retval; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
952 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
953 |
9803 | 954 int |
955 getloadavg (double loadavg[], int nelem) | |
956 { | |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
957 int elem; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
958 ULONGLONG idle, kernel, user; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
959 time_t now = time (NULL); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
960 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
961 /* Store another sample. We ignore samples that are less than 1 sec |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
962 apart. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
963 if (difftime (now, samples[last_idx].sample_time) >= 1.0 - 2*DBL_EPSILON*now) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
964 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
965 sample_system_load (&idle, &kernel, &user); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
966 last_idx = buf_next (last_idx); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
967 samples[last_idx].sample_time = now; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
968 samples[last_idx].idle = idle; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
969 samples[last_idx].kernel = kernel; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
970 samples[last_idx].user = user; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
971 /* If the buffer has more that 15 min worth of samples, discard |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
972 the old ones. */ |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
973 if (first_idx == -1) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
974 first_idx = last_idx; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
975 while (first_idx != last_idx |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
976 && (difftime (now, samples[first_idx].sample_time) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
977 >= 15.0*60 + 2*DBL_EPSILON*now)) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
978 first_idx = buf_next (first_idx); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
979 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
980 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
981 for (elem = 0; elem < nelem; elem++) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
982 { |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
983 double avg = getavg (elem); |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
984 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
985 if (avg < 0) |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
986 break; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
987 loadavg[elem] = avg; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
988 } |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
989 |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
990 return elem; |
9803 | 991 } |
992 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
993 /* Emulate getpwuid, getpwnam and others. */ |
9803 | 994 |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
995 #define PASSWD_FIELD_SIZE 256 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
996 |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
997 static char dflt_passwd_name[PASSWD_FIELD_SIZE]; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
998 static char dflt_passwd_passwd[PASSWD_FIELD_SIZE]; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
999 static char dflt_passwd_gecos[PASSWD_FIELD_SIZE]; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1000 static char dflt_passwd_dir[PASSWD_FIELD_SIZE]; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1001 static char dflt_passwd_shell[PASSWD_FIELD_SIZE]; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1002 |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1003 static struct passwd dflt_passwd = |
9803 | 1004 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1005 dflt_passwd_name, |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1006 dflt_passwd_passwd, |
9803 | 1007 0, |
1008 0, | |
1009 0, | |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1010 dflt_passwd_gecos, |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1011 dflt_passwd_dir, |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1012 dflt_passwd_shell, |
9803 | 1013 }; |
1014 | |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1015 static char dflt_group_name[GNLEN+1]; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1016 |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1017 static struct group dflt_group = |
53123 | 1018 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1019 /* When group information is not available, we return this as the |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1020 group for all files. */ |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1021 dflt_group_name, |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1022 0, |
53123 | 1023 }; |
1024 | |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
1025 unsigned |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1026 getuid (void) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1027 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1028 return dflt_passwd.pw_uid; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1029 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1030 |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
1031 unsigned |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1032 geteuid (void) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1033 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1034 /* I could imagine arguing for checking to see whether the user is |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1035 in the Administrators group and returning a UID of 0 for that |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1036 case, but I don't know how wise that would be in the long run. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1037 return getuid (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1038 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1039 |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
1040 unsigned |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1041 getgid (void) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1042 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1043 return dflt_passwd.pw_gid; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1044 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1045 |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
1046 unsigned |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1047 getegid (void) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1048 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1049 return getgid (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1050 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1051 |
9803 | 1052 struct passwd * |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
1053 getpwuid (unsigned uid) |
9803 | 1054 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1055 if (uid == dflt_passwd.pw_uid) |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1056 return &dflt_passwd; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1057 return NULL; |
9803 | 1058 } |
1059 | |
53123 | 1060 struct group * |
1061 getgrgid (gid_t gid) | |
1062 { | |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1063 return &dflt_group; |
53123 | 1064 } |
1065 | |
9803 | 1066 struct passwd * |
1067 getpwnam (char *name) | |
1068 { | |
1069 struct passwd *pw; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1070 |
9803 | 1071 pw = getpwuid (getuid ()); |
1072 if (!pw) | |
1073 return pw; | |
1074 | |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
1075 if (xstrcasecmp (name, pw->pw_name)) |
9803 | 1076 return NULL; |
1077 | |
1078 return pw; | |
1079 } | |
1080 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1081 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1082 init_user_info (void) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1083 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1084 /* Find the user's real name by opening the process token and |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1085 looking up the name associated with the user-sid in that token. |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1086 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1087 Use the relative portion of the identifier authority value from |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1088 the user-sid as the user id value (same for group id using the |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1089 primary group sid from the process token). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1090 |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1091 char uname[UNLEN+1], gname[GNLEN+1], domain[1025]; |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1092 DWORD ulength = sizeof (uname), dlength = sizeof (domain), needed; |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1093 DWORD glength = sizeof (gname); |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1094 HANDLE token = NULL; |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1095 SID_NAME_USE user_type; |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1096 unsigned char *buf = NULL; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1097 DWORD blen = 0; |
91878
a5f49adf9035
(init_user_info): Use TOKEN_USER and TOKEN_PRIMARY_GROUP instead of
Eli Zaretskii <eliz@gnu.org>
parents:
88048
diff
changeset
|
1098 TOKEN_USER user_token; |
a5f49adf9035
(init_user_info): Use TOKEN_USER and TOKEN_PRIMARY_GROUP instead of
Eli Zaretskii <eliz@gnu.org>
parents:
88048
diff
changeset
|
1099 TOKEN_PRIMARY_GROUP group_token; |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1100 BOOL result; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1101 |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1102 result = open_process_token (GetCurrentProcess (), TOKEN_QUERY, &token); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1103 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1104 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1105 result = get_token_information (token, TokenUser, NULL, 0, &blen); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1106 if (!result && GetLastError () == ERROR_INSUFFICIENT_BUFFER) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1107 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1108 buf = xmalloc (blen); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1109 result = get_token_information (token, TokenUser, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1110 (LPVOID)buf, blen, &needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1111 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1112 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1113 memcpy (&user_token, buf, sizeof (user_token)); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1114 result = lookup_account_sid (NULL, user_token.User.Sid, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1115 uname, &ulength, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1116 domain, &dlength, &user_type); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1117 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1118 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1119 else |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1120 result = FALSE; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1121 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1122 if (result) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1123 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1124 strcpy (dflt_passwd.pw_name, uname); |
87990
78715eba45dd
(g_b_init_get_sid_sub_authority, g_b_init_get_sid_sub_authority_count): New
Eli Zaretskii <eliz@gnu.org>
parents:
87985
diff
changeset
|
1125 /* Determine a reasonable uid value. */ |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
1126 if (xstrcasecmp ("administrator", uname) == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1127 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1128 dflt_passwd.pw_uid = 500; /* well-known Administrator uid */ |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1129 dflt_passwd.pw_gid = 513; /* well-known None gid */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1130 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1131 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1132 { |
87995
e576feac5b90
(init_user_info): Fix commentary for RID usage.
Eli Zaretskii <eliz@gnu.org>
parents:
87990
diff
changeset
|
1133 /* Use the last sub-authority value of the RID, the relative |
e576feac5b90
(init_user_info): Fix commentary for RID usage.
Eli Zaretskii <eliz@gnu.org>
parents:
87990
diff
changeset
|
1134 portion of the SID, as user/group ID. */ |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
1135 dflt_passwd.pw_uid = get_rid (user_token.User.Sid); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
1136 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
1137 /* Get group id and name. */ |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1138 result = get_token_information (token, TokenPrimaryGroup, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1139 (LPVOID)buf, blen, &needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1140 if (!result && GetLastError () == ERROR_INSUFFICIENT_BUFFER) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1141 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1142 buf = xrealloc (buf, blen = needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1143 result = get_token_information (token, TokenPrimaryGroup, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1144 (LPVOID)buf, blen, &needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1145 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1146 if (result) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1147 { |
91878
a5f49adf9035
(init_user_info): Use TOKEN_USER and TOKEN_PRIMARY_GROUP instead of
Eli Zaretskii <eliz@gnu.org>
parents:
88048
diff
changeset
|
1148 memcpy (&group_token, buf, sizeof (group_token)); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
1149 dflt_passwd.pw_gid = get_rid (group_token.PrimaryGroup); |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1150 dlength = sizeof (domain); |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1151 /* If we can get at the real Primary Group name, use that. |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1152 Otherwise, the default group name was already set to |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1153 "None" in globals_of_w32. */ |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1154 if (lookup_account_sid (NULL, group_token.PrimaryGroup, |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1155 gname, &glength, NULL, &dlength, |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1156 &user_type)) |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1157 strcpy (dflt_group_name, gname); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1158 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1159 else |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1160 dflt_passwd.pw_gid = dflt_passwd.pw_uid; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1161 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1162 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1163 /* If security calls are not supported (presumably because we |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1164 are running under Windows 9X), fallback to this: */ |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1165 else if (GetUserName (uname, &ulength)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1166 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1167 strcpy (dflt_passwd.pw_name, uname); |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
1168 if (xstrcasecmp ("administrator", uname) == 0) |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1169 dflt_passwd.pw_uid = 0; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1170 else |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1171 dflt_passwd.pw_uid = 123; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1172 dflt_passwd.pw_gid = dflt_passwd.pw_uid; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1173 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1174 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1175 { |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1176 strcpy (dflt_passwd.pw_name, "unknown"); |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1177 dflt_passwd.pw_uid = 123; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1178 dflt_passwd.pw_gid = 123; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1179 } |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1180 dflt_group.gr_gid = dflt_passwd.pw_gid; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1181 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1182 /* Ensure HOME and SHELL are defined. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1183 if (getenv ("HOME") == NULL) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1184 abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1185 if (getenv ("SHELL") == NULL) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1186 abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1187 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1188 /* Set dir and shell from environment variables. */ |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1189 strcpy (dflt_passwd.pw_dir, getenv ("HOME")); |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
1190 strcpy (dflt_passwd.pw_shell, getenv ("SHELL")); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1191 |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
1192 xfree (buf); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1193 if (token) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1194 CloseHandle (token); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1195 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1196 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1197 int |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1198 random (void) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1199 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1200 /* rand () on NT gives us 15 random bits...hack together 30 bits. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1201 return ((rand () << 15) | rand ()); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1202 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1203 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1204 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1205 srandom (int seed) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1206 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1207 srand (seed); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1208 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1209 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1210 |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1211 /* Normalize filename by converting all path separators to |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1212 the specified separator. Also conditionally convert upper |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1213 case path name components to lower case. */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1214 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1215 static void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1216 normalize_filename (register char *fp, char path_sep) |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1217 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1218 char sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1219 char *elem; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1220 |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1221 /* Always lower-case drive letters a-z, even if the filesystem |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1222 preserves case in filenames. |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1223 This is so filenames can be compared by string comparison |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1224 functions that are case-sensitive. Even case-preserving filesystems |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1225 do not distinguish case in drive letters. */ |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1226 if (fp[1] == ':' && *fp >= 'A' && *fp <= 'Z') |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1227 { |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1228 *fp += 'a' - 'A'; |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1229 fp += 2; |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1230 } |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1231 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1232 if (NILP (Vw32_downcase_file_names)) |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1233 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1234 while (*fp) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1235 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1236 if (*fp == '/' || *fp == '\\') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1237 *fp = path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1238 fp++; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1239 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1240 return; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1241 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1242 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1243 sep = path_sep; /* convert to this path separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1244 elem = fp; /* start of current path element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1245 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1246 do { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1247 if (*fp >= 'a' && *fp <= 'z') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1248 elem = 0; /* don't convert this element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1249 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1250 if (*fp == 0 || *fp == ':') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1251 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1252 sep = *fp; /* restore current separator (or 0) */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1253 *fp = '/'; /* after conversion of this element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1254 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1255 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1256 if (*fp == '/' || *fp == '\\') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1257 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1258 if (elem && elem != fp) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1259 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1260 *fp = 0; /* temporary end of string */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1261 _strlwr (elem); /* while we convert to lower case */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1262 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1263 *fp = sep; /* convert (or restore) path separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1264 elem = fp + 1; /* next element starts after separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1265 sep = path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1266 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1267 } while (*fp++); |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1268 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1269 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1270 /* Destructively turn backslashes into slashes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1271 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1272 dostounix_filename (register char *p) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1273 { |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1274 normalize_filename (p, '/'); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1275 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1276 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1277 /* Destructively turn slashes into backslashes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1278 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1279 unixtodos_filename (register char *p) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1280 { |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
1281 normalize_filename (p, '\\'); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1282 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1283 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1284 /* Remove all CR's that are followed by a LF. |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1285 (From msdos.c...probably should figure out a way to share it, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1286 although this code isn't going to ever change.) */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1287 int |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1288 crlf_to_lf (register int n, register unsigned char *buf) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1289 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1290 unsigned char *np = buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1291 unsigned char *startp = buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1292 unsigned char *endp = buf + n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1293 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1294 if (n == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1295 return n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1296 while (buf < endp - 1) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1297 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1298 if (*buf == 0x0d) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1299 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1300 if (*(++buf) != 0x0a) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1301 *np++ = 0x0d; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1302 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1303 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1304 *np++ = *buf++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1305 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1306 if (buf < endp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1307 *np++ = *buf++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1308 return np - startp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1309 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1310 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1311 /* Parse the root part of file name, if present. Return length and |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1312 optionally store pointer to char after root. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1313 static int |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1314 parse_root (char * name, char ** pPath) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1315 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1316 char * start = name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1317 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1318 if (name == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1319 return 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1320 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1321 /* find the root name of the volume if given */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1322 if (isalpha (name[0]) && name[1] == ':') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1323 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1324 /* skip past drive specifier */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1325 name += 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1326 if (IS_DIRECTORY_SEP (name[0])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1327 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1328 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1329 else if (IS_DIRECTORY_SEP (name[0]) && IS_DIRECTORY_SEP (name[1])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1330 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1331 int slashes = 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1332 name += 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1333 do |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1334 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1335 if (IS_DIRECTORY_SEP (*name) && --slashes == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1336 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1337 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1338 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1339 while ( *name ); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1340 if (IS_DIRECTORY_SEP (name[0])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1341 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1342 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1343 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1344 if (pPath) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1345 *pPath = name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1346 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1347 return name - start; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1348 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1349 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1350 /* Get long base name for name; name is assumed to be absolute. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1351 static int |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1352 get_long_basename (char * name, char * buf, int size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1353 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1354 WIN32_FIND_DATA find_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1355 HANDLE dir_handle; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1356 int len = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1357 |
28932
f8b0ac62f238
Use the term `invalid' instead of `illegal'.
Gerd Moellmann <gerd@gnu.org>
parents:
27890
diff
changeset
|
1358 /* must be valid filename, no wild cards or other invalid characters */ |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
1359 if (_mbspbrk (name, "*?|<>\"")) |
22039
c33bec4d9e67
(stat, get_long_basename): Fail if filename contains any
Richard M. Stallman <rms@gnu.org>
parents:
21747
diff
changeset
|
1360 return 0; |
c33bec4d9e67
(stat, get_long_basename): Fail if filename contains any
Richard M. Stallman <rms@gnu.org>
parents:
21747
diff
changeset
|
1361 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1362 dir_handle = FindFirstFile (name, &find_data); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1363 if (dir_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1364 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1365 if ((len = strlen (find_data.cFileName)) < size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1366 memcpy (buf, find_data.cFileName, len + 1); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1367 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1368 len = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1369 FindClose (dir_handle); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1370 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1371 return len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1372 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1373 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1374 /* Get long name for file, if possible (assumed to be absolute). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1375 BOOL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1376 w32_get_long_filename (char * name, char * buf, int size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1377 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1378 char * o = buf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1379 char * p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1380 char * q; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1381 char full[ MAX_PATH ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1382 int len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1383 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1384 len = strlen (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1385 if (len >= MAX_PATH) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1386 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1387 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1388 /* Use local copy for destructive modification. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1389 memcpy (full, name, len+1); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1390 unixtodos_filename (full); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1391 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1392 /* Copy root part verbatim. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1393 len = parse_root (full, &p); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1394 memcpy (o, full, len); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1395 o += len; |
23858
6bb3dc7f1b48
(w32_get_long_filename): Handle root dirs correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23809
diff
changeset
|
1396 *o = '\0'; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1397 size -= len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1398 |
23858
6bb3dc7f1b48
(w32_get_long_filename): Handle root dirs correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23809
diff
changeset
|
1399 while (p != NULL && *p) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1400 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1401 q = p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1402 p = strchr (q, '\\'); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1403 if (p) *p = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1404 len = get_long_basename (full, o, size); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1405 if (len > 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1406 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1407 o += len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1408 size -= len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1409 if (p != NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1410 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1411 *p++ = '\\'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1412 if (size < 2) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1413 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1414 *o++ = '\\'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1415 size--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1416 *o = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1417 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1418 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1419 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1420 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1421 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1422 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1423 return TRUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1424 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1425 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1426 int |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1427 is_unc_volume (const char *filename) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1428 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1429 const char *ptr = filename; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1430 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1431 if (!IS_DIRECTORY_SEP (ptr[0]) || !IS_DIRECTORY_SEP (ptr[1]) || !ptr[2]) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1432 return 0; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1433 |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
1434 if (_mbspbrk (ptr + 2, "*?|<>\"\\/")) |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1435 return 0; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1436 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1437 return 1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1438 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1439 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1440 /* Routines that are no-ops on NT but are defined to get Emacs to compile. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1441 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1442 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1443 sigsetmask (int signal_mask) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1444 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1445 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1446 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1447 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1448 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1449 sigmask (int sig) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1450 { |
27630
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
1451 return 0; |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
1452 } |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
1453 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1454 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1455 sigblock (int sig) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1456 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1457 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1458 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1459 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1460 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1461 sigunblock (int sig) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1462 { |
27630
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
1463 return 0; |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
1464 } |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
1465 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1466 int |
108200
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1467 sigemptyset (sigset_t *set) |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1468 { |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1469 return 0; |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1470 } |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1471 |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1472 int |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1473 sigaddset (sigset_t *set, int signo) |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1474 { |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1475 return 0; |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1476 } |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1477 |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1478 int |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1479 sigfillset (sigset_t *set) |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1480 { |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1481 return 0; |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1482 } |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1483 |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1484 int |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1485 sigprocmask (int how, const sigset_t *set, sigset_t *oset) |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1486 { |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1487 return 0; |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1488 } |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1489 |
e30aff0bf9d5
Emulate POSIX_SIGNALS on MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
1490 int |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1491 setpgrp (int pid, int gid) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1492 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1493 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1494 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1495 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1496 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1497 alarm (int seconds) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1498 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1499 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1500 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1501 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1502 #define REG_ROOT "SOFTWARE\\GNU\\Emacs" |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1503 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1504 LPBYTE |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
1505 w32_get_resource (char *key, LPDWORD lpdwtype) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1506 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1507 LPBYTE lpvalue; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1508 HKEY hrootkey = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1509 DWORD cbData; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1510 |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1511 /* Check both the current user and the local machine to see if |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1512 we have any resources. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1513 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1514 if (RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1515 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1516 lpvalue = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1517 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1518 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1519 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1520 && RegQueryValueEx (hrootkey, key, NULL, lpdwtype, lpvalue, &cbData) == ERROR_SUCCESS) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1521 { |
78919
87875c00eb06
(w32_get_resource): Always close registry keys.
Jason Rumney <jasonr@gnu.org>
parents:
78260
diff
changeset
|
1522 RegCloseKey (hrootkey); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1523 return (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1524 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1525 |
95481
4390d64d3328
Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents:
95277
diff
changeset
|
1526 xfree (lpvalue); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1527 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1528 RegCloseKey (hrootkey); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1529 } |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1530 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1531 if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1532 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1533 lpvalue = NULL; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1534 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1535 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1536 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1537 && RegQueryValueEx (hrootkey, key, NULL, lpdwtype, lpvalue, &cbData) == ERROR_SUCCESS) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1538 { |
78919
87875c00eb06
(w32_get_resource): Always close registry keys.
Jason Rumney <jasonr@gnu.org>
parents:
78260
diff
changeset
|
1539 RegCloseKey (hrootkey); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1540 return (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1541 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1542 |
95481
4390d64d3328
Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents:
95277
diff
changeset
|
1543 xfree (lpvalue); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1544 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1545 RegCloseKey (hrootkey); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1546 } |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1547 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1548 return (NULL); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1549 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1550 |
16892
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1551 char *get_emacs_configuration (void); |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1552 extern Lisp_Object Vsystem_configuration; |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1553 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1554 void |
24229
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1555 init_environment (char ** argv) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1556 { |
22363 | 1557 static const char * const tempdirs[] = { |
1558 "$TMPDIR", "$TEMP", "$TMP", "c:/" | |
1559 }; | |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1560 |
22363 | 1561 int i; |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1562 |
22363 | 1563 const int imax = sizeof (tempdirs) / sizeof (tempdirs[0]); |
1564 | |
1565 /* Make sure they have a usable $TMPDIR. Many Emacs functions use | |
1566 temporary files and assume "/tmp" if $TMPDIR is unset, which | |
1567 will break on DOS/Windows. Refuse to work if we cannot find | |
1568 a directory, not even "c:/", usable for that purpose. */ | |
1569 for (i = 0; i < imax ; i++) | |
1570 { | |
1571 const char *tmp = tempdirs[i]; | |
1572 | |
1573 if (*tmp == '$') | |
1574 tmp = getenv (tmp + 1); | |
1575 /* Note that `access' can lie to us if the directory resides on a | |
1576 read-only filesystem, like CD-ROM or a write-protected floppy. | |
1577 The only way to be really sure is to actually create a file and | |
1578 see if it succeeds. But I think that's too much to ask. */ | |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1579 if (tmp && _access (tmp, D_OK) == 0) |
22363 | 1580 { |
1581 char * var = alloca (strlen (tmp) + 8); | |
1582 sprintf (var, "TMPDIR=%s", tmp); | |
36001
1d402a57bb21
(init-environment): Duplicate local string before putenv.
Jason Rumney <jasonr@gnu.org>
parents:
35425
diff
changeset
|
1583 _putenv (strdup (var)); |
22363 | 1584 break; |
1585 } | |
1586 } | |
1587 if (i >= imax) | |
1588 cmd_error_internal | |
1589 (Fcons (Qerror, | |
1590 Fcons (build_string ("no usable temporary directories found!!"), | |
1591 Qnil)), | |
1592 "While setting TMPDIR: "); | |
1593 | |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1594 /* Check for environment variables and use registry settings if they |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1595 don't exist. Fallback on default values where applicable. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1596 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1597 int i; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1598 LPBYTE lpval; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1599 DWORD dwType; |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1600 char locale_name[32]; |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1601 struct stat ignored; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1602 char default_home[MAX_PATH]; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1603 |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1604 static const struct env_entry |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1605 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1606 char * name; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1607 char * def_value; |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1608 } dflt_envvars[] = |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1609 { |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1610 {"HOME", "C:/"}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1611 {"PRELOAD_WINSOCK", NULL}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1612 {"emacs_dir", "C:/emacs"}, |
35425
c26271ca6ad0
(init_environment): Add a version-independent site-lisp
Andrew Innes <andrewi@gnu.org>
parents:
35286
diff
changeset
|
1613 {"EMACSLOADPATH", "%emacs_dir%/site-lisp;%emacs_dir%/../site-lisp;%emacs_dir%/lisp;%emacs_dir%/leim"}, |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1614 {"SHELL", "%emacs_dir%/bin/cmdproxy.exe"}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1615 {"EMACSDATA", "%emacs_dir%/etc"}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1616 {"EMACSPATH", "%emacs_dir%/bin"}, |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1617 /* We no longer set INFOPATH because Info-default-directory-list |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1618 is then ignored. */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1619 /* {"INFOPATH", "%emacs_dir%/info"}, */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1620 {"EMACSDOC", "%emacs_dir%/etc"}, |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1621 {"TERM", "cmd"}, |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1622 {"LANG", NULL}, |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1623 }; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1624 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
1625 #define N_ENV_VARS sizeof (dflt_envvars)/sizeof (dflt_envvars[0]) |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1626 |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1627 /* We need to copy dflt_envvars[] and work on the copy because we |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1628 don't want the dumped Emacs to inherit the values of |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1629 environment variables we saw during dumping (which could be on |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1630 a different system). The defaults above must be left intact. */ |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1631 struct env_entry env_vars[N_ENV_VARS]; |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1632 |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1633 for (i = 0; i < N_ENV_VARS; i++) |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1634 env_vars[i] = dflt_envvars[i]; |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1635 |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1636 /* For backwards compatibility, check if a .emacs file exists in C:/ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1637 If not, then we can try to default to the appdata directory under the |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1638 user's profile, which is more likely to be writable. */ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1639 if (stat ("C:/.emacs", &ignored) < 0) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1640 { |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1641 HRESULT profile_result; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1642 /* Dynamically load ShGetFolderPath, as it won't exist on versions |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1643 of Windows 95 and NT4 that have not been updated to include |
100192
038d7d21b786
* w32.c (init_environment): Don't free handle to library shell32.dll.
Juanma Barranquero <lekktu@gmail.com>
parents:
97875
diff
changeset
|
1644 MSIE 5. */ |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1645 ShGetFolderPath_fn get_folder_path; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1646 get_folder_path = (ShGetFolderPath_fn) |
100192
038d7d21b786
* w32.c (init_environment): Don't free handle to library shell32.dll.
Juanma Barranquero <lekktu@gmail.com>
parents:
97875
diff
changeset
|
1647 GetProcAddress (GetModuleHandle ("shell32.dll"), "SHGetFolderPathA"); |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1648 |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1649 if (get_folder_path != NULL) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1650 { |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1651 profile_result = get_folder_path (NULL, CSIDL_APPDATA, NULL, |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1652 0, default_home); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1653 |
96376
c3309dba6542
American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents:
95917
diff
changeset
|
1654 /* If we can't get the appdata dir, revert to old behavior. */ |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1655 if (profile_result == S_OK) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1656 env_vars[0].def_value = default_home; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1657 } |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1658 } |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1659 |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1660 /* Get default locale info and use it for LANG. */ |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1661 if (GetLocaleInfo (LOCALE_USER_DEFAULT, |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1662 LOCALE_SABBREVLANGNAME | LOCALE_USE_CP_ACP, |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1663 locale_name, sizeof (locale_name))) |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1664 { |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1665 for (i = 0; i < N_ENV_VARS; i++) |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1666 { |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1667 if (strcmp (env_vars[i].name, "LANG") == 0) |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1668 { |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1669 env_vars[i].def_value = locale_name; |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1670 break; |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1671 } |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1672 } |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1673 } |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1674 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1675 #define SET_ENV_BUF_SIZE (4 * MAX_PATH) /* to cover EMACSLOADPATH */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1676 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1677 /* Treat emacs_dir specially: set it unconditionally based on our |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1678 location, if it appears that we are running from the bin subdir |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1679 of a standard installation. */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1680 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1681 char *p; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1682 char modname[MAX_PATH]; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1683 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1684 if (!GetModuleFileName (NULL, modname, MAX_PATH)) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1685 abort (); |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1686 if ((p = strrchr (modname, '\\')) == NULL) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1687 abort (); |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1688 *p = 0; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1689 |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
1690 if ((p = strrchr (modname, '\\')) && xstrcasecmp (p, "\\bin") == 0) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1691 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1692 char buf[SET_ENV_BUF_SIZE]; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1693 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1694 *p = 0; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1695 for (p = modname; *p; p++) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1696 if (*p == '\\') *p = '/'; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1697 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
1698 _snprintf (buf, sizeof (buf)-1, "emacs_dir=%s", modname); |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1699 _putenv (strdup (buf)); |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1700 } |
57609
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1701 /* Handle running emacs from the build directory: src/oo-spd/i386/ */ |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1702 |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1703 /* FIXME: should use substring of get_emacs_configuration (). |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1704 But I don't think the Windows build supports alpha, mips etc |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1705 anymore, so have taken the easy option for now. */ |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
1706 else if (p && xstrcasecmp (p, "\\i386") == 0) |
57609
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1707 { |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1708 *p = 0; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1709 p = strrchr (modname, '\\'); |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1710 if (p != NULL) |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1711 { |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1712 *p = 0; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1713 p = strrchr (modname, '\\'); |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
1714 if (p && xstrcasecmp (p, "\\src") == 0) |
57609
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1715 { |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1716 char buf[SET_ENV_BUF_SIZE]; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1717 |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1718 *p = 0; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1719 for (p = modname; *p; p++) |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1720 if (*p == '\\') *p = '/'; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1721 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
1722 _snprintf (buf, sizeof (buf)-1, "emacs_dir=%s", modname); |
57609
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1723 _putenv (strdup (buf)); |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1724 } |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1725 } |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1726 } |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1727 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1728 |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1729 for (i = 0; i < N_ENV_VARS; i++) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1730 { |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1731 if (!getenv (env_vars[i].name)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1732 { |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1733 int dont_free = 0; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1734 |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1735 if ((lpval = w32_get_resource (env_vars[i].name, &dwType)) == NULL |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1736 /* Also ignore empty environment variables. */ |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1737 || *lpval == 0) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1738 { |
95481
4390d64d3328
Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents:
95277
diff
changeset
|
1739 xfree (lpval); |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1740 lpval = env_vars[i].def_value; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1741 dwType = REG_EXPAND_SZ; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1742 dont_free = 1; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1743 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1744 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1745 if (lpval) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1746 { |
70740
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1747 char buf1[SET_ENV_BUF_SIZE], buf2[SET_ENV_BUF_SIZE]; |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1748 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1749 if (dwType == REG_EXPAND_SZ) |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
1750 ExpandEnvironmentStrings ((LPSTR) lpval, buf1, sizeof (buf1)); |
70740
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1751 else if (dwType == REG_SZ) |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1752 strcpy (buf1, lpval); |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1753 if (dwType == REG_EXPAND_SZ || dwType == REG_SZ) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1754 { |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
1755 _snprintf (buf2, sizeof (buf2)-1, "%s=%s", env_vars[i].name, |
70740
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1756 buf1); |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1757 _putenv (strdup (buf2)); |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1758 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1759 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1760 if (!dont_free) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1761 xfree (lpval); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1762 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1763 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1764 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1765 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1766 |
16892
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1767 /* Rebuild system configuration to reflect invoking system. */ |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1768 Vsystem_configuration = build_string (EMACS_CONFIGURATION); |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1769 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1770 /* Another special case: on NT, the PATH variable is actually named |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1771 "Path" although cmd.exe (perhaps NT itself) arranges for |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1772 environment variable lookup and setting to be case insensitive. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1773 However, Emacs assumes a fully case sensitive environment, so we |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1774 need to change "Path" to "PATH" to match the expectations of |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1775 various elisp packages. We do this by the sneaky method of |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1776 modifying the string in the C runtime environ entry. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1777 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1778 The same applies to COMSPEC. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1779 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1780 char ** envp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1781 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1782 for (envp = environ; *envp; envp++) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1783 if (_strnicmp (*envp, "PATH=", 5) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1784 memcpy (*envp, "PATH=", 5); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1785 else if (_strnicmp (*envp, "COMSPEC=", 8) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1786 memcpy (*envp, "COMSPEC=", 8); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1787 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1788 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1789 /* Remember the initial working directory for getwd, then make the |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1790 real wd be the location of emacs.exe to avoid conflicts when |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1791 renaming or deleting directories. (We also don't call chdir when |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1792 running subprocesses for the same reason.) */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1793 if (!GetCurrentDirectory (MAXPATHLEN, startup_dir)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1794 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1795 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1796 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1797 char *p; |
24229
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1798 static char modname[MAX_PATH]; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1799 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1800 if (!GetModuleFileName (NULL, modname, MAX_PATH)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1801 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1802 if ((p = strrchr (modname, '\\')) == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1803 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1804 *p = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1805 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1806 SetCurrentDirectory (modname); |
24229
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1807 |
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1808 /* Ensure argv[0] has the full path to Emacs. */ |
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1809 *p = '\\'; |
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1810 argv[0] = modname; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1811 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1812 |
27890
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1813 /* Determine if there is a middle mouse button, to allow parse_button |
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1814 to decide whether right mouse events should be mouse-2 or |
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1815 mouse-3. */ |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
1816 w32_num_mouse_buttons = GetSystemMetrics (SM_CMOUSEBUTTONS); |
27890
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1817 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1818 init_user_info (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1819 } |
9803 | 1820 |
42192
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1821 char * |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1822 emacs_root_dir (void) |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1823 { |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1824 static char root_dir[FILENAME_MAX]; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1825 const char *p; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1826 |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1827 p = getenv ("emacs_dir"); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1828 if (p == NULL) |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1829 abort (); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1830 strcpy (root_dir, p); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1831 root_dir[parse_root (root_dir, NULL)] = '\0'; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1832 dostounix_filename (root_dir); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1833 return root_dir; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1834 } |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1835 |
9803 | 1836 /* We don't have scripts to automatically determine the system configuration |
1837 for Emacs before it's compiled, and we don't want to have to make the | |
1838 user enter it, so we define EMACS_CONFIGURATION to invoke this runtime | |
1839 routine. */ | |
1840 | |
1841 char * | |
1842 get_emacs_configuration (void) | |
1843 { | |
13156 | 1844 char *arch, *oem, *os; |
24885
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1845 int build_num; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1846 static char configuration_buffer[32]; |
9803 | 1847 |
13156 | 1848 /* Determine the processor type. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1849 switch (get_processor_type ()) |
13156 | 1850 { |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1851 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1852 #ifdef PROCESSOR_INTEL_386 |
13156 | 1853 case PROCESSOR_INTEL_386: |
1854 case PROCESSOR_INTEL_486: | |
1855 case PROCESSOR_INTEL_PENTIUM: | |
1856 arch = "i386"; | |
1857 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1858 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1859 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1860 #ifdef PROCESSOR_MIPS_R2000 |
13156 | 1861 case PROCESSOR_MIPS_R2000: |
1862 case PROCESSOR_MIPS_R3000: | |
1863 case PROCESSOR_MIPS_R4000: | |
1864 arch = "mips"; | |
1865 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1866 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1867 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1868 #ifdef PROCESSOR_ALPHA_21064 |
13156 | 1869 case PROCESSOR_ALPHA_21064: |
1870 arch = "alpha"; | |
1871 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1872 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1873 |
13156 | 1874 default: |
1875 arch = "unknown"; | |
1876 break; | |
1877 } | |
9803 | 1878 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1879 /* Use the OEM field to reflect the compiler/library combination. */ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1880 #ifdef _MSC_VER |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1881 #define COMPILER_NAME "msvc" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1882 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1883 #ifdef __GNUC__ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1884 #define COMPILER_NAME "mingw" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1885 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1886 #define COMPILER_NAME "unknown" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1887 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1888 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1889 oem = COMPILER_NAME; |
9803 | 1890 |
24885
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1891 switch (osinfo_cache.dwPlatformId) { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1892 case VER_PLATFORM_WIN32_NT: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1893 os = "nt"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1894 build_num = osinfo_cache.dwBuildNumber; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1895 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1896 case VER_PLATFORM_WIN32_WINDOWS: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1897 if (osinfo_cache.dwMinorVersion == 0) { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1898 os = "windows95"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1899 } else { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1900 os = "windows98"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1901 } |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1902 build_num = LOWORD (osinfo_cache.dwBuildNumber); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1903 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1904 case VER_PLATFORM_WIN32s: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1905 /* Not supported, should not happen. */ |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1906 os = "windows32s"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1907 build_num = LOWORD (osinfo_cache.dwBuildNumber); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1908 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1909 default: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1910 os = "unknown"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1911 build_num = 0; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1912 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1913 } |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1914 |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1915 if (osinfo_cache.dwPlatformId == VER_PLATFORM_WIN32_NT) { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1916 sprintf (configuration_buffer, "%s-%s-%s%d.%d.%d", arch, oem, os, |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1917 get_w32_major_version (), get_w32_minor_version (), build_num); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1918 } else { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1919 sprintf (configuration_buffer, "%s-%s-%s.%d", arch, oem, os, build_num); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1920 } |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1921 |
13156 | 1922 return configuration_buffer; |
9803 | 1923 } |
1924 | |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1925 char * |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1926 get_emacs_configuration_options (void) |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1927 { |
110482
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1928 static char *options_buffer; |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1929 char cv[32]; /* Enough for COMPILER_VERSION. */ |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1930 char *options[] = { |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1931 cv, /* To be filled later. */ |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1932 #ifdef EMACSDEBUG |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1933 " --no-opt", |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1934 #endif |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1935 /* configure.bat already sets USER_CFLAGS and USER_LDFLAGS |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1936 with a starting space to save work here. */ |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1937 #ifdef USER_CFLAGS |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1938 " --cflags", USER_CFLAGS, |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1939 #endif |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1940 #ifdef USER_LDFLAGS |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1941 " --ldflags", USER_LDFLAGS, |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1942 #endif |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1943 NULL |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1944 }; |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1945 size_t size = 0; |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1946 int i; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1947 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1948 /* Work out the effective configure options for this build. */ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1949 #ifdef _MSC_VER |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1950 #define COMPILER_VERSION "--with-msvc (%d.%02d)", _MSC_VER / 100, _MSC_VER % 100 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1951 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1952 #ifdef __GNUC__ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1953 #define COMPILER_VERSION "--with-gcc (%d.%d)", __GNUC__, __GNUC_MINOR__ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1954 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1955 #define COMPILER_VERSION "" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1956 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1957 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1958 |
110482
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1959 if (_snprintf (cv, sizeof (cv), COMPILER_VERSION) < 0) |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1960 return "Error: not enough space for compiler version"; |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1961 |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1962 for (i = 0; options[i]; i++) |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1963 size += strlen (options[i]); |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1964 |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1965 options_buffer = xmalloc (size + 1); |
110483
2892adf3a65b
w32.c (get_emacs_configuration_options): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
110482
diff
changeset
|
1966 options_buffer[0] = '\0'; |
110482
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1967 |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1968 for (i = 0; options[i]; i++) |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1969 strcat (options_buffer, options[i]); |
99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
Juanma Barranquero <lekktu@gmail.com>
parents:
110431
diff
changeset
|
1970 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1971 return options_buffer; |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1972 } |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1973 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1974 |
11384 | 1975 #include <sys/timeb.h> |
1976 | |
1977 /* Emulate gettimeofday (Ulrich Leodolter, 1/11/95). */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1978 void |
11384 | 1979 gettimeofday (struct timeval *tv, struct timezone *tz) |
1980 { | |
63020
92ecd695d7c1
(gettimeofday): Use struct _timeb, not struct timeb.
Eli Zaretskii <eliz@gnu.org>
parents:
60092
diff
changeset
|
1981 struct _timeb tb; |
11384 | 1982 _ftime (&tb); |
1983 | |
1984 tv->tv_sec = tb.time; | |
1985 tv->tv_usec = tb.millitm * 1000L; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1986 if (tz) |
11384 | 1987 { |
1988 tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich */ | |
1989 tz->tz_dsttime = tb.dstflag; /* type of dst correction */ | |
1990 } | |
1991 } | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1992 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1993 /* ------------------------------------------------------------------------- */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1994 /* IO support and wrapper functions for W32 API. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1995 /* ------------------------------------------------------------------------- */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1996 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1997 /* Place a wrapper around the MSVC version of ctime. It returns NULL |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1998 on network directories, so we handle that case here. |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1999 (Ulrich Leodolter, 1/11/95). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2000 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2001 sys_ctime (const time_t *t) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2002 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2003 char *str = (char *) ctime (t); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2004 return (str ? str : "Sun Jan 01 00:00:00 1970"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2005 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2006 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2007 /* Emulate sleep...we could have done this with a define, but that |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2008 would necessitate including windows.h in the files that used it. |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2009 This is much easier. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2010 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2011 sys_sleep (int seconds) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2012 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2013 Sleep (seconds * 1000); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2014 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2015 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2016 /* Internal MSVC functions for low-level descriptor munging */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2017 extern int __cdecl _set_osfhnd (int fd, long h); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2018 extern int __cdecl _free_osfhnd (int fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2019 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2020 /* parallel array of private info on file handles */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2021 filedesc fd_info [ MAXDESC ]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2022 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2023 typedef struct volume_info_data { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2024 struct volume_info_data * next; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2025 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2026 /* time when info was obtained */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2027 DWORD timestamp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2028 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2029 /* actual volume info */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2030 char * root_dir; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2031 DWORD serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2032 DWORD maxcomp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2033 DWORD flags; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2034 char * name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2035 char * type; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2036 } volume_info_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2037 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2038 /* Global referenced by various functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2039 static volume_info_data volume_info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2040 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2041 /* Vector to indicate which drives are local and fixed (for which cached |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2042 data never expires). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2043 static BOOL fixed_drives[26]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2044 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2045 /* Consider cached volume information to be stale if older than 10s, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2046 at least for non-local drives. Info for fixed drives is never stale. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2047 #define DRIVE_INDEX( c ) ( (c) <= 'Z' ? (c) - 'A' : (c) - 'a' ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2048 #define VOLINFO_STILL_VALID( root_dir, info ) \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2049 ( ( isalpha (root_dir[0]) && \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2050 fixed_drives[ DRIVE_INDEX (root_dir[0]) ] ) \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2051 || GetTickCount () - info->timestamp < 10000 ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2052 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2053 /* Cache support functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2054 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2055 /* Simple linked list with linear search is sufficient. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2056 static volume_info_data *volume_cache = NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2057 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2058 static volume_info_data * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2059 lookup_volume_info (char * root_dir) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2060 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2061 volume_info_data * info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2062 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2063 for (info = volume_cache; info; info = info->next) |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
2064 if (xstrcasecmp (info->root_dir, root_dir) == 0) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2065 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2066 return info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2067 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2068 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2069 static void |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2070 add_volume_info (char * root_dir, volume_info_data * info) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2071 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2072 info->root_dir = xstrdup (root_dir); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2073 info->next = volume_cache; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2074 volume_cache = info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2075 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2076 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2077 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2078 /* Wrapper for GetVolumeInformation, which uses caching to avoid |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2079 performance penalty (~2ms on 486 for local drives, 7.5ms for local |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2080 cdrom drive, ~5-10ms or more for remote drives on LAN). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2081 volume_info_data * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2082 GetCachedVolumeInformation (char * root_dir) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2083 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2084 volume_info_data * info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2085 char default_root[ MAX_PATH ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2086 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2087 /* NULL for root_dir means use root from current directory. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2088 if (root_dir == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2089 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2090 if (GetCurrentDirectory (MAX_PATH, default_root) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2091 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2092 parse_root (default_root, &root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2093 *root_dir = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2094 root_dir = default_root; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2095 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2096 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2097 /* Local fixed drives can be cached permanently. Removable drives |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2098 cannot be cached permanently, since the volume name and serial |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2099 number (if nothing else) can change. Remote drives should be |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2100 treated as if they are removable, since there is no sure way to |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2101 tell whether they are or not. Also, the UNC association of drive |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2102 letters mapped to remote volumes can be changed at any time (even |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2103 by other processes) without notice. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2104 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2105 As a compromise, so we can benefit from caching info for remote |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2106 volumes, we use a simple expiry mechanism to invalidate cache |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2107 entries that are more than ten seconds old. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2108 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2109 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2110 /* No point doing this, because WNetGetConnection is even slower than |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2111 GetVolumeInformation, consistently taking ~50ms on a 486 (FWIW, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2112 GetDriveType is about the only call of this type which does not |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2113 involve network access, and so is extremely quick). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2114 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2115 /* Map drive letter to UNC if remote. */ |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
2116 if (isalpha (root_dir[0]) && !fixed[DRIVE_INDEX (root_dir[0])]) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2117 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2118 char remote_name[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2119 char drive[3] = { root_dir[0], ':' }; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2120 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2121 if (WNetGetConnection (drive, remote_name, sizeof (remote_name)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2122 == NO_ERROR) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2123 /* do something */ ; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2124 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2125 #endif |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2126 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2127 info = lookup_volume_info (root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2128 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2129 if (info == NULL || ! VOLINFO_STILL_VALID (root_dir, info)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2130 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2131 char name[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2132 DWORD serialnum; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2133 DWORD maxcomp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2134 DWORD flags; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2135 char type[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2136 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2137 /* Info is not cached, or is stale. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2138 if (!GetVolumeInformation (root_dir, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2139 name, sizeof (name), |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2140 &serialnum, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2141 &maxcomp, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2142 &flags, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2143 type, sizeof (type))) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2144 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2145 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2146 /* Cache the volume information for future use, overwriting existing |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2147 entry if present. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2148 if (info == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2149 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2150 info = (volume_info_data *) xmalloc (sizeof (volume_info_data)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2151 add_volume_info (root_dir, info); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2152 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2153 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2154 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2155 xfree (info->name); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2156 xfree (info->type); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2157 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2158 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2159 info->name = xstrdup (name); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2160 info->serialnum = serialnum; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2161 info->maxcomp = maxcomp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2162 info->flags = flags; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2163 info->type = xstrdup (type); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2164 info->timestamp = GetTickCount (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2165 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2166 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2167 return info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2168 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2169 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2170 /* Get information on the volume where name is held; set path pointer to |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2171 start of pathname in name (past UNC header\volume header if present). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2172 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2173 get_volume_info (const char * name, const char ** pPath) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2174 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2175 char temp[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2176 char *rootname = NULL; /* default to current volume */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2177 volume_info_data * info; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2178 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2179 if (name == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2180 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2181 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2182 /* find the root name of the volume if given */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2183 if (isalpha (name[0]) && name[1] == ':') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2184 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2185 rootname = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2186 temp[0] = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2187 temp[1] = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2188 temp[2] = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2189 temp[3] = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2190 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2191 else if (IS_DIRECTORY_SEP (name[0]) && IS_DIRECTORY_SEP (name[1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2192 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2193 char *str = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2194 int slashes = 4; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2195 rootname = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2196 do |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2197 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2198 if (IS_DIRECTORY_SEP (*name) && --slashes == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2199 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2200 *str++ = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2201 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2202 while ( *name ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2203 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2204 *str++ = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2205 *str = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2206 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2207 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2208 if (pPath) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2209 *pPath = name; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2210 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2211 info = GetCachedVolumeInformation (rootname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2212 if (info != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2213 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2214 /* Set global referenced by other functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2215 volume_info = *info; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2216 return TRUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2217 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2218 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2219 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2220 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2221 /* Determine if volume is FAT format (ie. only supports short 8.3 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2222 names); also set path pointer to start of pathname in name. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2223 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2224 is_fat_volume (const char * name, const char ** pPath) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2225 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2226 if (get_volume_info (name, pPath)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2227 return (volume_info.maxcomp == 12); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2228 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2229 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2230 |
80030
6b3001cc9ca9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
79759
diff
changeset
|
2231 /* Map filename to a valid 8.3 name if necessary. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2232 const char * |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2233 map_w32_filename (const char * name, const char ** pPath) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2234 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2235 static char shortname[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2236 char * str = shortname; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2237 char c; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2238 char * path; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2239 const char * save_name = name; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2240 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2241 if (strlen (name) >= MAX_PATH) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2242 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2243 /* Return a filename which will cause callers to fail. */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2244 strcpy (shortname, "?"); |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2245 return shortname; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2246 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
2247 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2248 if (is_fat_volume (name, (const char **)&path)) /* truncate to 8.3 */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2249 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2250 register int left = 8; /* maximum number of chars in part */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2251 register int extn = 0; /* extension added? */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2252 register int dots = 2; /* maximum number of dots allowed */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2253 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2254 while (name < path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2255 *str++ = *name++; /* skip past UNC header */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2256 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2257 while ((c = *name++)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2258 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2259 switch ( c ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2260 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2261 case '\\': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2262 case '/': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2263 *str++ = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2264 extn = 0; /* reset extension flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2265 dots = 2; /* max 2 dots */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2266 left = 8; /* max length 8 for main part */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2267 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2268 case ':': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2269 *str++ = ':'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2270 extn = 0; /* reset extension flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2271 dots = 2; /* max 2 dots */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2272 left = 8; /* max length 8 for main part */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2273 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2274 case '.': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2275 if ( dots ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2276 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2277 /* Convert path components of the form .xxx to _xxx, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2278 but leave . and .. as they are. This allows .emacs |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2279 to be read as _emacs, for example. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2280 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2281 if (! *name || |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2282 *name == '.' || |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2283 IS_DIRECTORY_SEP (*name)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2284 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2285 *str++ = '.'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2286 dots--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2287 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2288 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2289 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2290 *str++ = '_'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2291 left--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2292 dots = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2293 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2294 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2295 else if ( !extn ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2296 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2297 *str++ = '.'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2298 extn = 1; /* we've got an extension */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2299 left = 3; /* 3 chars in extension */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2300 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2301 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2302 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2303 /* any embedded dots after the first are converted to _ */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2304 *str++ = '_'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2305 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2306 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2307 case '~': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2308 case '#': /* don't lose these, they're important */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2309 if ( ! left ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2310 str[-1] = c; /* replace last character of part */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2311 /* FALLTHRU */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2312 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2313 if ( left ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2314 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2315 *str++ = tolower (c); /* map to lower case (looks nicer) */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2316 left--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2317 dots = 0; /* started a path component */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2318 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2319 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2320 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2321 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2322 *str = '\0'; |
15213
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
2323 } |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
2324 else |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
2325 { |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
2326 strcpy (shortname, name); |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
2327 unixtodos_filename (shortname); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2328 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2329 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2330 if (pPath) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2331 *pPath = shortname + (path - save_name); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2332 |
15213
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
2333 return shortname; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2334 } |
11384 | 2335 |
22363 | 2336 static int |
2337 is_exec (const char * name) | |
2338 { | |
2339 char * p = strrchr (name, '.'); | |
2340 return | |
2341 (p != NULL | |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
2342 && (xstrcasecmp (p, ".exe") == 0 || |
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
2343 xstrcasecmp (p, ".com") == 0 || |
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
2344 xstrcasecmp (p, ".bat") == 0 || |
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
2345 xstrcasecmp (p, ".cmd") == 0)); |
22363 | 2346 } |
2347 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2348 /* Emulate the Unix directory procedures opendir, closedir, |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2349 and readdir. We can't use the procedures supplied in sysdep.c, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2350 so we provide them here. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2351 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2352 struct direct dir_static; /* simulated directory contents */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2353 static HANDLE dir_find_handle = INVALID_HANDLE_VALUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2354 static int dir_is_fat; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2355 static char dir_pathname[MAXPATHLEN+1]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2356 static WIN32_FIND_DATA dir_find_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2357 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2358 /* Support shares on a network resource as subdirectories of a read-only |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2359 root directory. */ |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2360 static HANDLE wnet_enum_handle = INVALID_HANDLE_VALUE; |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
2361 HANDLE open_unc_volume (const char *); |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2362 char *read_unc_volume (HANDLE, char *, int); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2363 void close_unc_volume (HANDLE); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2364 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2365 DIR * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2366 opendir (char *filename) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2367 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2368 DIR *dirp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2369 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2370 /* Opening is done by FindFirstFile. However, a read is inherent to |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2371 this operation, so we defer the open until read time. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2372 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2373 if (dir_find_handle != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2374 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2375 if (wnet_enum_handle != INVALID_HANDLE_VALUE) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2376 return NULL; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2377 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2378 if (is_unc_volume (filename)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2379 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2380 wnet_enum_handle = open_unc_volume (filename); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2381 if (wnet_enum_handle == INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2382 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2383 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2384 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2385 if (!(dirp = (DIR *) malloc (sizeof (DIR)))) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2386 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2387 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2388 dirp->dd_fd = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2389 dirp->dd_loc = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2390 dirp->dd_size = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2391 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2392 strncpy (dir_pathname, map_w32_filename (filename, NULL), MAXPATHLEN); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2393 dir_pathname[MAXPATHLEN] = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2394 dir_is_fat = is_fat_volume (filename, NULL); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2395 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2396 return dirp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2397 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2398 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2399 void |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2400 closedir (DIR *dirp) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2401 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2402 /* If we have a find-handle open, close it. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2403 if (dir_find_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2404 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2405 FindClose (dir_find_handle); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2406 dir_find_handle = INVALID_HANDLE_VALUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2407 } |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2408 else if (wnet_enum_handle != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2409 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2410 close_unc_volume (wnet_enum_handle); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2411 wnet_enum_handle = INVALID_HANDLE_VALUE; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2412 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2413 xfree ((char *) dirp); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2414 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2415 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2416 struct direct * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2417 readdir (DIR *dirp) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2418 { |
80376
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2419 int downcase = !NILP (Vw32_downcase_file_names); |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2420 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2421 if (wnet_enum_handle != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2422 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2423 if (!read_unc_volume (wnet_enum_handle, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2424 dir_find_data.cFileName, |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2425 MAX_PATH)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2426 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2427 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2428 /* If we aren't dir_finding, do a find-first, otherwise do a find-next. */ |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2429 else if (dir_find_handle == INVALID_HANDLE_VALUE) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2430 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2431 char filename[MAXNAMLEN + 3]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2432 int ln; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2433 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2434 strcpy (filename, dir_pathname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2435 ln = strlen (filename) - 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2436 if (!IS_DIRECTORY_SEP (filename[ln])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2437 strcat (filename, "\\"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2438 strcat (filename, "*"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2439 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2440 dir_find_handle = FindFirstFile (filename, &dir_find_data); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2441 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2442 if (dir_find_handle == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2443 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2444 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2445 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2446 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2447 if (!FindNextFile (dir_find_handle, &dir_find_data)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2448 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2449 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2450 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2451 /* Emacs never uses this value, so don't bother making it match |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2452 value returned by stat(). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2453 dir_static.d_ino = 1; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2454 |
93142
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2455 strcpy (dir_static.d_name, dir_find_data.cFileName); |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2456 |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2457 /* If the file name in cFileName[] includes `?' characters, it means |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2458 the original file name used characters that cannot be represented |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2459 by the current ANSI codepage. To avoid total lossage, retrieve |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2460 the short 8+3 alias of the long file name. */ |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2461 if (_mbspbrk (dir_static.d_name, "?")) |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2462 { |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2463 strcpy (dir_static.d_name, dir_find_data.cAlternateFileName); |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2464 downcase = 1; /* 8+3 aliases are returned in all caps */ |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2465 } |
e1c95382ef7e
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
92148
diff
changeset
|
2466 dir_static.d_namlen = strlen (dir_static.d_name); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2467 dir_static.d_reclen = sizeof (struct direct) - MAXNAMLEN + 3 + |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2468 dir_static.d_namlen - dir_static.d_namlen % 4; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2469 |
80376
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2470 /* If the file name in cFileName[] includes `?' characters, it means |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2471 the original file name used characters that cannot be represented |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2472 by the current ANSI codepage. To avoid total lossage, retrieve |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2473 the short 8+3 alias of the long file name. */ |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2474 if (_mbspbrk (dir_find_data.cFileName, "?")) |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2475 { |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2476 strcpy (dir_static.d_name, dir_find_data.cAlternateFileName); |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2477 /* 8+3 aliases are returned in all caps, which could break |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2478 various alists that look at filenames' extensions. */ |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2479 downcase = 1; |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2480 } |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2481 else |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2482 strcpy (dir_static.d_name, dir_find_data.cFileName); |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2483 dir_static.d_namlen = strlen (dir_static.d_name); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2484 if (dir_is_fat) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2485 _strlwr (dir_static.d_name); |
80376
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
2486 else if (downcase) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2487 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2488 register char *p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2489 for (p = dir_static.d_name; *p; p++) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2490 if (*p >= 'a' && *p <= 'z') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2491 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2492 if (!*p) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2493 _strlwr (dir_static.d_name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2494 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2495 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2496 return &dir_static; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2497 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2498 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2499 HANDLE |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
2500 open_unc_volume (const char *path) |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2501 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2502 NETRESOURCE nr; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2503 HANDLE henum; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2504 int result; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2505 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2506 nr.dwScope = RESOURCE_GLOBALNET; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2507 nr.dwType = RESOURCETYPE_DISK; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2508 nr.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2509 nr.dwUsage = RESOURCEUSAGE_CONTAINER; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2510 nr.lpLocalName = NULL; |
63020
92ecd695d7c1
(gettimeofday): Use struct _timeb, not struct timeb.
Eli Zaretskii <eliz@gnu.org>
parents:
60092
diff
changeset
|
2511 nr.lpRemoteName = (LPSTR)map_w32_filename (path, NULL); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2512 nr.lpComment = NULL; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2513 nr.lpProvider = NULL; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2514 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
2515 result = WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_DISK, |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
2516 RESOURCEUSAGE_CONNECTABLE, &nr, &henum); |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2517 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2518 if (result == NO_ERROR) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2519 return henum; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2520 else |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2521 return INVALID_HANDLE_VALUE; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2522 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2523 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2524 char * |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2525 read_unc_volume (HANDLE henum, char *readbuf, int size) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2526 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2527 DWORD count; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2528 int result; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
2529 DWORD bufsize = 512; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2530 char *buffer; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2531 char *ptr; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2532 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2533 count = 1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2534 buffer = alloca (bufsize); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2535 result = WNetEnumResource (wnet_enum_handle, &count, buffer, &bufsize); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2536 if (result != NO_ERROR) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2537 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2538 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2539 /* WNetEnumResource returns \\resource\share...skip forward to "share". */ |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2540 ptr = ((LPNETRESOURCE) buffer)->lpRemoteName; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2541 ptr += 2; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2542 while (*ptr && !IS_DIRECTORY_SEP (*ptr)) ptr++; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2543 ptr++; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2544 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2545 strncpy (readbuf, ptr, size); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2546 return readbuf; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2547 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2548 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2549 void |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2550 close_unc_volume (HANDLE henum) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2551 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2552 if (henum != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2553 WNetCloseEnum (henum); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2554 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2555 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2556 DWORD |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
2557 unc_volume_file_attributes (const char *path) |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2558 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2559 HANDLE henum; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2560 DWORD attrs; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2561 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2562 henum = open_unc_volume (path); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2563 if (henum == INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2564 return -1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2565 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2566 attrs = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2567 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2568 close_unc_volume (henum); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2569 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2570 return attrs; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2571 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2572 |
87985
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2573 /* Ensure a network connection is authenticated. */ |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2574 static void |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2575 logon_network_drive (const char *path) |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2576 { |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2577 NETRESOURCE resource; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2578 char share[MAX_PATH]; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2579 int i, n_slashes; |
93973
40f40216ff24
(logon_network_drive): Also logon to remote drives that
Jason Rumney <jasonr@gnu.org>
parents:
93759
diff
changeset
|
2580 char drive[4]; |
103859
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2581 UINT drvtype; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2582 |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2583 if (IS_DIRECTORY_SEP (path[0]) && IS_DIRECTORY_SEP (path[1])) |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2584 drvtype = DRIVE_REMOTE; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2585 else if (path[0] == '\0' || path[1] != ':') |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2586 drvtype = GetDriveType (NULL); |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2587 else |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2588 { |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2589 drive[0] = path[0]; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2590 drive[1] = ':'; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2591 drive[2] = '\\'; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2592 drive[3] = '\0'; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2593 drvtype = GetDriveType (drive); |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2594 } |
87985
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2595 |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2596 /* Only logon to networked drives. */ |
103859
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
2597 if (drvtype != DRIVE_REMOTE) |
87985
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2598 return; |
93973
40f40216ff24
(logon_network_drive): Also logon to remote drives that
Jason Rumney <jasonr@gnu.org>
parents:
93759
diff
changeset
|
2599 |
87985
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2600 n_slashes = 2; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2601 strncpy (share, path, MAX_PATH); |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2602 /* Truncate to just server and share name. */ |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2603 for (i = 2; i < MAX_PATH; i++) |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2604 { |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2605 if (IS_DIRECTORY_SEP (share[i]) && ++n_slashes > 3) |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2606 { |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2607 share[i] = '\0'; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2608 break; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2609 } |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2610 } |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2611 |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2612 resource.dwType = RESOURCETYPE_DISK; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2613 resource.lpLocalName = NULL; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2614 resource.lpRemoteName = share; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2615 resource.lpProvider = NULL; |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2616 |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2617 WNetAddConnection2 (&resource, NULL, NULL, CONNECT_INTERACTIVE); |
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
2618 } |
9803 | 2619 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2620 /* Shadow some MSVC runtime functions to map requests for long filenames |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2621 to reasonable short names if necessary. This was originally added to |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2622 permit running Emacs on NT 3.1 on a FAT partition, which doesn't support |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2623 long file names. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2624 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2625 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2626 sys_access (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2627 { |
22363 | 2628 DWORD attributes; |
2629 | |
2630 /* MSVC implementation doesn't recognize D_OK. */ | |
2631 path = map_w32_filename (path, NULL); | |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2632 if (is_unc_volume (path)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2633 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2634 attributes = unc_volume_file_attributes (path); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2635 if (attributes == -1) { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2636 errno = EACCES; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2637 return -1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2638 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2639 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2640 else if ((attributes = GetFileAttributes (path)) == -1) |
22363 | 2641 { |
2642 /* Should try mapping GetLastError to errno; for now just indicate | |
2643 that path doesn't exist. */ | |
2644 errno = EACCES; | |
2645 return -1; | |
2646 } | |
2647 if ((mode & X_OK) != 0 && !is_exec (path)) | |
2648 { | |
2649 errno = EACCES; | |
2650 return -1; | |
2651 } | |
2652 if ((mode & W_OK) != 0 && (attributes & FILE_ATTRIBUTE_READONLY) != 0) | |
2653 { | |
2654 errno = EACCES; | |
2655 return -1; | |
2656 } | |
2657 if ((mode & D_OK) != 0 && (attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) | |
2658 { | |
2659 errno = EACCES; | |
2660 return -1; | |
2661 } | |
2662 return 0; | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2663 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2664 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2665 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2666 sys_chdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2667 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2668 return _chdir (map_w32_filename (path, NULL)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2669 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2670 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2671 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2672 sys_chmod (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2673 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2674 return _chmod (map_w32_filename (path, NULL), mode); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2675 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2676 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2677 int |
63744 | 2678 sys_chown (const char *path, uid_t owner, gid_t group) |
2679 { | |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
2680 if (sys_chmod (path, S_IREAD) == -1) /* check if file exists */ |
63744 | 2681 return -1; |
2682 return 0; | |
2683 } | |
2684 | |
2685 int | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2686 sys_creat (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2687 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2688 return _creat (map_w32_filename (path, NULL), mode); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2689 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2690 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2691 FILE * |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
2692 sys_fopen (const char * path, const char * mode) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2693 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2694 int fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2695 int oflag; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2696 const char * mode_save = mode; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2697 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2698 /* Force all file handles to be non-inheritable. This is necessary to |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2699 ensure child processes don't unwittingly inherit handles that might |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2700 prevent future file access. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2701 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2702 if (mode[0] == 'r') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2703 oflag = O_RDONLY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2704 else if (mode[0] == 'w' || mode[0] == 'a') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2705 oflag = O_WRONLY | O_CREAT | O_TRUNC; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2706 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2707 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2708 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2709 /* Only do simplistic option parsing. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2710 while (*++mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2711 if (mode[0] == '+') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2712 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2713 oflag &= ~(O_RDONLY | O_WRONLY); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2714 oflag |= O_RDWR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2715 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2716 else if (mode[0] == 'b') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2717 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2718 oflag &= ~O_TEXT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2719 oflag |= O_BINARY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2720 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2721 else if (mode[0] == 't') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2722 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2723 oflag &= ~O_BINARY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2724 oflag |= O_TEXT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2725 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2726 else break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2727 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2728 fd = _open (map_w32_filename (path, NULL), oflag | _O_NOINHERIT, 0644); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2729 if (fd < 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2730 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2731 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2732 return _fdopen (fd, mode_save); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2733 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2734 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2735 /* This only works on NTFS volumes, but is useful to have. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2736 int |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2737 sys_link (const char * old, const char * new) |
9803 | 2738 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2739 HANDLE fileh; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2740 int result = -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2741 char oldname[MAX_PATH], newname[MAX_PATH]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2742 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2743 if (old == NULL || new == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2744 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2745 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2746 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2747 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2748 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2749 strcpy (oldname, map_w32_filename (old, NULL)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2750 strcpy (newname, map_w32_filename (new, NULL)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2751 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2752 fileh = CreateFile (oldname, 0, 0, NULL, OPEN_EXISTING, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2753 FILE_FLAG_BACKUP_SEMANTICS, NULL); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2754 if (fileh != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2755 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2756 int wlen; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2757 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2758 /* Confusingly, the "alternate" stream name field does not apply |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2759 when restoring a hard link, and instead contains the actual |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2760 stream data for the link (ie. the name of the link to create). |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2761 The WIN32_STREAM_ID structure before the cStreamName field is |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2762 the stream header, which is then immediately followed by the |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2763 stream data. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2764 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2765 struct { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2766 WIN32_STREAM_ID wid; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2767 WCHAR wbuffer[MAX_PATH]; /* extra space for link name */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2768 } data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2769 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2770 wlen = MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, newname, -1, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2771 data.wid.cStreamName, MAX_PATH); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2772 if (wlen > 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2773 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2774 LPVOID context = NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2775 DWORD wbytes = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2776 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2777 data.wid.dwStreamId = BACKUP_LINK; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2778 data.wid.dwStreamAttributes = 0; |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
2779 data.wid.Size.LowPart = wlen * sizeof (WCHAR); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2780 data.wid.Size.HighPart = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2781 data.wid.dwStreamNameSize = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2782 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2783 if (BackupWrite (fileh, (LPBYTE)&data, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2784 offsetof (WIN32_STREAM_ID, cStreamName) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2785 + data.wid.Size.LowPart, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2786 &wbytes, FALSE, FALSE, &context) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2787 && BackupWrite (fileh, NULL, 0, &wbytes, TRUE, FALSE, &context)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2788 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2789 /* succeeded */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2790 result = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2791 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2792 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2793 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2794 /* Should try mapping GetLastError to errno; for now just |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2795 indicate a general error (eg. links not supported). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2796 errno = EINVAL; // perhaps EMLINK? |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2797 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2798 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2799 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2800 CloseHandle (fileh); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2801 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2802 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2803 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2804 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2805 return result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2806 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2807 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2808 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2809 sys_mkdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2810 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2811 return _mkdir (map_w32_filename (path, NULL)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2812 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2813 |
15354
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2814 /* Because of long name mapping issues, we need to implement this |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2815 ourselves. Also, MSVC's _mktemp returns NULL when it can't generate |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2816 a unique name, instead of setting the input template to an empty |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2817 string. |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2818 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2819 Standard algorithm seems to be use pid or tid with a letter on the |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2820 front (in place of the 6 X's) and cycle through the letters to find a |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2821 unique name. We extend that to allow any reasonable character as the |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2822 first of the 6 X's. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2823 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2824 sys_mktemp (char * template) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2825 { |
15354
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2826 char * p; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2827 int i; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2828 unsigned uid = GetCurrentThreadId (); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2829 static char first_char[] = "abcdefghijklmnopqrstuvwyz0123456789!%-_@#"; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2830 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2831 if (template == NULL) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2832 return NULL; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2833 p = template + strlen (template); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2834 i = 5; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2835 /* replace up to the last 5 X's with uid in decimal */ |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2836 while (--p >= template && p[0] == 'X' && --i >= 0) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2837 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2838 p[0] = '0' + uid % 10; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2839 uid /= 10; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2840 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2841 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2842 if (i < 0 && p[0] == 'X') |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2843 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2844 i = 0; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2845 do |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2846 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2847 int save_errno = errno; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2848 p[0] = first_char[i]; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2849 if (sys_access (template, 0) < 0) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2850 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2851 errno = save_errno; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2852 return template; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2853 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2854 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2855 while (++i < sizeof (first_char)); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2856 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2857 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2858 /* Template is badly formed or else we can't generate a unique name, |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2859 so return empty string */ |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2860 template[0] = 0; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2861 return template; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2862 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2863 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2864 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2865 sys_open (const char * path, int oflag, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2866 { |
37291
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2867 const char* mpath = map_w32_filename (path, NULL); |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2868 /* Try to open file without _O_CREAT, to be able to write to hidden |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2869 and system files. Force all file handles to be |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2870 non-inheritable. */ |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2871 int res = _open (mpath, (oflag & ~_O_CREAT) | _O_NOINHERIT, mode); |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2872 if (res >= 0) |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2873 return res; |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2874 return _open (mpath, oflag | _O_NOINHERIT, mode); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2875 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2876 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2877 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2878 sys_rename (const char * oldname, const char * newname) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2879 { |
34644
69143373d98d
(sys_rename): Only check errno against EEXIST, and not
Andrew Innes <andrewi@gnu.org>
parents:
33869
diff
changeset
|
2880 BOOL result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2881 char temp[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2882 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
2883 /* MoveFile on Windows 95 doesn't correctly change the short file name |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2884 alias in a number of circumstances (it is not easy to predict when |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2885 just by looking at oldname and newname, unfortunately). In these |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2886 cases, renaming through a temporary name avoids the problem. |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2887 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
2888 A second problem on Windows 95 is that renaming through a temp name when |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2889 newname is uppercase fails (the final long name ends up in |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2890 lowercase, although the short alias might be uppercase) UNLESS the |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2891 long temp name is not 8.3. |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2892 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
2893 So, on Windows 95 we always rename through a temp name, and we make sure |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2894 the temp name has a long extension to ensure correct renaming. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2895 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2896 strcpy (temp, map_w32_filename (oldname, NULL)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2897 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2898 if (os_subtype == OS_WIN95) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2899 { |
22363 | 2900 char * o; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2901 char * p; |
22363 | 2902 int i = 0; |
2903 | |
2904 oldname = map_w32_filename (oldname, NULL); | |
2905 if (o = strrchr (oldname, '\\')) | |
2906 o++; | |
2907 else | |
2908 o = (char *) oldname; | |
9803 | 2909 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2910 if (p = strrchr (temp, '\\')) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2911 p++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2912 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2913 p = temp; |
22363 | 2914 |
2915 do | |
2916 { | |
2917 /* Force temp name to require a manufactured 8.3 alias - this | |
2918 seems to make the second rename work properly. */ | |
22501
d2edb98d0fa5
(sys_rename): On some network drives, rename fails with
Richard M. Stallman <rms@gnu.org>
parents:
22430
diff
changeset
|
2919 sprintf (p, "_.%s.%u", o, i); |
22363 | 2920 i++; |
22430
921311b43bf4
(sys_rename): Don't examine errno if rename didn't fail.
Richard M. Stallman <rms@gnu.org>
parents:
22363
diff
changeset
|
2921 result = rename (oldname, temp); |
22363 | 2922 } |
2923 /* This loop must surely terminate! */ | |
34644
69143373d98d
(sys_rename): Only check errno against EEXIST, and not
Andrew Innes <andrewi@gnu.org>
parents:
33869
diff
changeset
|
2924 while (result < 0 && errno == EEXIST); |
22430
921311b43bf4
(sys_rename): Don't examine errno if rename didn't fail.
Richard M. Stallman <rms@gnu.org>
parents:
22363
diff
changeset
|
2925 if (result < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2926 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2927 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2928 |
96376
c3309dba6542
American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents:
95917
diff
changeset
|
2929 /* Emulate Unix behavior - newname is deleted if it already exists |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
2930 (at least if it is a file; don't do this for directories). |
22363 | 2931 |
2932 Since we mustn't do this if we are just changing the case of the | |
2933 file name (we would end up deleting the file we are trying to | |
2934 rename!), we let rename detect if the destination file already | |
2935 exists - that way we avoid the possible pitfalls of trying to | |
2936 determine ourselves whether two names really refer to the same | |
2937 file, which is not always possible in the general case. (Consider | |
2938 all the permutations of shared or subst'd drives, etc.) */ | |
2939 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2940 newname = map_w32_filename (newname, NULL); |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2941 result = rename (temp, newname); |
22363 | 2942 |
2943 if (result < 0 | |
34644
69143373d98d
(sys_rename): Only check errno against EEXIST, and not
Andrew Innes <andrewi@gnu.org>
parents:
33869
diff
changeset
|
2944 && errno == EEXIST |
22363 | 2945 && _chmod (newname, 0666) == 0 |
2946 && _unlink (newname) == 0) | |
2947 result = rename (temp, newname); | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2948 |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2949 return result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2950 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2951 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2952 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2953 sys_rmdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2954 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2955 return _rmdir (map_w32_filename (path, NULL)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2956 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2957 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2958 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2959 sys_unlink (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2960 { |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2961 path = map_w32_filename (path, NULL); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2962 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2963 /* On Unix, unlink works without write permission. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2964 _chmod (path, 0666); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2965 return _unlink (path); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2966 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2967 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2968 static FILETIME utc_base_ft; |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2969 static ULONGLONG utc_base; /* In 100ns units */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2970 static int init = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2971 |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2972 #define FILETIME_TO_U64(result, ft) \ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2973 do { \ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2974 ULARGE_INTEGER uiTemp; \ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2975 uiTemp.LowPart = (ft).dwLowDateTime; \ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2976 uiTemp.HighPart = (ft).dwHighDateTime; \ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2977 result = uiTemp.QuadPart; \ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2978 } while (0) |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2979 |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2980 static void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
2981 initialize_utc_base (void) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
2982 { |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2983 /* Determine the delta between 1-Jan-1601 and 1-Jan-1970. */ |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2984 SYSTEMTIME st; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2985 |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2986 st.wYear = 1970; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2987 st.wMonth = 1; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2988 st.wDay = 1; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2989 st.wHour = 0; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2990 st.wMinute = 0; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2991 st.wSecond = 0; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2992 st.wMilliseconds = 0; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2993 |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2994 SystemTimeToFileTime (&st, &utc_base_ft); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
2995 FILETIME_TO_U64 (utc_base, utc_base_ft); |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
2996 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
2997 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2998 static time_t |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2999 convert_time (FILETIME ft) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3000 { |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3001 ULONGLONG tmp; |
9803 | 3002 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3003 if (!init) |
9803 | 3004 { |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3005 initialize_utc_base(); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3006 init = 1; |
9803 | 3007 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3008 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3009 if (CompareFileTime (&ft, &utc_base_ft) < 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3010 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3011 |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3012 FILETIME_TO_U64 (tmp, ft); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3013 return (time_t) ((tmp - utc_base) / 10000000L); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3014 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3015 |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3016 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3017 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3018 convert_from_time_t (time_t time, FILETIME * pft) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3019 { |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3020 ULARGE_INTEGER tmp; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3021 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3022 if (!init) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3023 { |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3024 initialize_utc_base (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3025 init = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3026 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3027 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3028 /* time in 100ns units since 1-Jan-1601 */ |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3029 tmp.QuadPart = (ULONGLONG) time * 10000000L + utc_base; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3030 pft->dwHighDateTime = tmp.HighPart; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
3031 pft->dwLowDateTime = tmp.LowPart; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3032 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3033 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3034 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3035 /* No reason to keep this; faking inode values either by hashing or even |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3036 using the file index from GetInformationByHandle, is not perfect and |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3037 so by default Emacs doesn't use the inode values on Windows. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3038 Instead, we now determine file-truename correctly (except for |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3039 possible drive aliasing etc). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3040 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3041 /* Modified version of "PJW" algorithm (see the "Dragon" compiler book). */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3042 static unsigned |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3043 hashval (const unsigned char * str) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3044 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3045 unsigned h = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3046 while (*str) |
9803 | 3047 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3048 h = (h << 4) + *str++; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3049 h ^= (h >> 28); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3050 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3051 return h; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3052 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3053 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3054 /* Return the hash value of the canonical pathname, excluding the |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3055 drive/UNC header, to get a hopefully unique inode number. */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3056 static DWORD |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3057 generate_inode_val (const char * name) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3058 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3059 char fullname[ MAX_PATH ]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3060 char * p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3061 unsigned hash; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3062 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3063 /* Get the truly canonical filename, if it exists. (Note: this |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3064 doesn't resolve aliasing due to subst commands, or recognise hard |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3065 links. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3066 if (!w32_get_long_filename ((char *)name, fullname, MAX_PATH)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3067 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3068 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3069 parse_root (fullname, &p); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
3070 /* Normal W32 filesystems are still case insensitive. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3071 _strlwr (p); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3072 return hashval (p); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3073 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3074 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3075 #endif |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3076 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3077 static PSECURITY_DESCRIPTOR |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3078 get_file_security_desc (const char *fname) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3079 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3080 PSECURITY_DESCRIPTOR psd = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3081 DWORD sd_len, err; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3082 SECURITY_INFORMATION si = OWNER_SECURITY_INFORMATION |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3083 | GROUP_SECURITY_INFORMATION /* | DACL_SECURITY_INFORMATION */ ; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3084 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3085 if (!get_file_security (fname, si, psd, 0, &sd_len)) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3086 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3087 err = GetLastError (); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3088 if (err != ERROR_INSUFFICIENT_BUFFER) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3089 return NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3090 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3091 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3092 psd = xmalloc (sd_len); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3093 if (!get_file_security (fname, si, psd, sd_len, &sd_len)) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3094 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3095 xfree (psd); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3096 return NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3097 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3098 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3099 return psd; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3100 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3101 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3102 static DWORD |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3103 get_rid (PSID sid) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3104 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3105 unsigned n_subauthorities; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3106 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3107 /* Use the last sub-authority value of the RID, the relative |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3108 portion of the SID, as user/group ID. */ |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3109 n_subauthorities = *get_sid_sub_authority_count (sid); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3110 if (n_subauthorities < 1) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3111 return 0; /* the "World" RID */ |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3112 return *get_sid_sub_authority (sid, n_subauthorities - 1); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3113 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3114 |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3115 /* Caching SID and account values for faster lokup. */ |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3116 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3117 #ifdef __GNUC__ |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3118 # define FLEXIBLE_ARRAY_MEMBER |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3119 #else |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3120 # define FLEXIBLE_ARRAY_MEMBER 1 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3121 #endif |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3122 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3123 struct w32_id { |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3124 unsigned rid; |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3125 struct w32_id *next; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3126 char name[GNLEN+1]; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3127 unsigned char sid[FLEXIBLE_ARRAY_MEMBER]; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3128 }; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3129 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3130 static struct w32_id *w32_idlist; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3131 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3132 static int |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3133 w32_cached_id (PSID sid, unsigned *id, char *name) |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3134 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3135 struct w32_id *tail, *found; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3136 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3137 for (found = NULL, tail = w32_idlist; tail; tail = tail->next) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3138 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3139 if (equal_sid ((PSID)tail->sid, sid)) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3140 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3141 found = tail; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3142 break; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3143 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3144 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3145 if (found) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3146 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3147 *id = found->rid; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3148 strcpy (name, found->name); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3149 return 1; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3150 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3151 else |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3152 return 0; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3153 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3154 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3155 static void |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3156 w32_add_to_cache (PSID sid, unsigned id, char *name) |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3157 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3158 DWORD sid_len; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3159 struct w32_id *new_entry; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3160 |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3161 /* We don't want to leave behind stale cache from when Emacs was |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3162 dumped. */ |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3163 if (initialized) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3164 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3165 sid_len = get_length_sid (sid); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3166 new_entry = xmalloc (offsetof (struct w32_id, sid) + sid_len); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3167 if (new_entry) |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3168 { |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3169 new_entry->rid = id; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3170 strcpy (new_entry->name, name); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3171 copy_sid (sid_len, (PSID)new_entry->sid, sid); |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3172 new_entry->next = w32_idlist; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3173 w32_idlist = new_entry; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3174 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3175 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3176 } |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3177 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3178 #define UID 1 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3179 #define GID 2 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3180 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3181 static int |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3182 get_name_and_id (PSECURITY_DESCRIPTOR psd, const char *fname, |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3183 unsigned *id, char *nm, int what) |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3184 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3185 PSID sid = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3186 char machine[MAX_COMPUTERNAME_LENGTH+1]; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3187 BOOL dflt; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3188 SID_NAME_USE ignore; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3189 char name[UNLEN+1]; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3190 DWORD name_len = sizeof (name); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3191 char domain[1024]; |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
3192 DWORD domain_len = sizeof (domain); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3193 char *mp = NULL; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3194 int use_dflt = 0; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3195 int result; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3196 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3197 if (what == UID) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3198 result = get_security_descriptor_owner (psd, &sid, &dflt); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3199 else if (what == GID) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3200 result = get_security_descriptor_group (psd, &sid, &dflt); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3201 else |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3202 result = 0; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3203 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3204 if (!result || !is_valid_sid (sid)) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3205 use_dflt = 1; |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3206 else if (!w32_cached_id (sid, id, nm)) |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3207 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3208 /* If FNAME is a UNC, we need to lookup account on the |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3209 specified machine. */ |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3210 if (IS_DIRECTORY_SEP (fname[0]) && IS_DIRECTORY_SEP (fname[1]) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3211 && fname[2] != '\0') |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3212 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3213 const char *s; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3214 char *p; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3215 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3216 for (s = fname + 2, p = machine; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3217 *s && !IS_DIRECTORY_SEP (*s); s++, p++) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3218 *p = *s; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3219 *p = '\0'; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3220 mp = machine; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3221 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3222 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3223 if (!lookup_account_sid (mp, sid, name, &name_len, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3224 domain, &domain_len, &ignore) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3225 || name_len > UNLEN+1) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3226 use_dflt = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3227 else |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3228 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3229 *id = get_rid (sid); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3230 strcpy (nm, name); |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
3231 w32_add_to_cache (sid, *id, name); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3232 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3233 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3234 return use_dflt; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3235 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3236 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3237 static void |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3238 get_file_owner_and_group ( |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3239 PSECURITY_DESCRIPTOR psd, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3240 const char *fname, |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3241 struct stat *st) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3242 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3243 int dflt_usr = 0, dflt_grp = 0; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3244 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3245 if (!psd) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3246 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3247 dflt_usr = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3248 dflt_grp = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3249 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3250 else |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3251 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3252 if (get_name_and_id (psd, fname, &st->st_uid, st->st_uname, UID)) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3253 dflt_usr = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3254 if (get_name_and_id (psd, fname, &st->st_gid, st->st_gname, GID)) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3255 dflt_grp = 1; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3256 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3257 /* Consider files to belong to current user/group, if we cannot get |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3258 more accurate information. */ |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3259 if (dflt_usr) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3260 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3261 st->st_uid = dflt_passwd.pw_uid; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3262 strcpy (st->st_uname, dflt_passwd.pw_name); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3263 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3264 if (dflt_grp) |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3265 { |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3266 st->st_gid = dflt_passwd.pw_gid; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3267 strcpy (st->st_gname, dflt_group.gr_name); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3268 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3269 } |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3270 |
103859
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3271 /* Return non-zero if NAME is a potentially slow filesystem. */ |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3272 int |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3273 is_slow_fs (const char *name) |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3274 { |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3275 char drive_root[4]; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3276 UINT devtype; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3277 |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3278 if (IS_DIRECTORY_SEP (name[0]) && IS_DIRECTORY_SEP (name[1])) |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3279 devtype = DRIVE_REMOTE; /* assume UNC name is remote */ |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3280 else if (!(strlen (name) >= 2 && IS_DEVICE_SEP (name[1]))) |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3281 devtype = GetDriveType (NULL); /* use root of current drive */ |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3282 else |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3283 { |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3284 /* GetDriveType needs the root directory of the drive. */ |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3285 strncpy (drive_root, name, 2); |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3286 drive_root[2] = '\\'; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3287 drive_root[3] = '\0'; |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3288 devtype = GetDriveType (drive_root); |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3289 } |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3290 return !(devtype == DRIVE_FIXED || devtype == DRIVE_RAMDISK); |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3291 } |
fe78cff95301
(logon_network_drive): Don't assume PATH is an absolute file name.
Eli Zaretskii <eliz@gnu.org>
parents:
103811
diff
changeset
|
3292 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3293 /* MSVC stat function can't cope with UNC names and has other bugs, so |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3294 replace it with our own. This also allows us to calculate consistent |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3295 inode values without hacks in the main Emacs code. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3296 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3297 stat (const char * path, struct stat * buf) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3298 { |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3299 char *name, *r; |
97488
caf9103a3856
(stat): Only root directory passed to GetDriveType.
Eli Zaretskii <eliz@gnu.org>
parents:
97486
diff
changeset
|
3300 char drive_root[4]; |
caf9103a3856
(stat): Only root directory passed to GetDriveType.
Eli Zaretskii <eliz@gnu.org>
parents:
97486
diff
changeset
|
3301 UINT devtype; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3302 WIN32_FIND_DATA wfd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3303 HANDLE fh; |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3304 unsigned __int64 fake_inode; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3305 int permission; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3306 int len; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3307 int rootdir = FALSE; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3308 PSECURITY_DESCRIPTOR psd = NULL; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3309 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3310 if (path == NULL || buf == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3311 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3312 errno = EFAULT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3313 return -1; |
9803 | 3314 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3315 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
3316 name = (char *) map_w32_filename (path, &path); |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
3317 /* Must be valid filename, no wild cards or other invalid |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
3318 characters. We use _mbspbrk to support multibyte strings that |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
3319 might look to strpbrk as if they included literal *, ?, and other |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
3320 characters mentioned below that are disallowed by Windows |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
3321 filesystems. */ |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
3322 if (_mbspbrk (name, "*?|<>\"")) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3323 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3324 errno = ENOENT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3325 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3326 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3327 |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3328 /* If name is "c:/.." or "/.." then stat "c:/" or "/". */ |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3329 r = IS_DEVICE_SEP (name[1]) ? &name[2] : name; |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3330 if (IS_DIRECTORY_SEP (r[0]) && r[1] == '.' && r[2] == '.' && r[3] == '\0') |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3331 { |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3332 r[1] = r[2] = '\0'; |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3333 } |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
3334 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3335 /* Remove trailing directory separator, unless name is the root |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3336 directory of a drive or UNC volume in which case ensure there |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3337 is a trailing separator. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3338 len = strlen (name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3339 rootdir = (path >= name + len - 1 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3340 && (IS_DIRECTORY_SEP (*path) || *path == 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3341 name = strcpy (alloca (len + 2), name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3342 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3343 if (is_unc_volume (name)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3344 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3345 DWORD attrs = unc_volume_file_attributes (name); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3346 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3347 if (attrs == -1) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3348 return -1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3349 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3350 memset (&wfd, 0, sizeof (wfd)); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3351 wfd.dwFileAttributes = attrs; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3352 wfd.ftCreationTime = utc_base_ft; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3353 wfd.ftLastAccessTime = utc_base_ft; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3354 wfd.ftLastWriteTime = utc_base_ft; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3355 strcpy (wfd.cFileName, name); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3356 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
3357 else if (rootdir) |
9803 | 3358 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3359 if (!IS_DIRECTORY_SEP (name[len-1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3360 strcat (name, "\\"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3361 if (GetDriveType (name) < 2) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3362 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3363 errno = ENOENT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3364 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3365 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3366 memset (&wfd, 0, sizeof (wfd)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3367 wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3368 wfd.ftCreationTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3369 wfd.ftLastAccessTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3370 wfd.ftLastWriteTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3371 strcpy (wfd.cFileName, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3372 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3373 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3374 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3375 if (IS_DIRECTORY_SEP (name[len-1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3376 name[len - 1] = 0; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3377 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3378 /* (This is hacky, but helps when doing file completions on |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3379 network drives.) Optimize by using information available from |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3380 active readdir if possible. */ |
25193
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
3381 len = strlen (dir_pathname); |
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
3382 if (IS_DIRECTORY_SEP (dir_pathname[len-1])) |
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
3383 len--; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3384 if (dir_find_handle != INVALID_HANDLE_VALUE |
25193
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
3385 && strnicmp (name, dir_pathname, len) == 0 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3386 && IS_DIRECTORY_SEP (name[len]) |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
3387 && xstrcasecmp (name + len + 1, dir_static.d_name) == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3388 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3389 /* This was the last entry returned by readdir. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3390 wfd = dir_find_data; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3391 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3392 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3393 { |
88048
7c4da276fe17
(stat): Don't do a double check for networked drive.
Jason Rumney <jasonr@gnu.org>
parents:
87999
diff
changeset
|
3394 logon_network_drive (name); |
87985
f7a641e1f03d
(logon_network_drive): New function.
Jason Rumney <jasonr@gnu.org>
parents:
87649
diff
changeset
|
3395 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3396 fh = FindFirstFile (name, &wfd); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3397 if (fh == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3398 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3399 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3400 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3401 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3402 FindClose (fh); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3403 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3404 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3405 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3406 if (!(NILP (Vw32_get_true_file_attributes) |
103868 | 3407 || (EQ (Vw32_get_true_file_attributes, Qlocal) && is_slow_fs (name))) |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3408 /* No access rights required to get info. */ |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3409 && (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING, |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3410 FILE_FLAG_BACKUP_SEMANTICS, NULL)) |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3411 != INVALID_HANDLE_VALUE) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3412 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3413 /* This is more accurate in terms of gettting the correct number |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
3414 of links, but is quite slow (it is noticeable when Emacs is |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3415 making a list of file name completions). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3416 BY_HANDLE_FILE_INFORMATION info; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3417 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3418 if (GetFileInformationByHandle (fh, &info)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3419 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3420 buf->st_nlink = info.nNumberOfLinks; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3421 /* Might as well use file index to fake inode values, but this |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3422 is not guaranteed to be unique unless we keep a handle open |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3423 all the time (even then there are situations where it is |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3424 not unique). Reputedly, there are at most 48 bits of info |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3425 (on NTFS, presumably less on FAT). */ |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3426 fake_inode = info.nFileIndexHigh; |
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3427 fake_inode <<= 32; |
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3428 fake_inode += info.nFileIndexLow; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3429 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3430 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3431 { |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
3432 buf->st_nlink = 1; |
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
3433 fake_inode = 0; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3434 } |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
3435 |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3436 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3437 { |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3438 buf->st_mode = S_IFDIR; |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3439 } |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3440 else |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
3441 { |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3442 switch (GetFileType (fh)) |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3443 { |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3444 case FILE_TYPE_DISK: |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3445 buf->st_mode = S_IFREG; |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3446 break; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3447 case FILE_TYPE_PIPE: |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3448 buf->st_mode = S_IFIFO; |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3449 break; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3450 case FILE_TYPE_CHAR: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3451 case FILE_TYPE_UNKNOWN: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3452 default: |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3453 buf->st_mode = S_IFCHR; |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3454 } |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
3455 } |
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
3456 CloseHandle (fh); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3457 psd = get_file_security_desc (name); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3458 get_file_owner_and_group (psd, name, buf); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3459 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3460 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3461 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3462 /* Don't bother to make this information more accurate. */ |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3463 buf->st_mode = (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3464 S_IFDIR : S_IFREG; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3465 buf->st_nlink = 1; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3466 fake_inode = 0; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3467 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3468 get_file_owner_and_group (NULL, name, buf); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3469 } |
95481
4390d64d3328
Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents:
95277
diff
changeset
|
3470 xfree (psd); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3471 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3472 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3473 /* Not sure if there is any point in this. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3474 if (!NILP (Vw32_generate_fake_inodes)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3475 fake_inode = generate_inode_val (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3476 else if (fake_inode == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3477 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3478 /* For want of something better, try to make everything unique. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3479 static DWORD gen_num = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3480 fake_inode = ++gen_num; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3481 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3482 #endif |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3483 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3484 /* MSVC defines _ino_t to be short; other libc's might not. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3485 if (sizeof (buf->st_ino) == 2) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3486 buf->st_ino = fake_inode ^ (fake_inode >> 16); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3487 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3488 buf->st_ino = fake_inode; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3489 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
3490 /* volume_info is set indirectly by map_w32_filename */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3491 buf->st_dev = volume_info.serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3492 buf->st_rdev = volume_info.serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3493 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3494 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3495 buf->st_size = wfd.nFileSizeHigh; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3496 buf->st_size <<= 32; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3497 buf->st_size += wfd.nFileSizeLow; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3498 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3499 /* Convert timestamps to Unix format. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3500 buf->st_mtime = convert_time (wfd.ftLastWriteTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3501 buf->st_atime = convert_time (wfd.ftLastAccessTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3502 if (buf->st_atime == 0) buf->st_atime = buf->st_mtime; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3503 buf->st_ctime = convert_time (wfd.ftCreationTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3504 if (buf->st_ctime == 0) buf->st_ctime = buf->st_mtime; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3505 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3506 /* determine rwx permissions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3507 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3508 permission = S_IREAD; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3509 else |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3510 permission = S_IREAD | S_IWRITE; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3511 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3512 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3513 permission |= S_IEXEC; |
22363 | 3514 else if (is_exec (name)) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3515 permission |= S_IEXEC; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3516 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3517 buf->st_mode |= permission | (permission >> 3) | (permission >> 6); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3518 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3519 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3520 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3521 |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3522 /* Provide fstat and utime as well as stat for consistent handling of |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3523 file timestamps. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3524 int |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3525 fstat (int desc, struct stat * buf) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3526 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3527 HANDLE fh = (HANDLE) _get_osfhandle (desc); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3528 BY_HANDLE_FILE_INFORMATION info; |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3529 unsigned __int64 fake_inode; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3530 int permission; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3531 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3532 switch (GetFileType (fh) & ~FILE_TYPE_REMOTE) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3533 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3534 case FILE_TYPE_DISK: |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3535 buf->st_mode = S_IFREG; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3536 if (!GetFileInformationByHandle (fh, &info)) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3537 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3538 errno = EACCES; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3539 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3540 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3541 break; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3542 case FILE_TYPE_PIPE: |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3543 buf->st_mode = S_IFIFO; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3544 goto non_disk; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3545 case FILE_TYPE_CHAR: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3546 case FILE_TYPE_UNKNOWN: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3547 default: |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3548 buf->st_mode = S_IFCHR; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3549 non_disk: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3550 memset (&info, 0, sizeof (info)); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3551 info.dwFileAttributes = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3552 info.ftCreationTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3553 info.ftLastAccessTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3554 info.ftLastWriteTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3555 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3556 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3557 if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3558 buf->st_mode = S_IFDIR; |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3559 |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3560 buf->st_nlink = info.nNumberOfLinks; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3561 /* Might as well use file index to fake inode values, but this |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3562 is not guaranteed to be unique unless we keep a handle open |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3563 all the time (even then there are situations where it is |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3564 not unique). Reputedly, there are at most 48 bits of info |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
3565 (on NTFS, presumably less on FAT). */ |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3566 fake_inode = info.nFileIndexHigh; |
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3567 fake_inode <<= 32; |
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3568 fake_inode += info.nFileIndexLow; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3569 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3570 /* MSVC defines _ino_t to be short; other libc's might not. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3571 if (sizeof (buf->st_ino) == 2) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3572 buf->st_ino = fake_inode ^ (fake_inode >> 16); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3573 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3574 buf->st_ino = fake_inode; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3575 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3576 /* Consider files to belong to current user. |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3577 FIXME: this should use GetSecurityInfo API, but it is only |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3578 available for _WIN32_WINNT >= 0x501. */ |
94797
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
3579 buf->st_uid = dflt_passwd.pw_uid; |
89a5cb9cf680
Rename the_passwd_* to dflt_passwd_*.
Eli Zaretskii <eliz@gnu.org>
parents:
94293
diff
changeset
|
3580 buf->st_gid = dflt_passwd.pw_gid; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3581 strcpy (buf->st_uname, dflt_passwd.pw_name); |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3582 strcpy (buf->st_gname, dflt_group.gr_name); |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3583 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3584 buf->st_dev = info.dwVolumeSerialNumber; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3585 buf->st_rdev = info.dwVolumeSerialNumber; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3586 |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3587 buf->st_size = info.nFileSizeHigh; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3588 buf->st_size <<= 32; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
3589 buf->st_size += info.nFileSizeLow; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3590 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3591 /* Convert timestamps to Unix format. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3592 buf->st_mtime = convert_time (info.ftLastWriteTime); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3593 buf->st_atime = convert_time (info.ftLastAccessTime); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3594 if (buf->st_atime == 0) buf->st_atime = buf->st_mtime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3595 buf->st_ctime = convert_time (info.ftCreationTime); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3596 if (buf->st_ctime == 0) buf->st_ctime = buf->st_mtime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3597 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3598 /* determine rwx permissions */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3599 if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3600 permission = S_IREAD; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3601 else |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3602 permission = S_IREAD | S_IWRITE; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3603 |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3604 if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3605 permission |= S_IEXEC; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3606 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3607 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3608 #if 0 /* no way of knowing the filename */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3609 char * p = strrchr (name, '.'); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3610 if (p != NULL && |
95217
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
3611 (xstrcasecmp (p, ".exe") == 0 || |
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
3612 xstrcasecmp (p, ".com") == 0 || |
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
3613 xstrcasecmp (p, ".bat") == 0 || |
cb71cb48eb66
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
94963
diff
changeset
|
3614 xstrcasecmp (p, ".cmd") == 0)) |
93690
c9e7cd4c092d
(sys_chown, stat, fstat): Use S_* constants instead of _S_* ones, since we
Eli Zaretskii <eliz@gnu.org>
parents:
93142
diff
changeset
|
3615 permission |= S_IEXEC; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3616 #endif |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3617 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3618 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3619 buf->st_mode |= permission | (permission >> 3) | (permission >> 6); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3620 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3621 return 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3622 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3623 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3624 int |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3625 utime (const char *name, struct utimbuf *times) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3626 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3627 struct utimbuf deftime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3628 HANDLE fh; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3629 FILETIME mtime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3630 FILETIME atime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3631 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3632 if (times == NULL) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3633 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3634 deftime.modtime = deftime.actime = time (NULL); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3635 times = &deftime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3636 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3637 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3638 /* Need write access to set times. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3639 fh = CreateFile (name, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3640 0, OPEN_EXISTING, 0, NULL); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3641 if (fh) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3642 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3643 convert_from_time_t (times->actime, &atime); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3644 convert_from_time_t (times->modtime, &mtime); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3645 if (!SetFileTime (fh, NULL, &atime, &mtime)) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3646 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3647 CloseHandle (fh); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3648 errno = EACCES; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3649 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3650 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3651 CloseHandle (fh); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3652 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3653 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3654 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3655 errno = EINVAL; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3656 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3657 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3658 return 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3659 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
3660 |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3661 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3662 /* Support for browsing other processes and their attributes. See |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3663 process.c for the Lisp bindings. */ |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3664 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3665 /* Helper wrapper functions. */ |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3666 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
3667 HANDLE WINAPI create_toolhelp32_snapshot ( |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3668 DWORD Flags, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3669 DWORD Ignored) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3670 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3671 static CreateToolhelp32Snapshot_Proc s_pfn_Create_Toolhelp32_Snapshot = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3672 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3673 if (g_b_init_create_toolhelp32_snapshot == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3674 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3675 g_b_init_create_toolhelp32_snapshot = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3676 s_pfn_Create_Toolhelp32_Snapshot = (CreateToolhelp32Snapshot_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3677 GetProcAddress (GetModuleHandle ("kernel32.dll"), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3678 "CreateToolhelp32Snapshot"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3679 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3680 if (s_pfn_Create_Toolhelp32_Snapshot == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3681 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3682 return INVALID_HANDLE_VALUE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3683 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3684 return (s_pfn_Create_Toolhelp32_Snapshot (Flags, Ignored)); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3685 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3686 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
3687 BOOL WINAPI process32_first ( |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3688 HANDLE hSnapshot, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3689 LPPROCESSENTRY32 lppe) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3690 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3691 static Process32First_Proc s_pfn_Process32_First = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3692 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3693 if (g_b_init_process32_first == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3694 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3695 g_b_init_process32_first = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3696 s_pfn_Process32_First = (Process32First_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3697 GetProcAddress (GetModuleHandle ("kernel32.dll"), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3698 "Process32First"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3699 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3700 if (s_pfn_Process32_First == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3701 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3702 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3703 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3704 return (s_pfn_Process32_First (hSnapshot, lppe)); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3705 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3706 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
3707 BOOL WINAPI process32_next ( |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3708 HANDLE hSnapshot, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3709 LPPROCESSENTRY32 lppe) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3710 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3711 static Process32Next_Proc s_pfn_Process32_Next = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3712 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3713 if (g_b_init_process32_next == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3714 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3715 g_b_init_process32_next = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3716 s_pfn_Process32_Next = (Process32Next_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3717 GetProcAddress (GetModuleHandle ("kernel32.dll"), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3718 "Process32Next"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3719 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3720 if (s_pfn_Process32_Next == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3721 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3722 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3723 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3724 return (s_pfn_Process32_Next (hSnapshot, lppe)); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3725 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3726 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3727 BOOL WINAPI open_thread_token ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3728 HANDLE ThreadHandle, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3729 DWORD DesiredAccess, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3730 BOOL OpenAsSelf, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3731 PHANDLE TokenHandle) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3732 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3733 static OpenThreadToken_Proc s_pfn_Open_Thread_Token = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3734 HMODULE hm_advapi32 = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3735 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3736 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3737 SetLastError (ERROR_NOT_SUPPORTED); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3738 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3739 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3740 if (g_b_init_open_thread_token == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3741 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3742 g_b_init_open_thread_token = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3743 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3744 s_pfn_Open_Thread_Token = |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3745 (OpenThreadToken_Proc) GetProcAddress (hm_advapi32, "OpenThreadToken"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3746 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3747 if (s_pfn_Open_Thread_Token == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3748 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3749 SetLastError (ERROR_NOT_SUPPORTED); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3750 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3751 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3752 return ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3753 s_pfn_Open_Thread_Token ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3754 ThreadHandle, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3755 DesiredAccess, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3756 OpenAsSelf, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3757 TokenHandle) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3758 ); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3759 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3760 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3761 BOOL WINAPI impersonate_self ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3762 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3763 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3764 static ImpersonateSelf_Proc s_pfn_Impersonate_Self = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3765 HMODULE hm_advapi32 = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3766 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3767 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3768 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3769 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3770 if (g_b_init_impersonate_self == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3771 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3772 g_b_init_impersonate_self = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3773 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3774 s_pfn_Impersonate_Self = |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3775 (ImpersonateSelf_Proc) GetProcAddress (hm_advapi32, "ImpersonateSelf"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3776 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3777 if (s_pfn_Impersonate_Self == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3778 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3779 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3780 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3781 return s_pfn_Impersonate_Self (ImpersonationLevel); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3782 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3783 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3784 BOOL WINAPI revert_to_self (void) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3785 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3786 static RevertToSelf_Proc s_pfn_Revert_To_Self = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3787 HMODULE hm_advapi32 = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3788 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3789 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3790 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3791 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3792 if (g_b_init_revert_to_self == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3793 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3794 g_b_init_revert_to_self = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3795 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3796 s_pfn_Revert_To_Self = |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3797 (RevertToSelf_Proc) GetProcAddress (hm_advapi32, "RevertToSelf"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3798 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3799 if (s_pfn_Revert_To_Self == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3800 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3801 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3802 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3803 return s_pfn_Revert_To_Self (); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3804 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3805 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3806 BOOL WINAPI get_process_memory_info ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3807 HANDLE h_proc, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3808 PPROCESS_MEMORY_COUNTERS mem_counters, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3809 DWORD bufsize) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3810 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3811 static GetProcessMemoryInfo_Proc s_pfn_Get_Process_Memory_Info = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3812 HMODULE hm_psapi = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3813 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3814 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3815 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3816 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3817 if (g_b_init_get_process_memory_info == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3818 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3819 g_b_init_get_process_memory_info = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3820 hm_psapi = LoadLibrary ("Psapi.dll"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3821 if (hm_psapi) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3822 s_pfn_Get_Process_Memory_Info = (GetProcessMemoryInfo_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3823 GetProcAddress (hm_psapi, "GetProcessMemoryInfo"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3824 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3825 if (s_pfn_Get_Process_Memory_Info == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3826 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3827 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3828 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3829 return s_pfn_Get_Process_Memory_Info (h_proc, mem_counters, bufsize); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3830 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3831 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3832 BOOL WINAPI get_process_working_set_size ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3833 HANDLE h_proc, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3834 DWORD *minrss, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3835 DWORD *maxrss) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3836 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3837 static GetProcessWorkingSetSize_Proc |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3838 s_pfn_Get_Process_Working_Set_Size = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3839 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3840 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3841 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3842 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3843 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3844 if (g_b_init_get_process_working_set_size == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3845 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3846 g_b_init_get_process_working_set_size = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3847 s_pfn_Get_Process_Working_Set_Size = (GetProcessWorkingSetSize_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3848 GetProcAddress (GetModuleHandle ("kernel32.dll"), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3849 "GetProcessWorkingSetSize"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3850 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3851 if (s_pfn_Get_Process_Working_Set_Size == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3852 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3853 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3854 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3855 return s_pfn_Get_Process_Working_Set_Size (h_proc, minrss, maxrss); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3856 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3857 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3858 BOOL WINAPI global_memory_status ( |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3859 MEMORYSTATUS *buf) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3860 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3861 static GlobalMemoryStatus_Proc s_pfn_Global_Memory_Status = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3862 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3863 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3864 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3865 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3866 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3867 if (g_b_init_global_memory_status == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3868 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3869 g_b_init_global_memory_status = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3870 s_pfn_Global_Memory_Status = (GlobalMemoryStatus_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3871 GetProcAddress (GetModuleHandle ("kernel32.dll"), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3872 "GlobalMemoryStatus"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3873 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3874 if (s_pfn_Global_Memory_Status == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3875 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3876 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3877 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3878 return s_pfn_Global_Memory_Status (buf); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3879 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3880 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3881 BOOL WINAPI global_memory_status_ex ( |
97486
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
3882 MEMORY_STATUS_EX *buf) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3883 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3884 static GlobalMemoryStatusEx_Proc s_pfn_Global_Memory_Status_Ex = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3885 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3886 if (is_windows_9x () == TRUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3887 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3888 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3889 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3890 if (g_b_init_global_memory_status_ex == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3891 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3892 g_b_init_global_memory_status_ex = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3893 s_pfn_Global_Memory_Status_Ex = (GlobalMemoryStatusEx_Proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3894 GetProcAddress (GetModuleHandle ("kernel32.dll"), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3895 "GlobalMemoryStatusEx"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3896 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3897 if (s_pfn_Global_Memory_Status_Ex == NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3898 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3899 return FALSE; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3900 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3901 return s_pfn_Global_Memory_Status_Ex (buf); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3902 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3903 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3904 Lisp_Object |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
3905 list_system_processes (void) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3906 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3907 struct gcpro gcpro1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3908 Lisp_Object proclist = Qnil; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3909 HANDLE h_snapshot; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3910 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3911 h_snapshot = create_toolhelp32_snapshot (TH32CS_SNAPPROCESS, 0); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3912 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3913 if (h_snapshot != INVALID_HANDLE_VALUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3914 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3915 PROCESSENTRY32 proc_entry; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3916 DWORD proc_id; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3917 BOOL res; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3918 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3919 GCPRO1 (proclist); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3920 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3921 proc_entry.dwSize = sizeof (PROCESSENTRY32); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3922 for (res = process32_first (h_snapshot, &proc_entry); res; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3923 res = process32_next (h_snapshot, &proc_entry)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3924 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3925 proc_id = proc_entry.th32ProcessID; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3926 proclist = Fcons (make_fixnum_or_float (proc_id), proclist); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3927 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3928 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3929 CloseHandle (h_snapshot); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3930 UNGCPRO; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3931 proclist = Fnreverse (proclist); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3932 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3933 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3934 return proclist; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3935 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3936 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3937 static int |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3938 enable_privilege (LPCTSTR priv_name, BOOL enable_p, TOKEN_PRIVILEGES *old_priv) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3939 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3940 TOKEN_PRIVILEGES priv; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3941 DWORD priv_size = sizeof (priv); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3942 DWORD opriv_size = sizeof (*old_priv); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3943 HANDLE h_token = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3944 HANDLE h_thread = GetCurrentThread (); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3945 int ret_val = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3946 BOOL res; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3947 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3948 res = open_thread_token (h_thread, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3949 TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3950 FALSE, &h_token); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3951 if (!res && GetLastError () == ERROR_NO_TOKEN) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3952 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3953 if (impersonate_self (SecurityImpersonation)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3954 res = open_thread_token (h_thread, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3955 TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3956 FALSE, &h_token); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3957 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3958 if (res) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3959 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3960 priv.PrivilegeCount = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3961 priv.Privileges[0].Attributes = enable_p ? SE_PRIVILEGE_ENABLED : 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3962 LookupPrivilegeValue (NULL, priv_name, &priv.Privileges[0].Luid); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3963 if (AdjustTokenPrivileges (h_token, FALSE, &priv, priv_size, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3964 old_priv, &opriv_size) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3965 && GetLastError () != ERROR_NOT_ALL_ASSIGNED) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3966 ret_val = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3967 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3968 if (h_token) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3969 CloseHandle (h_token); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3970 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3971 return ret_val; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3972 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3973 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3974 static int |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3975 restore_privilege (TOKEN_PRIVILEGES *priv) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3976 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3977 DWORD priv_size = sizeof (*priv); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3978 HANDLE h_token = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3979 int ret_val = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3980 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3981 if (open_thread_token (GetCurrentThread (), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3982 TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3983 FALSE, &h_token)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3984 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3985 if (AdjustTokenPrivileges (h_token, FALSE, priv, priv_size, NULL, NULL) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3986 && GetLastError () != ERROR_NOT_ALL_ASSIGNED) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3987 ret_val = 1; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3988 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3989 if (h_token) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3990 CloseHandle (h_token); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3991 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3992 return ret_val; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3993 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3994 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3995 static Lisp_Object |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
3996 ltime (long time_sec, long time_usec) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3997 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3998 return list3 (make_number ((time_sec >> 16) & 0xffff), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
3999 make_number (time_sec & 0xffff), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4000 make_number (time_usec)); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4001 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4002 |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4003 #define U64_TO_LISP_TIME(time) ltime ((time) / 1000000L, (time) % 1000000L) |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4004 |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4005 static int |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
4006 process_times (HANDLE h_proc, Lisp_Object *ctime, Lisp_Object *etime, |
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
4007 Lisp_Object *stime, Lisp_Object *utime, Lisp_Object *ttime, |
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
4008 double *pcpu) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4009 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4010 FILETIME ft_creation, ft_exit, ft_kernel, ft_user, ft_current; |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4011 ULONGLONG tem1, tem2, tem3, tem; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4012 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4013 if (!h_proc |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4014 || !get_process_times_fn |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4015 || !(*get_process_times_fn) (h_proc, &ft_creation, &ft_exit, |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4016 &ft_kernel, &ft_user)) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4017 return 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4018 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4019 GetSystemTimeAsFileTime (&ft_current); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4020 |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4021 FILETIME_TO_U64 (tem1, ft_kernel); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4022 tem1 /= 10L; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4023 *stime = U64_TO_LISP_TIME (tem1); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4024 |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4025 FILETIME_TO_U64 (tem2, ft_user); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4026 tem2 /= 10L; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4027 *utime = U64_TO_LISP_TIME (tem2); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4028 |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4029 tem3 = tem1 + tem2; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4030 *ttime = U64_TO_LISP_TIME (tem3); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4031 |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4032 FILETIME_TO_U64 (tem, ft_creation); |
97371
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4033 /* Process no 4 (System) returns zero creation time. */ |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4034 if (tem) |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4035 tem = (tem - utc_base) / 10L; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4036 *ctime = U64_TO_LISP_TIME (tem); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4037 |
97371
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4038 if (tem) |
100885
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4039 { |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4040 FILETIME_TO_U64 (tem3, ft_current); |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4041 tem = (tem3 - utc_base) / 10L - tem; |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4042 } |
56164f0c606d
* w32.c: Use 64-bit arithmetic to do FILETIME conversions. (Bug#1766)
Juanma Barranquero <lekktu@gmail.com>
parents:
100831
diff
changeset
|
4043 *etime = U64_TO_LISP_TIME (tem); |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4044 |
97371
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4045 if (tem) |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4046 { |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4047 *pcpu = 100.0 * (tem1 + tem2) / tem; |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4048 if (*pcpu > 100) |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4049 *pcpu = 100.0; |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4050 } |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4051 else |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4052 *pcpu = 0; |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4053 |
23de3091fdd0
(process_times): Fix the case of System process.
Eli Zaretskii <eliz@gnu.org>
parents:
97365
diff
changeset
|
4054 return 1; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4055 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4056 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4057 Lisp_Object |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
4058 system_process_attributes (Lisp_Object pid) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4059 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4060 struct gcpro gcpro1, gcpro2, gcpro3; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4061 Lisp_Object attrs = Qnil; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4062 Lisp_Object cmd_str, decoded_cmd, tem; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4063 HANDLE h_snapshot, h_proc; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4064 DWORD proc_id; |
97372
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4065 int found_proc = 0; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4066 char uname[UNLEN+1], gname[GNLEN+1], domain[1025]; |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4067 DWORD ulength = sizeof (uname), dlength = sizeof (domain), needed; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4068 DWORD glength = sizeof (gname); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4069 HANDLE token = NULL; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4070 SID_NAME_USE user_type; |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4071 unsigned char *buf = NULL; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4072 DWORD blen = 0; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4073 TOKEN_USER user_token; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4074 TOKEN_PRIMARY_GROUP group_token; |
102670
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
4075 unsigned euid; |
06ca3efb355b
inc/sys/stat.h (struct stat): Change the types of st_uid and st_gid to unsigned.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
4076 unsigned egid; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4077 DWORD sess; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4078 PROCESS_MEMORY_COUNTERS mem; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4079 PROCESS_MEMORY_COUNTERS_EX mem_ex; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4080 DWORD minrss, maxrss; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4081 MEMORYSTATUS memst; |
97486
2c195017488c
(_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): Rename from
Eli Zaretskii <eliz@gnu.org>
parents:
97372
diff
changeset
|
4082 MEMORY_STATUS_EX memstex; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4083 double totphys = 0.0; |
100831
e43e429a11bb
(process_times): Compute sum of utime and stime.
Eli Zaretskii <eliz@gnu.org>
parents:
100565
diff
changeset
|
4084 Lisp_Object ctime, stime, utime, etime, ttime; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4085 double pcpu; |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4086 BOOL result = FALSE; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4087 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4088 CHECK_NUMBER_OR_FLOAT (pid); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4089 proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4090 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4091 h_snapshot = create_toolhelp32_snapshot (TH32CS_SNAPPROCESS, 0); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4092 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4093 GCPRO3 (attrs, decoded_cmd, tem); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4094 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4095 if (h_snapshot != INVALID_HANDLE_VALUE) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4096 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4097 PROCESSENTRY32 pe; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4098 BOOL res; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4099 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4100 pe.dwSize = sizeof (PROCESSENTRY32); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4101 for (res = process32_first (h_snapshot, &pe); res; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4102 res = process32_next (h_snapshot, &pe)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4103 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4104 if (proc_id == pe.th32ProcessID) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4105 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4106 if (proc_id == 0) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4107 decoded_cmd = build_string ("Idle"); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4108 else |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4109 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4110 /* Decode the command name from locale-specific |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4111 encoding. */ |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4112 cmd_str = make_unibyte_string (pe.szExeFile, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4113 strlen (pe.szExeFile)); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4114 decoded_cmd = |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4115 code_convert_string_norecord (cmd_str, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4116 Vlocale_coding_system, 0); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4117 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4118 attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4119 attrs = Fcons (Fcons (Qppid, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4120 make_fixnum_or_float (pe.th32ParentProcessID)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4121 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4122 attrs = Fcons (Fcons (Qpri, make_number (pe.pcPriClassBase)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4123 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4124 attrs = Fcons (Fcons (Qthcount, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4125 make_fixnum_or_float (pe.cntThreads)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4126 attrs); |
97372
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4127 found_proc = 1; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4128 break; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4129 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4130 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4131 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4132 CloseHandle (h_snapshot); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4133 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4134 |
97372
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4135 if (!found_proc) |
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4136 { |
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4137 UNGCPRO; |
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4138 return Qnil; |
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4139 } |
aeb822613377
(w32_system_process_attributes): If the process does not exist, return nil.
Eli Zaretskii <eliz@gnu.org>
parents:
97371
diff
changeset
|
4140 |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4141 h_proc = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4142 FALSE, proc_id); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4143 /* If we were denied a handle to the process, try again after |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4144 enabling the SeDebugPrivilege in our process. */ |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4145 if (!h_proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4146 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4147 TOKEN_PRIVILEGES priv_current; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4148 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4149 if (enable_privilege (SE_DEBUG_NAME, TRUE, &priv_current)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4150 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4151 h_proc = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4152 FALSE, proc_id); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4153 restore_privilege (&priv_current); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4154 revert_to_self (); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4155 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4156 } |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4157 if (h_proc) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4158 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4159 result = open_process_token (h_proc, TOKEN_QUERY, &token); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4160 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4161 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4162 result = get_token_information (token, TokenUser, NULL, 0, &blen); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4163 if (!result && GetLastError () == ERROR_INSUFFICIENT_BUFFER) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4164 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4165 buf = xmalloc (blen); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4166 result = get_token_information (token, TokenUser, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4167 (LPVOID)buf, blen, &needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4168 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4169 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4170 memcpy (&user_token, buf, sizeof (user_token)); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4171 if (!w32_cached_id (user_token.User.Sid, &euid, uname)) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4172 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4173 euid = get_rid (user_token.User.Sid); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4174 result = lookup_account_sid (NULL, user_token.User.Sid, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4175 uname, &ulength, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4176 domain, &dlength, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4177 &user_type); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4178 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4179 w32_add_to_cache (user_token.User.Sid, euid, uname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4180 else |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4181 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4182 strcpy (uname, "unknown"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4183 result = TRUE; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4184 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4185 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4186 ulength = strlen (uname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4187 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4188 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4189 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4190 if (result) |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
4191 { |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4192 /* Determine a reasonable euid and gid values. */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4193 if (xstrcasecmp ("administrator", uname) == 0) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4194 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4195 euid = 500; /* well-known Administrator uid */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4196 egid = 513; /* well-known None gid */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4197 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4198 else |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4199 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4200 /* Get group id and name. */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4201 result = get_token_information (token, TokenPrimaryGroup, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4202 (LPVOID)buf, blen, &needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4203 if (!result && GetLastError () == ERROR_INSUFFICIENT_BUFFER) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4204 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4205 buf = xrealloc (buf, blen = needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4206 result = get_token_information (token, TokenPrimaryGroup, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4207 (LPVOID)buf, blen, &needed); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4208 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4209 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4210 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4211 memcpy (&group_token, buf, sizeof (group_token)); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4212 if (!w32_cached_id (group_token.PrimaryGroup, &egid, gname)) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4213 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4214 egid = get_rid (group_token.PrimaryGroup); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4215 dlength = sizeof (domain); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4216 result = |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4217 lookup_account_sid (NULL, group_token.PrimaryGroup, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4218 gname, &glength, NULL, &dlength, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4219 &user_type); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4220 if (result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4221 w32_add_to_cache (group_token.PrimaryGroup, |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4222 egid, gname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4223 else |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4224 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4225 strcpy (gname, "None"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4226 result = TRUE; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4227 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4228 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4229 glength = strlen (gname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4230 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4231 } |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
4232 } |
103624
3e06f0e66062
Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents:
102670
diff
changeset
|
4233 xfree (buf); |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4234 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4235 if (!result) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4236 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4237 if (!is_windows_9x ()) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4238 { |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4239 /* We couldn't open the process token, presumably because of |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4240 insufficient access rights. Assume this process is run |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4241 by the system. */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4242 strcpy (uname, "SYSTEM"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4243 strcpy (gname, "None"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4244 euid = 18; /* SYSTEM */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4245 egid = 513; /* None */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4246 glength = strlen (gname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4247 ulength = strlen (uname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4248 } |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4249 /* If we are running under Windows 9X, where security calls are |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4250 not supported, we assume all processes are run by the current |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4251 user. */ |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4252 else if (GetUserName (uname, &ulength)) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4253 { |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4254 if (xstrcasecmp ("administrator", uname) == 0) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4255 euid = 0; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4256 else |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4257 euid = 123; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4258 egid = euid; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4259 strcpy (gname, "None"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4260 glength = strlen (gname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4261 ulength = strlen (uname); |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4262 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4263 else |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4264 { |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4265 euid = 123; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4266 egid = 123; |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4267 strcpy (uname, "administrator"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4268 ulength = strlen (uname); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4269 strcpy (gname, "None"); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4270 glength = strlen (gname); |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4271 } |
97875
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4272 if (token) |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4273 CloseHandle (token); |
a77c2abc7237
(init_user_info): Allocate buf[] with xmalloc using the size needed by
Eli Zaretskii <eliz@gnu.org>
parents:
97495
diff
changeset
|
4274 } |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4275 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4276 attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (euid)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4277 tem = make_unibyte_string (uname, ulength); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4278 attrs = Fcons (Fcons (Quser, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4279 code_convert_string_norecord (tem, Vlocale_coding_system, 0)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4280 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4281 attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (egid)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4282 tem = make_unibyte_string (gname, glength); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4283 attrs = Fcons (Fcons (Qgroup, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4284 code_convert_string_norecord (tem, Vlocale_coding_system, 0)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4285 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4286 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4287 if (global_memory_status_ex (&memstex)) |
97495
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4288 #if __GNUC__ || (defined (_MSC_VER) && _MSC_VER >= 1300) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4289 totphys = memstex.ullTotalPhys / 1024.0; |
97495
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4290 #else |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4291 /* Visual Studio 6 cannot convert an unsigned __int64 type to |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4292 double, so we need to do this for it... */ |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4293 { |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4294 DWORD tot_hi = memstex.ullTotalPhys >> 32; |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4295 DWORD tot_md = (memstex.ullTotalPhys & 0x00000000ffffffff) >> 10; |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4296 DWORD tot_lo = memstex.ullTotalPhys % 1024; |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4297 |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4298 totphys = tot_hi * 4194304.0 + tot_md + tot_lo / 1024.0; |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4299 } |
1f8e4a26957e
(w32_system_process_attributes) [_MSC_VER < 1300]: Alternative calculation
Eli Zaretskii <eliz@gnu.org>
parents:
97491
diff
changeset
|
4300 #endif /* __GNUC__ || _MSC_VER >= 1300 */ |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4301 else if (global_memory_status (&memst)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4302 totphys = memst.dwTotalPhys / 1024.0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4303 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4304 if (h_proc |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4305 && get_process_memory_info (h_proc, (PROCESS_MEMORY_COUNTERS *)&mem_ex, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4306 sizeof (mem_ex))) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4307 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4308 DWORD rss = mem_ex.WorkingSetSize / 1024; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4309 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4310 attrs = Fcons (Fcons (Qmajflt, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4311 make_fixnum_or_float (mem_ex.PageFaultCount)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4312 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4313 attrs = Fcons (Fcons (Qvsize, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4314 make_fixnum_or_float (mem_ex.PrivateUsage / 1024)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4315 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4316 attrs = Fcons (Fcons (Qrss, make_fixnum_or_float (rss)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4317 if (totphys) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4318 attrs = Fcons (Fcons (Qpmem, make_float (100. * rss / totphys)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4319 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4320 else if (h_proc |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4321 && get_process_memory_info (h_proc, &mem, sizeof (mem))) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4322 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4323 DWORD rss = mem_ex.WorkingSetSize / 1024; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4324 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4325 attrs = Fcons (Fcons (Qmajflt, |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4326 make_fixnum_or_float (mem.PageFaultCount)), |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4327 attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4328 attrs = Fcons (Fcons (Qrss, make_fixnum_or_float (rss)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4329 if (totphys) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4330 attrs = Fcons (Fcons (Qpmem, make_float (100. * rss / totphys)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4331 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4332 else if (h_proc |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4333 && get_process_working_set_size (h_proc, &minrss, &maxrss)) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4334 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4335 DWORD rss = maxrss / 1024; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4336 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4337 attrs = Fcons (Fcons (Qrss, make_fixnum_or_float (maxrss / 1024)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4338 if (totphys) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4339 attrs = Fcons (Fcons (Qpmem, make_float (100. * rss / totphys)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4340 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4341 |
100831
e43e429a11bb
(process_times): Compute sum of utime and stime.
Eli Zaretskii <eliz@gnu.org>
parents:
100565
diff
changeset
|
4342 if (process_times (h_proc, &ctime, &etime, &stime, &utime, &ttime, &pcpu)) |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4343 { |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4344 attrs = Fcons (Fcons (Qutime, utime), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4345 attrs = Fcons (Fcons (Qstime, stime), attrs); |
100831
e43e429a11bb
(process_times): Compute sum of utime and stime.
Eli Zaretskii <eliz@gnu.org>
parents:
100565
diff
changeset
|
4346 attrs = Fcons (Fcons (Qtime, ttime), attrs); |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4347 attrs = Fcons (Fcons (Qstart, ctime), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4348 attrs = Fcons (Fcons (Qetime, etime), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4349 attrs = Fcons (Fcons (Qpcpu, make_float (pcpu)), attrs); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4350 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4351 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4352 /* FIXME: Retrieve command line by walking the PEB of the process. */ |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4353 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4354 if (h_proc) |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4355 CloseHandle (h_proc); |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4356 UNGCPRO; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4357 return attrs; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4358 } |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4359 |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
4360 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4361 /* Wrappers for winsock functions to map between our file descriptors |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4362 and winsock's handles; also set h_errno for convenience. |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4363 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4364 To allow Emacs to run on systems which don't have winsock support |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4365 installed, we dynamically link to winsock on startup if present, and |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4366 otherwise provide the minimum necessary functionality |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4367 (eg. gethostname). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4368 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4369 /* function pointers for relevant socket functions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4370 int (PASCAL *pfn_WSAStartup) (WORD wVersionRequired, LPWSADATA lpWSAData); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4371 void (PASCAL *pfn_WSASetLastError) (int iError); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4372 int (PASCAL *pfn_WSAGetLastError) (void); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
4373 int (PASCAL *pfn_WSAEventSelect) (SOCKET s, HANDLE hEventObject, long lNetworkEvents); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
4374 HANDLE (PASCAL *pfn_WSACreateEvent) (void); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
4375 int (PASCAL *pfn_WSACloseEvent) (HANDLE hEvent); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4376 int (PASCAL *pfn_socket) (int af, int type, int protocol); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4377 int (PASCAL *pfn_bind) (SOCKET s, const struct sockaddr *addr, int namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4378 int (PASCAL *pfn_connect) (SOCKET s, const struct sockaddr *addr, int namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4379 int (PASCAL *pfn_ioctlsocket) (SOCKET s, long cmd, u_long *argp); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4380 int (PASCAL *pfn_recv) (SOCKET s, char * buf, int len, int flags); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4381 int (PASCAL *pfn_send) (SOCKET s, const char * buf, int len, int flags); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4382 int (PASCAL *pfn_closesocket) (SOCKET s); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4383 int (PASCAL *pfn_shutdown) (SOCKET s, int how); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4384 int (PASCAL *pfn_WSACleanup) (void); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4385 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4386 u_short (PASCAL *pfn_htons) (u_short hostshort); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4387 u_short (PASCAL *pfn_ntohs) (u_short netshort); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4388 unsigned long (PASCAL *pfn_inet_addr) (const char * cp); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4389 int (PASCAL *pfn_gethostname) (char * name, int namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4390 struct hostent * (PASCAL *pfn_gethostbyname) (const char * name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4391 struct servent * (PASCAL *pfn_getservbyname) (const char * name, const char * proto); |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4392 int (PASCAL *pfn_getpeername) (SOCKET s, struct sockaddr *addr, int * namelen); |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4393 int (PASCAL *pfn_setsockopt) (SOCKET s, int level, int optname, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4394 const char * optval, int optlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4395 int (PASCAL *pfn_listen) (SOCKET s, int backlog); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4396 int (PASCAL *pfn_getsockname) (SOCKET s, struct sockaddr * name, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4397 int * namelen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4398 SOCKET (PASCAL *pfn_accept) (SOCKET s, struct sockaddr * addr, int * addrlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4399 int (PASCAL *pfn_recvfrom) (SOCKET s, char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4400 struct sockaddr * from, int * fromlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4401 int (PASCAL *pfn_sendto) (SOCKET s, const char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4402 const struct sockaddr * to, int tolen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4403 |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4404 /* SetHandleInformation is only needed to make sockets non-inheritable. */ |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4405 BOOL (WINAPI *pfn_SetHandleInformation) (HANDLE object, DWORD mask, DWORD flags); |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4406 #ifndef HANDLE_FLAG_INHERIT |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4407 #define HANDLE_FLAG_INHERIT 1 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4408 #endif |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4409 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4410 HANDLE winsock_lib; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4411 static int winsock_inuse; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4412 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4413 BOOL |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4414 term_winsock (void) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4415 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4416 if (winsock_lib != NULL && winsock_inuse == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4417 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4418 /* Not sure what would cause WSAENETDOWN, or even if it can happen |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4419 after WSAStartup returns successfully, but it seems reasonable |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4420 to allow unloading winsock anyway in that case. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4421 if (pfn_WSACleanup () == 0 || |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4422 pfn_WSAGetLastError () == WSAENETDOWN) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4423 { |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4424 if (FreeLibrary (winsock_lib)) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4425 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4426 return TRUE; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4427 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4428 } |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4429 return FALSE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4430 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4431 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4432 BOOL |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4433 init_winsock (int load_now) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4434 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4435 WSADATA winsockData; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4436 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4437 if (winsock_lib != NULL) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4438 return TRUE; |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4439 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4440 pfn_SetHandleInformation = NULL; |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4441 pfn_SetHandleInformation |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4442 = (void *) GetProcAddress (GetModuleHandle ("kernel32.dll"), |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4443 "SetHandleInformation"); |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
4444 |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
4445 winsock_lib = LoadLibrary ("Ws2_32.dll"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4446 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4447 if (winsock_lib != NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4448 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4449 /* dynamically link to socket functions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4450 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4451 #define LOAD_PROC(fn) \ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4452 if ((pfn_##fn = (void *) GetProcAddress (winsock_lib, #fn)) == NULL) \ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4453 goto fail; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4454 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4455 LOAD_PROC (WSAStartup); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4456 LOAD_PROC (WSASetLastError); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4457 LOAD_PROC (WSAGetLastError); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4458 LOAD_PROC (WSAEventSelect); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4459 LOAD_PROC (WSACreateEvent); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4460 LOAD_PROC (WSACloseEvent); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4461 LOAD_PROC (socket); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4462 LOAD_PROC (bind); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4463 LOAD_PROC (connect); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4464 LOAD_PROC (ioctlsocket); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4465 LOAD_PROC (recv); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4466 LOAD_PROC (send); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4467 LOAD_PROC (closesocket); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4468 LOAD_PROC (shutdown); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4469 LOAD_PROC (htons); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4470 LOAD_PROC (ntohs); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4471 LOAD_PROC (inet_addr); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4472 LOAD_PROC (gethostname); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4473 LOAD_PROC (gethostbyname); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4474 LOAD_PROC (getservbyname); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4475 LOAD_PROC (getpeername); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4476 LOAD_PROC (WSACleanup); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4477 LOAD_PROC (setsockopt); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4478 LOAD_PROC (listen); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4479 LOAD_PROC (getsockname); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4480 LOAD_PROC (accept); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4481 LOAD_PROC (recvfrom); |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4482 LOAD_PROC (sendto); |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4483 #undef LOAD_PROC |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4484 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4485 /* specify version 1.1 of winsock */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4486 if (pfn_WSAStartup (0x101, &winsockData) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4487 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4488 if (winsockData.wVersion != 0x101) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4489 goto fail; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4490 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4491 if (!load_now) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4492 { |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4493 /* Report that winsock exists and is usable, but leave |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4494 socket functions disabled. I am assuming that calling |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4495 WSAStartup does not require any network interaction, |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4496 and in particular does not cause or require a dial-up |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4497 connection to be established. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4498 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4499 pfn_WSACleanup (); |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4500 FreeLibrary (winsock_lib); |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4501 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4502 } |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4503 winsock_inuse = 0; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4504 return TRUE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4505 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4506 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4507 fail: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4508 FreeLibrary (winsock_lib); |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4509 winsock_lib = NULL; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4510 } |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4511 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4512 return FALSE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4513 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4514 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4515 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4516 int h_errno = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4517 |
96462 | 4518 /* function to set h_errno for compatibility; map winsock error codes to |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4519 normal system codes where they overlap (non-overlapping definitions |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4520 are already in <sys/socket.h> */ |
74947 | 4521 static void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
4522 set_errno (void) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4523 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4524 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4525 h_errno = EINVAL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4526 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4527 h_errno = pfn_WSAGetLastError (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4528 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4529 switch (h_errno) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4530 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4531 case WSAEACCES: h_errno = EACCES; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4532 case WSAEBADF: h_errno = EBADF; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4533 case WSAEFAULT: h_errno = EFAULT; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4534 case WSAEINTR: h_errno = EINTR; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4535 case WSAEINVAL: h_errno = EINVAL; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4536 case WSAEMFILE: h_errno = EMFILE; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4537 case WSAENAMETOOLONG: h_errno = ENAMETOOLONG; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4538 case WSAENOTEMPTY: h_errno = ENOTEMPTY; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4539 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4540 errno = h_errno; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4541 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4542 |
74947 | 4543 static void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
4544 check_errno (void) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4545 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4546 if (h_errno == 0 && winsock_lib != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4547 pfn_WSASetLastError (0); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4548 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4549 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4550 /* Extend strerror to handle the winsock-specific error codes. */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4551 struct { |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4552 int errnum; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4553 char * msg; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4554 } _wsa_errlist[] = { |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4555 WSAEINTR , "Interrupted function call", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4556 WSAEBADF , "Bad file descriptor", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4557 WSAEACCES , "Permission denied", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4558 WSAEFAULT , "Bad address", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4559 WSAEINVAL , "Invalid argument", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4560 WSAEMFILE , "Too many open files", |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4561 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4562 WSAEWOULDBLOCK , "Resource temporarily unavailable", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4563 WSAEINPROGRESS , "Operation now in progress", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4564 WSAEALREADY , "Operation already in progress", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4565 WSAENOTSOCK , "Socket operation on non-socket", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4566 WSAEDESTADDRREQ , "Destination address required", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4567 WSAEMSGSIZE , "Message too long", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4568 WSAEPROTOTYPE , "Protocol wrong type for socket", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4569 WSAENOPROTOOPT , "Bad protocol option", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4570 WSAEPROTONOSUPPORT , "Protocol not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4571 WSAESOCKTNOSUPPORT , "Socket type not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4572 WSAEOPNOTSUPP , "Operation not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4573 WSAEPFNOSUPPORT , "Protocol family not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4574 WSAEAFNOSUPPORT , "Address family not supported by protocol family", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4575 WSAEADDRINUSE , "Address already in use", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4576 WSAEADDRNOTAVAIL , "Cannot assign requested address", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4577 WSAENETDOWN , "Network is down", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4578 WSAENETUNREACH , "Network is unreachable", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4579 WSAENETRESET , "Network dropped connection on reset", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4580 WSAECONNABORTED , "Software caused connection abort", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4581 WSAECONNRESET , "Connection reset by peer", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4582 WSAENOBUFS , "No buffer space available", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4583 WSAEISCONN , "Socket is already connected", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4584 WSAENOTCONN , "Socket is not connected", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4585 WSAESHUTDOWN , "Cannot send after socket shutdown", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4586 WSAETOOMANYREFS , "Too many references", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4587 WSAETIMEDOUT , "Connection timed out", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4588 WSAECONNREFUSED , "Connection refused", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4589 WSAELOOP , "Network loop", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4590 WSAENAMETOOLONG , "Name is too long", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4591 WSAEHOSTDOWN , "Host is down", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4592 WSAEHOSTUNREACH , "No route to host", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4593 WSAENOTEMPTY , "Buffer not empty", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4594 WSAEPROCLIM , "Too many processes", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4595 WSAEUSERS , "Too many users", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4596 WSAEDQUOT , "Double quote in host name", /* really not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4597 WSAESTALE , "Data is stale", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4598 WSAEREMOTE , "Remote error", /* not sure */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4599 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4600 WSASYSNOTREADY , "Network subsystem is unavailable", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4601 WSAVERNOTSUPPORTED , "WINSOCK.DLL version out of range", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4602 WSANOTINITIALISED , "Winsock not initialized successfully", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4603 WSAEDISCON , "Graceful shutdown in progress", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4604 #ifdef WSAENOMORE |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4605 WSAENOMORE , "No more operations allowed", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4606 WSAECANCELLED , "Operation cancelled", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4607 WSAEINVALIDPROCTABLE , "Invalid procedure table from service provider", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4608 WSAEINVALIDPROVIDER , "Invalid service provider version number", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4609 WSAEPROVIDERFAILEDINIT , "Unable to initialize a service provider", |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
4610 WSASYSCALLFAILURE , "System call failure", |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4611 WSASERVICE_NOT_FOUND , "Service not found", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4612 WSATYPE_NOT_FOUND , "Class type not found", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4613 WSA_E_NO_MORE , "No more resources available", /* really not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4614 WSA_E_CANCELLED , "Operation already cancelled", /* really not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4615 WSAEREFUSED , "Operation refused", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4616 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4617 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4618 WSAHOST_NOT_FOUND , "Host not found", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4619 WSATRY_AGAIN , "Authoritative host not found during name lookup", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4620 WSANO_RECOVERY , "Non-recoverable error during name lookup", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4621 WSANO_DATA , "Valid name, no data record of requested type", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4622 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4623 -1, NULL |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4624 }; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4625 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4626 char * |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4627 sys_strerror (int error_no) |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4628 { |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4629 int i; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4630 static char unknown_msg[40]; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4631 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4632 if (error_no >= 0 && error_no < sys_nerr) |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4633 return sys_errlist[error_no]; |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4634 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4635 for (i = 0; _wsa_errlist[i].errnum >= 0; i++) |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4636 if (_wsa_errlist[i].errnum == error_no) |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4637 return _wsa_errlist[i].msg; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4638 |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4639 sprintf (unknown_msg, "Unidentified error: %d", error_no); |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4640 return unknown_msg; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4641 } |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
4642 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4643 /* [andrewi 3-May-96] I've had conflicting results using both methods, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4644 but I believe the method of keeping the socket handle separate (and |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4645 insuring it is not inheritable) is the correct one. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4646 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4647 #define SOCK_HANDLE(fd) ((SOCKET) fd_info[fd].hnd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4648 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4649 int socket_to_fd (SOCKET s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4650 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4651 int |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4652 sys_socket (int af, int type, int protocol) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4653 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4654 SOCKET s; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4655 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4656 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4657 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4658 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4659 return INVALID_SOCKET; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4660 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4661 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4662 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4663 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4664 /* call the real socket function */ |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4665 s = pfn_socket (af, type, protocol); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4666 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4667 if (s != INVALID_SOCKET) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4668 return socket_to_fd (s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4669 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4670 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4671 return -1; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4672 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4673 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4674 /* Convert a SOCKET to a file descriptor. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4675 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4676 socket_to_fd (SOCKET s) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4677 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4678 int fd; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4679 child_process * cp; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4680 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4681 /* Although under NT 3.5 _open_osfhandle will accept a socket |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4682 handle, if opened with SO_OPENTYPE == SO_SYNCHRONOUS_NONALERT, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4683 that does not work under NT 3.1. However, we can get the same |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4684 effect by using a backdoor function to replace an existing |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4685 descriptor handle with the one we want. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4686 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4687 /* allocate a file descriptor (with appropriate flags) */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4688 fd = _open ("NUL:", _O_RDWR); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4689 if (fd >= 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4690 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4691 /* Make a non-inheritable copy of the socket handle. Note |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4692 that it is possible that sockets aren't actually kernel |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4693 handles, which appears to be the case on Windows 9x when |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4694 the MS Proxy winsock client is installed. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4695 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4696 /* Apparently there is a bug in NT 3.51 with some service |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4697 packs, which prevents using DuplicateHandle to make a |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4698 socket handle non-inheritable (causes WSACleanup to |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4699 hang). The work-around is to use SetHandleInformation |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4700 instead if it is available and implemented. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4701 if (pfn_SetHandleInformation) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4702 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4703 pfn_SetHandleInformation ((HANDLE) s, HANDLE_FLAG_INHERIT, 0); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4704 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4705 else |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4706 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4707 HANDLE parent = GetCurrentProcess (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4708 HANDLE new_s = INVALID_HANDLE_VALUE; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4709 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4710 if (DuplicateHandle (parent, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4711 (HANDLE) s, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4712 parent, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4713 &new_s, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4714 0, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4715 FALSE, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4716 DUPLICATE_SAME_ACCESS)) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
4717 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4718 /* It is possible that DuplicateHandle succeeds even |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4719 though the socket wasn't really a kernel handle, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4720 because a real handle has the same value. So |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4721 test whether the new handle really is a socket. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4722 long nonblocking = 0; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4723 if (pfn_ioctlsocket ((SOCKET) new_s, FIONBIO, &nonblocking) == 0) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
4724 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4725 pfn_closesocket (s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4726 s = (SOCKET) new_s; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4727 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4728 else |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4729 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4730 CloseHandle (new_s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4731 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4732 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4733 } |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4734 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4735 fd_info[fd].hnd = (HANDLE) s; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4736 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4737 /* set our own internal flags */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4738 fd_info[fd].flags = FILE_SOCKET | FILE_BINARY | FILE_READ | FILE_WRITE; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4739 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4740 cp = new_child (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4741 if (cp) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4742 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4743 cp->fd = fd; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4744 cp->status = STATUS_READ_ACKNOWLEDGED; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4745 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4746 /* attach child_process to fd_info */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4747 if (fd_info[ fd ].cp != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4748 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4749 DebPrint (("sys_socket: fd_info[%d] apparently in use!\n", fd)); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4750 abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4751 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4752 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4753 fd_info[ fd ].cp = cp; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4754 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4755 /* success! */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4756 winsock_inuse++; /* count open sockets */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4757 return fd; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4758 } |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4759 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4760 /* clean up */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4761 _close (fd); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4762 } |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4763 pfn_closesocket (s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4764 h_errno = EMFILE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4765 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4766 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4767 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4768 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4769 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4770 sys_bind (int s, const struct sockaddr * addr, int namelen) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4771 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4772 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4773 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4774 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4775 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4776 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4777 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4778 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4779 if (fd_info[s].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4780 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4781 int rc = pfn_bind (SOCK_HANDLE (s), addr, namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4782 if (rc == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4783 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4784 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4785 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4786 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4787 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4788 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4789 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4790 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4791 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4792 sys_connect (int s, const struct sockaddr * name, int namelen) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4793 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4794 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4795 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4796 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4797 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4798 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4799 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4800 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4801 if (fd_info[s].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4802 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4803 int rc = pfn_connect (SOCK_HANDLE (s), name, namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4804 if (rc == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4805 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4806 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4807 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4808 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4809 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4810 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4811 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4812 u_short |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4813 sys_htons (u_short hostshort) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4814 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4815 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4816 pfn_htons (hostshort) : hostshort; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4817 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4818 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4819 u_short |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4820 sys_ntohs (u_short netshort) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4821 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4822 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4823 pfn_ntohs (netshort) : netshort; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4824 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4825 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4826 unsigned long |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4827 sys_inet_addr (const char * cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4828 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4829 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4830 pfn_inet_addr (cp) : INADDR_NONE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4831 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4832 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4833 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4834 sys_gethostname (char * name, int namelen) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4835 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4836 if (winsock_lib != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4837 return pfn_gethostname (name, namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4838 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4839 if (namelen > MAX_COMPUTERNAME_LENGTH) |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4840 return !GetComputerName (name, (DWORD *)&namelen); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4841 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4842 h_errno = EFAULT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4843 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4844 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4845 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4846 struct hostent * |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4847 sys_gethostbyname (const char * name) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4848 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4849 struct hostent * host; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4850 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4851 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4852 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4853 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4854 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4855 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4856 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4857 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4858 host = pfn_gethostbyname (name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4859 if (!host) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4860 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4861 return host; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4862 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4863 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4864 struct servent * |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
4865 sys_getservbyname (const char * name, const char * proto) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4866 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4867 struct servent * serv; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4868 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4869 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4870 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4871 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4872 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4873 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4874 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4875 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4876 serv = pfn_getservbyname (name, proto); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4877 if (!serv) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4878 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4879 return serv; |
9803 | 4880 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4881 |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4882 int |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4883 sys_getpeername (int s, struct sockaddr *addr, int * namelen) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4884 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4885 if (winsock_lib == NULL) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4886 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4887 h_errno = ENETDOWN; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4888 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4889 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4890 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4891 check_errno (); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4892 if (fd_info[s].flags & FILE_SOCKET) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4893 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4894 int rc = pfn_getpeername (SOCK_HANDLE (s), addr, namelen); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4895 if (rc == SOCKET_ERROR) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4896 set_errno (); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4897 return rc; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4898 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4899 h_errno = ENOTSOCK; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4900 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4901 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4902 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4903 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
4904 int |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4905 sys_shutdown (int s, int how) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4906 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4907 if (winsock_lib == NULL) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4908 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4909 h_errno = ENETDOWN; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4910 return SOCKET_ERROR; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4911 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4912 |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4913 check_errno (); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4914 if (fd_info[s].flags & FILE_SOCKET) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4915 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4916 int rc = pfn_shutdown (SOCK_HANDLE (s), how); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4917 if (rc == SOCKET_ERROR) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4918 set_errno (); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4919 return rc; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4920 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4921 h_errno = ENOTSOCK; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4922 return SOCKET_ERROR; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4923 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
4924 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4925 int |
63038
ac1cd1222417
(sys_setsockopt): Change arg 4 to `const void *'. In the
Eli Zaretskii <eliz@gnu.org>
parents:
63020
diff
changeset
|
4926 sys_setsockopt (int s, int level, int optname, const void * optval, int optlen) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4927 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4928 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4929 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4930 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4931 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4932 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4933 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4934 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4935 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4936 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4937 int rc = pfn_setsockopt (SOCK_HANDLE (s), level, optname, |
63038
ac1cd1222417
(sys_setsockopt): Change arg 4 to `const void *'. In the
Eli Zaretskii <eliz@gnu.org>
parents:
63020
diff
changeset
|
4938 (const char *)optval, optlen); |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4939 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4940 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4941 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4942 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4943 h_errno = ENOTSOCK; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4944 return SOCKET_ERROR; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4945 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4946 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4947 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4948 sys_listen (int s, int backlog) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4949 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4950 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4951 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4952 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4953 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4954 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4955 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4956 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4957 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4958 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4959 int rc = pfn_listen (SOCK_HANDLE (s), backlog); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4960 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4961 set_errno (); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
4962 else |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
4963 fd_info[s].flags |= FILE_LISTEN; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4964 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4965 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4966 h_errno = ENOTSOCK; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4967 return SOCKET_ERROR; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4968 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4969 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4970 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4971 sys_getsockname (int s, struct sockaddr * name, int * namelen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4972 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4973 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4974 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4975 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4976 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4977 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4978 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4979 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4980 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4981 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4982 int rc = pfn_getsockname (SOCK_HANDLE (s), name, namelen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4983 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4984 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4985 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4986 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4987 h_errno = ENOTSOCK; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4988 return SOCKET_ERROR; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4989 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4990 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4991 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4992 sys_accept (int s, struct sockaddr * addr, int * addrlen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4993 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4994 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4995 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4996 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4997 return -1; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4998 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
4999 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5000 check_errno (); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
5001 if (fd_info[s].flags & FILE_LISTEN) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5002 { |
44437
81e8a128e49f
(sys_accept): Don't hide variable `s'.
Juanma Barranquero <lekktu@gmail.com>
parents:
44042
diff
changeset
|
5003 SOCKET t = pfn_accept (SOCK_HANDLE (s), addr, addrlen); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5004 int fd = -1; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5005 if (t == INVALID_SOCKET) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5006 set_errno (); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5007 else |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5008 fd = socket_to_fd (t); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5009 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5010 fd_info[s].cp->status = STATUS_READ_ACKNOWLEDGED; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5011 ResetEvent (fd_info[s].cp->char_avail); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5012 return fd; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5013 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5014 h_errno = ENOTSOCK; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5015 return -1; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5016 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5017 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5018 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5019 sys_recvfrom (int s, char * buf, int len, int flags, |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5020 struct sockaddr * from, int * fromlen) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5021 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5022 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5023 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5024 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5025 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5026 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5027 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5028 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5029 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5030 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5031 int rc = pfn_recvfrom (SOCK_HANDLE (s), buf, len, flags, from, fromlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5032 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5033 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5034 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5035 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5036 h_errno = ENOTSOCK; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5037 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5038 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5039 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5040 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5041 sys_sendto (int s, const char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5042 const struct sockaddr * to, int tolen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5043 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5044 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5045 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5046 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5047 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5048 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5049 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5050 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5051 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5052 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5053 int rc = pfn_sendto (SOCK_HANDLE (s), buf, len, flags, to, tolen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5054 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5055 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5056 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5057 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5058 h_errno = ENOTSOCK; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5059 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5060 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
5061 |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5062 /* Windows does not have an fcntl function. Provide an implementation |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5063 solely for making sockets non-blocking. */ |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5064 int |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5065 fcntl (int s, int cmd, int options) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5066 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5067 if (winsock_lib == NULL) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5068 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5069 h_errno = ENETDOWN; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5070 return -1; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5071 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5072 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5073 check_errno (); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5074 if (fd_info[s].flags & FILE_SOCKET) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5075 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5076 if (cmd == F_SETFL && options == O_NDELAY) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5077 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5078 unsigned long nblock = 1; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5079 int rc = pfn_ioctlsocket (SOCK_HANDLE (s), FIONBIO, &nblock); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5080 if (rc == SOCKET_ERROR) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5081 set_errno(); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5082 /* Keep track of the fact that we set this to non-blocking. */ |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5083 fd_info[s].flags |= FILE_NDELAY; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5084 return rc; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5085 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5086 else |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5087 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5088 h_errno = EINVAL; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5089 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5090 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5091 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5092 h_errno = ENOTSOCK; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5093 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5094 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5095 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5096 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5097 /* Shadow main io functions: we need to handle pipes and sockets more |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5098 intelligently, and implement non-blocking mode as well. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5099 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5100 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5101 sys_close (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5102 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5103 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5104 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
5105 if (fd < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5106 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5107 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5108 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5109 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5110 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
5111 if (fd < MAXDESC && fd_info[fd].cp) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5112 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5113 child_process * cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5114 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5115 fd_info[fd].cp = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5116 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5117 if (CHILD_ACTIVE (cp)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5118 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5119 /* if last descriptor to active child_process then cleanup */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5120 int i; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5121 for (i = 0; i < MAXDESC; i++) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5122 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5123 if (i == fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5124 continue; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5125 if (fd_info[i].cp == cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5126 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5127 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5128 if (i == MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5129 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5130 if (fd_info[fd].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5131 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5132 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5133 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5134 pfn_shutdown (SOCK_HANDLE (fd), 2); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5135 rc = pfn_closesocket (SOCK_HANDLE (fd)); |
110431
9fe8167bbd9b
Don't make W32 code conditional on HAVE_SOCKETS, it's always defined.
Juanma Barranquero <lekktu@gmail.com>
parents:
110400
diff
changeset
|
5136 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5137 winsock_inuse--; /* count open sockets */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5138 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5139 delete_child (cp); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5140 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5141 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5142 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5143 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5144 /* Note that sockets do not need special treatment here (at least on |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
5145 NT and Windows 95 using the standard tcp/ip stacks) - it appears that |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5146 closesocket is equivalent to CloseHandle, which is to be expected |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5147 because socket handles are fully fledged kernel handles. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5148 rc = _close (fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5149 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
5150 if (rc == 0 && fd < MAXDESC) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5151 fd_info[fd].flags = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5152 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5153 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5154 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5155 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5156 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5157 sys_dup (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5158 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5159 int new_fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5160 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5161 new_fd = _dup (fd); |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
5162 if (new_fd >= 0 && new_fd < MAXDESC) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5163 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5164 /* duplicate our internal info as well */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5165 fd_info[new_fd] = fd_info[fd]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5166 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5167 return new_fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5168 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5169 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5170 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5171 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5172 sys_dup2 (int src, int dst) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5173 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5174 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5175 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5176 if (dst < 0 || dst >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5177 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5178 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5179 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5180 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5181 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5182 /* make sure we close the destination first if it's a pipe or socket */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5183 if (src != dst && fd_info[dst].flags != 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5184 sys_close (dst); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5185 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5186 rc = _dup2 (src, dst); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5187 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5188 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5189 /* duplicate our internal info as well */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5190 fd_info[dst] = fd_info[src]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5191 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5192 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5193 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5194 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5195 /* Unix pipe() has only one arg */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5196 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5197 sys_pipe (int * phandles) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5198 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5199 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5200 unsigned flags; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5201 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5202 /* make pipe handles non-inheritable; when we spawn a child, we |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5203 replace the relevant handle with an inheritable one. Also put |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5204 pipes into binary mode; we will do text mode translation ourselves |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5205 if required. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5206 rc = _pipe (phandles, 0, _O_NOINHERIT | _O_BINARY); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5207 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5208 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5209 { |
52353
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5210 /* Protect against overflow, since Windows can open more handles than |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5211 our fd_info array has room for. */ |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5212 if (phandles[0] >= MAXDESC || phandles[1] >= MAXDESC) |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5213 { |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5214 _close (phandles[0]); |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5215 _close (phandles[1]); |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5216 rc = -1; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5217 } |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5218 else |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5219 { |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5220 flags = FILE_PIPE | FILE_READ | FILE_BINARY; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5221 fd_info[phandles[0]].flags = flags; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5222 |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5223 flags = FILE_PIPE | FILE_WRITE | FILE_BINARY; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5224 fd_info[phandles[1]].flags = flags; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
5225 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5226 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5227 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5228 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5229 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5230 |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5231 /* From ntproc.c */ |
55643
ed93b07d7123
(_sys_read_ahead): Use w32_pipe_read_delay.
Jason Rumney <jasonr@gnu.org>
parents:
53123
diff
changeset
|
5232 extern int w32_pipe_read_delay; |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5233 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5234 /* Function to do blocking read of one byte, needed to implement |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5235 select. It is only allowed on sockets and pipes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5236 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5237 _sys_read_ahead (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5238 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5239 child_process * cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5240 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5241 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5242 if (fd < 0 || fd >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5243 return STATUS_READ_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5244 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5245 cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5246 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5247 if (cp == NULL || cp->fd != fd || cp->status != STATUS_READ_READY) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5248 return STATUS_READ_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5249 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5250 if ((fd_info[fd].flags & (FILE_PIPE | FILE_SERIAL | FILE_SOCKET)) == 0 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5251 || (fd_info[fd].flags & FILE_READ) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5252 { |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5253 DebPrint (("_sys_read_ahead: internal error: fd %d is not a pipe, serial port, or socket!\n", fd)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5254 abort (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5255 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5256 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5257 cp->status = STATUS_READ_IN_PROGRESS; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5258 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5259 if (fd_info[fd].flags & FILE_PIPE) |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5260 { |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5261 rc = _read (fd, &cp->chr, sizeof (char)); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5262 |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5263 /* Give subprocess time to buffer some more output for us before |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
5264 reporting that input is available; we need this because Windows 95 |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5265 connects DOS programs to pipes by making the pipe appear to be |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5266 the normal console stdout - as a result most DOS programs will |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5267 write to stdout without buffering, ie. one character at a |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
5268 time. Even some W32 programs do this - "dir" in a command |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5269 shell on NT is very slow if we don't do this. */ |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5270 if (rc > 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5271 { |
55643
ed93b07d7123
(_sys_read_ahead): Use w32_pipe_read_delay.
Jason Rumney <jasonr@gnu.org>
parents:
53123
diff
changeset
|
5272 int wait = w32_pipe_read_delay; |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5273 |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5274 if (wait > 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5275 Sleep (wait); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5276 else if (wait < 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5277 while (++wait <= 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5278 /* Yield remainder of our time slice, effectively giving a |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5279 temporary priority boost to the child process. */ |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5280 Sleep (0); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5281 } |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
5282 } |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5283 else if (fd_info[fd].flags & FILE_SERIAL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5284 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5285 HANDLE hnd = fd_info[fd].hnd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5286 OVERLAPPED *ovl = &fd_info[fd].cp->ovl_read; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5287 COMMTIMEOUTS ct; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5288 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5289 /* Configure timeouts for blocking read. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5290 if (!GetCommTimeouts (hnd, &ct)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5291 return STATUS_READ_ERROR; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5292 ct.ReadIntervalTimeout = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5293 ct.ReadTotalTimeoutMultiplier = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5294 ct.ReadTotalTimeoutConstant = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5295 if (!SetCommTimeouts (hnd, &ct)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5296 return STATUS_READ_ERROR; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5297 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5298 if (!ReadFile (hnd, &cp->chr, sizeof (char), (DWORD*) &rc, ovl)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5299 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5300 if (GetLastError () != ERROR_IO_PENDING) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5301 return STATUS_READ_ERROR; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5302 if (!GetOverlappedResult (hnd, ovl, (DWORD*) &rc, TRUE)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5303 return STATUS_READ_ERROR; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5304 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5305 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5306 else if (fd_info[fd].flags & FILE_SOCKET) |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5307 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5308 unsigned long nblock = 0; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5309 /* We always want this to block, so temporarily disable NDELAY. */ |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5310 if (fd_info[fd].flags & FILE_NDELAY) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5311 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5312 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5313 rc = pfn_recv (SOCK_HANDLE (fd), &cp->chr, sizeof (char), 0); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5314 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5315 if (fd_info[fd].flags & FILE_NDELAY) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5316 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5317 nblock = 1; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5318 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5319 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
5320 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5321 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5322 if (rc == sizeof (char)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5323 cp->status = STATUS_READ_SUCCEEDED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5324 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5325 cp->status = STATUS_READ_FAILED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5326 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5327 return cp->status; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5328 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5329 |
74947 | 5330 int |
5331 _sys_wait_accept (int fd) | |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5332 { |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5333 HANDLE hEv; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5334 child_process * cp; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5335 int rc; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5336 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5337 if (fd < 0 || fd >= MAXDESC) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5338 return STATUS_READ_ERROR; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5339 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5340 cp = fd_info[fd].cp; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5341 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5342 if (cp == NULL || cp->fd != fd || cp->status != STATUS_READ_READY) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5343 return STATUS_READ_ERROR; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5344 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5345 cp->status = STATUS_READ_FAILED; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5346 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5347 hEv = pfn_WSACreateEvent (); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5348 rc = pfn_WSAEventSelect (SOCK_HANDLE (fd), hEv, FD_ACCEPT); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5349 if (rc != SOCKET_ERROR) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5350 { |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5351 rc = WaitForSingleObject (hEv, INFINITE); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5352 pfn_WSAEventSelect (SOCK_HANDLE (fd), NULL, 0); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5353 if (rc == WAIT_OBJECT_0) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5354 cp->status = STATUS_READ_SUCCEEDED; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5355 } |
74786
4f26e07fd85d
(_sys_wait_accept): Fix handle leak.
Kim F. Storm <storm@cua.dk>
parents:
72631
diff
changeset
|
5356 pfn_WSACloseEvent (hEv); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5357 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5358 return cp->status; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5359 } |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
5360 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5361 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5362 sys_read (int fd, char * buffer, unsigned int count) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5363 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5364 int nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5365 int to_read; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5366 DWORD waiting; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5367 char * orig_buffer = buffer; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5368 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
5369 if (fd < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5370 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5371 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5372 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5373 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5374 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5375 if (fd < MAXDESC && fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET | FILE_SERIAL)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5376 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5377 child_process *cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5378 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5379 if ((fd_info[fd].flags & FILE_READ) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5380 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5381 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5382 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5383 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5384 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5385 nchars = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5386 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5387 /* re-read CR carried over from last read */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5388 if (fd_info[fd].flags & FILE_LAST_CR) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5389 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5390 if (fd_info[fd].flags & FILE_BINARY) abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5391 *buffer++ = 0x0d; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5392 count--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5393 nchars++; |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5394 fd_info[fd].flags &= ~FILE_LAST_CR; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5395 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5396 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5397 /* presence of a child_process structure means we are operating in |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5398 non-blocking mode - otherwise we just call _read directly. |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5399 Note that the child_process structure might be missing because |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5400 reap_subprocess has been called; in this case the pipe is |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5401 already broken, so calling _read on it is okay. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5402 if (cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5403 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5404 int current_status = cp->status; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5405 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5406 switch (current_status) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5407 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5408 case STATUS_READ_FAILED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5409 case STATUS_READ_ERROR: |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5410 /* report normal EOF if nothing in buffer */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5411 if (nchars <= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5412 fd_info[fd].flags |= FILE_AT_EOF; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5413 return nchars; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5414 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5415 case STATUS_READ_READY: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5416 case STATUS_READ_IN_PROGRESS: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5417 DebPrint (("sys_read called when read is in progress\n")); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5418 errno = EWOULDBLOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5419 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5420 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5421 case STATUS_READ_SUCCEEDED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5422 /* consume read-ahead char */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5423 *buffer++ = cp->chr; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5424 count--; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5425 nchars++; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5426 cp->status = STATUS_READ_ACKNOWLEDGED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5427 ResetEvent (cp->char_avail); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5428 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5429 case STATUS_READ_ACKNOWLEDGED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5430 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5431 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5432 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5433 DebPrint (("sys_read: bad status %d\n", current_status)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5434 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5435 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5436 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5437 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5438 if (fd_info[fd].flags & FILE_PIPE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5439 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5440 PeekNamedPipe ((HANDLE) _get_osfhandle (fd), NULL, 0, NULL, &waiting, NULL); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5441 to_read = min (waiting, (DWORD) count); |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5442 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5443 if (to_read > 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5444 nchars += _read (fd, buffer, to_read); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5445 } |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5446 else if (fd_info[fd].flags & FILE_SERIAL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5447 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5448 HANDLE hnd = fd_info[fd].hnd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5449 OVERLAPPED *ovl = &fd_info[fd].cp->ovl_read; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5450 DWORD err = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5451 int rc = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5452 COMMTIMEOUTS ct; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5453 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5454 if (count > 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5455 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5456 /* Configure timeouts for non-blocking read. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5457 if (!GetCommTimeouts (hnd, &ct)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5458 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5459 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5460 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5461 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5462 ct.ReadIntervalTimeout = MAXDWORD; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5463 ct.ReadTotalTimeoutMultiplier = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5464 ct.ReadTotalTimeoutConstant = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5465 if (!SetCommTimeouts (hnd, &ct)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5466 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5467 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5468 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5469 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5470 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5471 if (!ResetEvent (ovl->hEvent)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5472 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5473 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5474 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5475 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5476 if (!ReadFile (hnd, buffer, count, (DWORD*) &rc, ovl)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5477 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5478 if (GetLastError () != ERROR_IO_PENDING) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5479 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5480 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5481 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5482 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5483 if (!GetOverlappedResult (hnd, ovl, (DWORD*) &rc, TRUE)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5484 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5485 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5486 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5487 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5488 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5489 nchars += rc; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5490 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5491 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5492 else /* FILE_SOCKET */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5493 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5494 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5495 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5496 /* do the equivalent of a non-blocking read */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5497 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONREAD, &waiting); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5498 if (waiting == 0 && nchars == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5499 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5500 h_errno = errno = EWOULDBLOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5501 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5502 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5503 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5504 if (waiting) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5505 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5506 /* always use binary mode for sockets */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5507 int res = pfn_recv (SOCK_HANDLE (fd), buffer, count, 0); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5508 if (res == SOCKET_ERROR) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5509 { |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
5510 DebPrint (("sys_read.recv failed with error %d on socket %ld\n", |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
5511 pfn_WSAGetLastError (), SOCK_HANDLE (fd))); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5512 set_errno (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5513 return -1; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5514 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5515 nchars += res; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5516 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5517 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5518 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5519 else |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5520 { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5521 int nread = _read (fd, buffer, count); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5522 if (nread >= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5523 nchars += nread; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5524 else if (nchars == 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5525 nchars = nread; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5526 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5527 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5528 if (nchars <= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5529 fd_info[fd].flags |= FILE_AT_EOF; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5530 /* Perform text mode translation if required. */ |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5531 else if ((fd_info[fd].flags & FILE_BINARY) == 0) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5532 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5533 nchars = crlf_to_lf (nchars, orig_buffer); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5534 /* If buffer contains only CR, return that. To be absolutely |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5535 sure we should attempt to read the next char, but in |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5536 practice a CR to be followed by LF would not appear by |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5537 itself in the buffer. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5538 if (nchars > 1 && orig_buffer[nchars - 1] == 0x0d) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5539 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5540 fd_info[fd].flags |= FILE_LAST_CR; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5541 nchars--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5542 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5543 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5544 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5545 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5546 nchars = _read (fd, buffer, count); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5547 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5548 return nchars; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5549 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5550 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5551 /* From w32xfns.c */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5552 extern HANDLE interrupt_handle; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5553 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5554 /* For now, don't bother with a non-blocking mode */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5555 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5556 sys_write (int fd, const void * buffer, unsigned int count) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5557 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5558 int nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5559 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
5560 if (fd < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5561 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5562 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5563 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5564 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5565 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5566 if (fd < MAXDESC && fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET | FILE_SERIAL)) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5567 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5568 if ((fd_info[fd].flags & FILE_WRITE) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5569 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5570 errno = EBADF; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5571 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5572 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5573 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5574 /* Perform text mode translation if required. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5575 if ((fd_info[fd].flags & FILE_BINARY) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5576 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5577 char * tmpbuf = alloca (count * 2); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5578 unsigned char * src = (void *)buffer; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5579 unsigned char * dst = tmpbuf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5580 int nbytes = count; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5581 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5582 while (1) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5583 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5584 unsigned char *next; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5585 /* copy next line or remaining bytes */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5586 next = _memccpy (dst, src, '\n', nbytes); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5587 if (next) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5588 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5589 /* copied one line ending with '\n' */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5590 int copied = next - dst; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5591 nbytes -= copied; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5592 src += copied; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5593 /* insert '\r' before '\n' */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5594 next[-1] = '\r'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5595 next[0] = '\n'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5596 dst = next + 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5597 count++; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5598 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5599 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5600 /* copied remaining partial line -> now finished */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5601 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5602 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5603 buffer = tmpbuf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5604 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5605 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5606 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5607 if (fd < MAXDESC && fd_info[fd].flags & FILE_SERIAL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5608 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5609 HANDLE hnd = (HANDLE) _get_osfhandle (fd); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5610 OVERLAPPED *ovl = &fd_info[fd].cp->ovl_write; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5611 HANDLE wait_hnd[2] = { interrupt_handle, ovl->hEvent }; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5612 DWORD active = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5613 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5614 if (!WriteFile (hnd, buffer, count, (DWORD*) &nchars, ovl)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5615 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5616 if (GetLastError () != ERROR_IO_PENDING) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5617 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5618 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5619 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5620 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5621 if (detect_input_pending ()) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5622 active = MsgWaitForMultipleObjects (2, wait_hnd, FALSE, INFINITE, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5623 QS_ALLINPUT); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5624 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5625 active = WaitForMultipleObjects (2, wait_hnd, FALSE, INFINITE); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5626 if (active == WAIT_OBJECT_0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5627 { /* User pressed C-g, cancel write, then leave. Don't bother |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5628 cleaning up as we may only get stuck in buggy drivers. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5629 PurgeComm (hnd, PURGE_TXABORT | PURGE_TXCLEAR); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5630 CancelIo (hnd); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5631 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5632 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5633 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5634 if (active == WAIT_OBJECT_0 + 1 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5635 && !GetOverlappedResult (hnd, ovl, (DWORD*) &nchars, TRUE)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5636 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5637 errno = EIO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5638 return -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5639 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5640 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5641 } |
110431
9fe8167bbd9b
Don't make W32 code conditional on HAVE_SOCKETS, it's always defined.
Juanma Barranquero <lekktu@gmail.com>
parents:
110400
diff
changeset
|
5642 else if (fd < MAXDESC && fd_info[fd].flags & FILE_SOCKET) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5643 { |
48545
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5644 unsigned long nblock = 0; |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5645 if (winsock_lib == NULL) abort (); |
48545
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5646 |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5647 /* TODO: implement select() properly so non-blocking I/O works. */ |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5648 /* For now, make sure the write blocks. */ |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5649 if (fd_info[fd].flags & FILE_NDELAY) |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5650 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5651 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5652 nchars = pfn_send (SOCK_HANDLE (fd), buffer, count, 0); |
48545
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5653 |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5654 /* Set the socket back to non-blocking if it was before, |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5655 for other operations that support it. */ |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5656 if (fd_info[fd].flags & FILE_NDELAY) |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5657 { |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5658 nblock = 1; |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5659 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5660 } |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
5661 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5662 if (nchars == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5663 { |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
5664 DebPrint (("sys_write.send failed with error %d on socket %ld\n", |
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
5665 pfn_WSAGetLastError (), SOCK_HANDLE (fd))); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5666 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5667 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5668 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5669 else |
108749 | 5670 { |
5671 /* Some networked filesystems don't like too large writes, so | |
5672 break them into smaller chunks. See the Comments section of | |
5673 the MSDN documentation of WriteFile for details behind the | |
5674 choice of the value of CHUNK below. See also the thread | |
5675 http://thread.gmane.org/gmane.comp.version-control.git/145294 | |
5676 in the git mailing list. */ | |
5677 const unsigned char *p = buffer; | |
5678 const unsigned chunk = 30 * 1024 * 1024; | |
5679 | |
5680 nchars = 0; | |
5681 while (count > 0) | |
5682 { | |
5683 unsigned this_chunk = count < chunk ? count : chunk; | |
5684 int n = _write (fd, p, this_chunk); | |
5685 | |
5686 nchars += n; | |
5687 if (n < 0) | |
5688 { | |
5689 nchars = n; | |
5690 break; | |
5691 } | |
5692 else if (n < this_chunk) | |
5693 break; | |
5694 count -= n; | |
5695 p += n; | |
5696 } | |
5697 } | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5698 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5699 return nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5700 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5701 |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5702 static void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5703 check_windows_init_file (void) |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5704 { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5705 extern int noninteractive, inhibit_window_system; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5706 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5707 /* A common indication that Emacs is not installed properly is when |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5708 it cannot find the Windows installation file. If this file does |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5709 not exist in the expected place, tell the user. */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5710 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5711 if (!noninteractive && !inhibit_window_system) |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5712 { |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5713 extern Lisp_Object Vwindow_system, Vload_path, Qfile_exists_p; |
23809
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
5714 Lisp_Object objs[2]; |
23559
989c9cb875e3
(check_windows_init_file): Also look in load path specified
Geoff Voelker <voelker@cs.washington.edu>
parents:
23395
diff
changeset
|
5715 Lisp_Object full_load_path; |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5716 Lisp_Object init_file; |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5717 int fd; |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5718 |
23809
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
5719 objs[0] = Vload_path; |
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
5720 objs[1] = decode_env_path (0, (getenv ("EMACSLOADPATH"))); |
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
5721 full_load_path = Fappend (2, objs); |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5722 init_file = build_string ("term/w32-win"); |
69172
e22243af3267
(check_windows_init_file): Use Fget_load_suffixes instead of Vload_suffixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68651
diff
changeset
|
5723 fd = openp (full_load_path, init_file, Fget_load_suffixes (), NULL, Qnil); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5724 if (fd < 0) |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5725 { |
23559
989c9cb875e3
(check_windows_init_file): Also look in load path specified
Geoff Voelker <voelker@cs.washington.edu>
parents:
23395
diff
changeset
|
5726 Lisp_Object load_path_print = Fprin1_to_string (full_load_path, Qnil); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45815
diff
changeset
|
5727 char *init_file_name = SDATA (init_file); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45815
diff
changeset
|
5728 char *load_path = SDATA (load_path_print); |
65458
02e47d7a9bca
(check_windows_init_file): Fix allocation of error buffer.
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
5729 char *buffer = alloca (1024 |
02e47d7a9bca
(check_windows_init_file): Fix allocation of error buffer.
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
5730 + strlen (init_file_name) |
02e47d7a9bca
(check_windows_init_file): Fix allocation of error buffer.
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
5731 + strlen (load_path)); |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5732 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5733 sprintf (buffer, |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5734 "The Emacs Windows initialization file \"%s.el\" " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5735 "could not be found in your Emacs installation. " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5736 "Emacs checked the following directories for this file:\n" |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5737 "\n%s\n\n" |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5738 "When Emacs cannot find this file, it usually means that it " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5739 "was not installed properly, or its distribution file was " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5740 "not unpacked properly.\nSee the README.W32 file in the " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5741 "top-level Emacs directory for more information.", |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5742 init_file_name, load_path); |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5743 MessageBox (NULL, |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5744 buffer, |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5745 "Emacs Abort Dialog", |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5746 MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL); |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5747 /* Use the low-level Emacs abort. */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5748 #undef abort |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5749 abort (); |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5750 } |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5751 else |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5752 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
5753 _close (fd); |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5754 } |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5755 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
5756 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5757 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5758 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5759 term_ntproc (void) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5760 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5761 /* shutdown the socket interface if necessary */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5762 term_winsock (); |
60092
04686828d0da
2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents:
57609
diff
changeset
|
5763 |
04686828d0da
2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents:
57609
diff
changeset
|
5764 term_w32select (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5765 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5766 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5767 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5768 init_ntproc (void) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5769 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5770 /* Initialise the socket interface now if available and requested by |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5771 the user by defining PRELOAD_WINSOCK; otherwise loading will be |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
5772 delayed until open-network-stream is called (w32-has-winsock can |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5773 also be used to dynamically load or reload winsock). |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5774 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5775 Conveniently, init_environment is called before us, so |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5776 PRELOAD_WINSOCK can be set in the registry. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5777 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5778 /* Always initialize this correctly. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5779 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5780 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5781 if (getenv ("PRELOAD_WINSOCK") != NULL) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
5782 init_winsock (TRUE); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5783 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5784 /* Initial preparation for subprocess support: replace our standard |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5785 handles with non-inheritable versions. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5786 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5787 HANDLE parent; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5788 HANDLE stdin_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5789 HANDLE stdout_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5790 HANDLE stderr_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5791 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5792 parent = GetCurrentProcess (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5793 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5794 /* ignore errors when duplicating and closing; typically the |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5795 handles will be invalid when running as a gui program. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5796 DuplicateHandle (parent, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5797 GetStdHandle (STD_INPUT_HANDLE), |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5798 parent, |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5799 &stdin_save, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5800 0, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5801 FALSE, |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5802 DUPLICATE_SAME_ACCESS); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5803 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5804 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5805 GetStdHandle (STD_OUTPUT_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5806 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5807 &stdout_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5808 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5809 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5810 DUPLICATE_SAME_ACCESS); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5811 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5812 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5813 GetStdHandle (STD_ERROR_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5814 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5815 &stderr_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5816 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5817 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5818 DUPLICATE_SAME_ACCESS); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5819 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5820 fclose (stdin); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5821 fclose (stdout); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5822 fclose (stderr); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5823 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5824 if (stdin_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5825 _open_osfhandle ((long) stdin_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5826 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5827 _open ("nul", O_TEXT | O_NOINHERIT | O_RDONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5828 _fdopen (0, "r"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5829 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5830 if (stdout_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5831 _open_osfhandle ((long) stdout_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5832 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5833 _open ("nul", O_TEXT | O_NOINHERIT | O_WRONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5834 _fdopen (1, "w"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5835 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5836 if (stderr_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5837 _open_osfhandle ((long) stderr_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5838 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5839 _open ("nul", O_TEXT | O_NOINHERIT | O_WRONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5840 _fdopen (2, "w"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5841 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5842 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5843 /* unfortunately, atexit depends on implementation of malloc */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5844 /* atexit (term_ntproc); */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5845 signal (SIGABRT, term_ntproc); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5846 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5847 /* determine which drives are fixed, for GetCachedVolumeInformation */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5848 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5849 /* GetDriveType must have trailing backslash. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5850 char drive[] = "A:\\"; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5851 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5852 /* Loop over all possible drive letters */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5853 while (*drive <= 'Z') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5854 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5855 /* Record if this drive letter refers to a fixed drive. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5856 fixed_drives[DRIVE_INDEX (*drive)] = |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5857 (GetDriveType (drive) == DRIVE_FIXED); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5858 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5859 (*drive)++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5860 } |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
5861 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
5862 /* Reset the volume info cache. */ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
5863 volume_cache = NULL; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
5864 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
5865 |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5866 /* Check to see if Emacs has been installed correctly. */ |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
5867 check_windows_init_file (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5868 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
5869 |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5870 /* |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5871 shutdown_handler ensures that buffers' autosave files are |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5872 up to date when the user logs off, or the system shuts down. |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5873 */ |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5874 BOOL WINAPI |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
5875 shutdown_handler (DWORD type) |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5876 { |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5877 /* Ctrl-C and Ctrl-Break are already suppressed, so don't handle them. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5878 if (type == CTRL_CLOSE_EVENT /* User closes console window. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5879 || type == CTRL_LOGOFF_EVENT /* User logs off. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5880 || type == CTRL_SHUTDOWN_EVENT) /* User shutsdown. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5881 { |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5882 /* Shut down cleanly, making sure autosave files are up to date. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5883 shut_down_emacs (0, 0, Qnil); |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5884 } |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5885 |
74786
4f26e07fd85d
(_sys_wait_accept): Fix handle leak.
Kim F. Storm <storm@cua.dk>
parents:
72631
diff
changeset
|
5886 /* Allow other handlers to handle this signal. */ |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5887 return FALSE; |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5888 } |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5889 |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5890 /* |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5891 globals_of_w32 is used to initialize those global variables that |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5892 must always be initialized on startup even when the global variable |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5893 initialized is non zero (see the function main in emacs.c). |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5894 */ |
74947 | 5895 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5896 globals_of_w32 (void) |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5897 { |
81421
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
5898 HMODULE kernel32 = GetModuleHandle ("kernel32.dll"); |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
5899 |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
5900 get_process_times_fn = (GetProcessTimes_Proc) |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
5901 GetProcAddress (kernel32, "GetProcessTimes"); |
5e608f6f217b
(get_process_times_fn): New function pointer.
Jason Rumney <jasonr@gnu.org>
parents:
81416
diff
changeset
|
5902 |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5903 g_b_init_is_windows_9x = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5904 g_b_init_open_process_token = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5905 g_b_init_get_token_information = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5906 g_b_init_lookup_account_sid = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5907 g_b_init_get_sid_identifier_authority = 0; |
92124
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
5908 g_b_init_get_sid_sub_authority = 0; |
0249dbc614f0
(globals_of_w32): Add initializations for g_b_init_get_sid_sub_authority and
Eli Zaretskii <eliz@gnu.org>
parents:
91878
diff
changeset
|
5909 g_b_init_get_sid_sub_authority_count = 0; |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5910 g_b_init_get_file_security = 0; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5911 g_b_init_get_security_descriptor_owner = 0; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5912 g_b_init_get_security_descriptor_group = 0; |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5913 g_b_init_is_valid_sid = 0; |
97365
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5914 g_b_init_create_toolhelp32_snapshot = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5915 g_b_init_process32_first = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5916 g_b_init_process32_next = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5917 g_b_init_open_thread_token = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5918 g_b_init_impersonate_self = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5919 g_b_init_revert_to_self = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5920 g_b_init_get_process_memory_info = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5921 g_b_init_get_process_working_set_size = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5922 g_b_init_global_memory_status = 0; |
a8d58587d1b0
Include thelp32.h, psapi.h and coding.h.
Eli Zaretskii <eliz@gnu.org>
parents:
96462
diff
changeset
|
5923 g_b_init_global_memory_status_ex = 0; |
97491
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
5924 g_b_init_equal_sid = 0; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
5925 g_b_init_copy_sid = 0; |
bb6b5c0fc1ba
(CopySid_Proc, EqualSid_Proc, GetLengthSid_Proc): New typedefs.
Eli Zaretskii <eliz@gnu.org>
parents:
97488
diff
changeset
|
5926 g_b_init_get_length_sid = 0; |
103718
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
5927 g_b_init_get_native_system_info = 0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
5928 g_b_init_get_system_times = 0; |
9a76dfa56921
Emulation of `getloadavg' on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
103624
diff
changeset
|
5929 num_of_processors = 0; |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5930 /* The following sets a handler for shutdown notifications for |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5931 console apps. This actually applies to Emacs in both console and |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5932 GUI modes, since we had to fool windows into thinking emacs is a |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
5933 console application to get console mode to work. */ |
109160
f8660b83cdbf
Fix whitespace to follow coding guidelines.
Juanma Barranquero <lekktu@gmail.com>
parents:
109152
diff
changeset
|
5934 SetConsoleCtrlHandler (shutdown_handler, TRUE); |
94814
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5935 |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5936 /* "None" is the default group name on standalone workstations. */ |
5ad1f4d9b15c
Support for reporting owner and group of each file on MS-Windows:
Eli Zaretskii <eliz@gnu.org>
parents:
94797
diff
changeset
|
5937 strcpy (dflt_group_name, "None"); |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5938 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
5939 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5940 /* For make-serial-process */ |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5941 int |
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5942 serial_open (char *port) |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5943 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5944 HANDLE hnd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5945 child_process *cp; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5946 int fd = -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5947 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5948 hnd = CreateFile (port, GENERIC_READ | GENERIC_WRITE, 0, 0, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5949 OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5950 if (hnd == INVALID_HANDLE_VALUE) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5951 error ("Could not open %s", port); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5952 fd = (int) _open_osfhandle ((int) hnd, 0); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5953 if (fd == -1) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5954 error ("Could not open %s", port); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5955 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5956 cp = new_child (); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5957 if (!cp) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5958 error ("Could not create child process"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5959 cp->fd = fd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5960 cp->status = STATUS_READ_ACKNOWLEDGED; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5961 fd_info[ fd ].hnd = hnd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5962 fd_info[ fd ].flags |= |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5963 FILE_READ | FILE_WRITE | FILE_BINARY | FILE_SERIAL; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5964 if (fd_info[ fd ].cp != NULL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5965 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5966 error ("fd_info[fd = %d] is already in use", fd); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5967 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5968 fd_info[ fd ].cp = cp; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5969 cp->ovl_read.hEvent = CreateEvent (NULL, TRUE, FALSE, NULL); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5970 if (cp->ovl_read.hEvent == NULL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5971 error ("Could not create read event"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5972 cp->ovl_write.hEvent = CreateEvent (NULL, TRUE, FALSE, NULL); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5973 if (cp->ovl_write.hEvent == NULL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5974 error ("Could not create write event"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5975 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5976 return fd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5977 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5978 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5979 /* For serial-process-configure */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5980 void |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5981 serial_configure (struct Lisp_Process *p, |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
108749
diff
changeset
|
5982 Lisp_Object contact) |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5983 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5984 Lisp_Object childp2 = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5985 Lisp_Object tem = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5986 HANDLE hnd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5987 DCB dcb; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5988 COMMTIMEOUTS ct; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5989 char summary[4] = "???"; /* This usually becomes "8N1". */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5990 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5991 if ((fd_info[ p->outfd ].flags & FILE_SERIAL) == 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5992 error ("Not a serial process"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5993 hnd = fd_info[ p->outfd ].hnd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5994 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5995 childp2 = Fcopy_sequence (p->childp); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5996 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5997 /* Initialize timeouts for blocking read and blocking write. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5998 if (!GetCommTimeouts (hnd, &ct)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
5999 error ("GetCommTimeouts() failed"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6000 ct.ReadIntervalTimeout = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6001 ct.ReadTotalTimeoutMultiplier = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6002 ct.ReadTotalTimeoutConstant = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6003 ct.WriteTotalTimeoutMultiplier = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6004 ct.WriteTotalTimeoutConstant = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6005 if (!SetCommTimeouts (hnd, &ct)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6006 error ("SetCommTimeouts() failed"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6007 /* Read port attributes and prepare default configuration. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6008 memset (&dcb, 0, sizeof (dcb)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6009 dcb.DCBlength = sizeof (DCB); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6010 if (!GetCommState (hnd, &dcb)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6011 error ("GetCommState() failed"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6012 dcb.fBinary = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6013 dcb.fNull = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6014 dcb.fAbortOnError = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6015 /* dcb.XonLim and dcb.XoffLim are set by GetCommState() */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6016 dcb.ErrorChar = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6017 dcb.EofChar = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6018 dcb.EvtChar = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6019 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6020 /* Configure speed. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6021 if (!NILP (Fplist_member (contact, QCspeed))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6022 tem = Fplist_get (contact, QCspeed); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6023 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6024 tem = Fplist_get (p->childp, QCspeed); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6025 CHECK_NUMBER (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6026 dcb.BaudRate = XINT (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6027 childp2 = Fplist_put (childp2, QCspeed, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6028 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6029 /* Configure bytesize. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6030 if (!NILP (Fplist_member (contact, QCbytesize))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6031 tem = Fplist_get (contact, QCbytesize); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6032 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6033 tem = Fplist_get (p->childp, QCbytesize); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6034 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6035 tem = make_number (8); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6036 CHECK_NUMBER (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6037 if (XINT (tem) != 7 && XINT (tem) != 8) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6038 error (":bytesize must be nil (8), 7, or 8"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6039 dcb.ByteSize = XINT (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6040 summary[0] = XINT (tem) + '0'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6041 childp2 = Fplist_put (childp2, QCbytesize, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6042 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6043 /* Configure parity. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6044 if (!NILP (Fplist_member (contact, QCparity))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6045 tem = Fplist_get (contact, QCparity); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6046 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6047 tem = Fplist_get (p->childp, QCparity); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6048 if (!NILP (tem) && !EQ (tem, Qeven) && !EQ (tem, Qodd)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6049 error (":parity must be nil (no parity), `even', or `odd'"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6050 dcb.fParity = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6051 dcb.Parity = NOPARITY; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6052 dcb.fErrorChar = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6053 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6054 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6055 summary[1] = 'N'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6056 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6057 else if (EQ (tem, Qeven)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6058 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6059 summary[1] = 'E'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6060 dcb.fParity = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6061 dcb.Parity = EVENPARITY; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6062 dcb.fErrorChar = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6063 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6064 else if (EQ (tem, Qodd)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6065 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6066 summary[1] = 'O'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6067 dcb.fParity = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6068 dcb.Parity = ODDPARITY; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6069 dcb.fErrorChar = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6070 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6071 childp2 = Fplist_put (childp2, QCparity, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6072 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6073 /* Configure stopbits. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6074 if (!NILP (Fplist_member (contact, QCstopbits))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6075 tem = Fplist_get (contact, QCstopbits); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6076 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6077 tem = Fplist_get (p->childp, QCstopbits); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6078 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6079 tem = make_number (1); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6080 CHECK_NUMBER (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6081 if (XINT (tem) != 1 && XINT (tem) != 2) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6082 error (":stopbits must be nil (1 stopbit), 1, or 2"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6083 summary[2] = XINT (tem) + '0'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6084 if (XINT (tem) == 1) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6085 dcb.StopBits = ONESTOPBIT; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6086 else if (XINT (tem) == 2) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6087 dcb.StopBits = TWOSTOPBITS; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6088 childp2 = Fplist_put (childp2, QCstopbits, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6089 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6090 /* Configure flowcontrol. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6091 if (!NILP (Fplist_member (contact, QCflowcontrol))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6092 tem = Fplist_get (contact, QCflowcontrol); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6093 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6094 tem = Fplist_get (p->childp, QCflowcontrol); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6095 if (!NILP (tem) && !EQ (tem, Qhw) && !EQ (tem, Qsw)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6096 error (":flowcontrol must be nil (no flowcontrol), `hw', or `sw'"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6097 dcb.fOutxCtsFlow = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6098 dcb.fOutxDsrFlow = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6099 dcb.fDtrControl = DTR_CONTROL_DISABLE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6100 dcb.fDsrSensitivity = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6101 dcb.fTXContinueOnXoff = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6102 dcb.fOutX = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6103 dcb.fInX = FALSE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6104 dcb.fRtsControl = RTS_CONTROL_DISABLE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6105 dcb.XonChar = 17; /* Control-Q */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6106 dcb.XoffChar = 19; /* Control-S */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6107 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6108 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6109 /* Already configured. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6110 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6111 else if (EQ (tem, Qhw)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6112 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6113 dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6114 dcb.fOutxCtsFlow = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6115 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6116 else if (EQ (tem, Qsw)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6117 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6118 dcb.fOutX = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6119 dcb.fInX = TRUE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6120 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6121 childp2 = Fplist_put (childp2, QCflowcontrol, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6122 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6123 /* Activate configuration. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6124 if (!SetCommState (hnd, &dcb)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6125 error ("SetCommState() failed"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6126 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6127 childp2 = Fplist_put (childp2, QCsummary, build_string (summary)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6128 p->childp = childp2; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6129 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95481
diff
changeset
|
6130 |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
6131 /* end of w32.c */ |
52401 | 6132 |
6133 /* arch-tag: 90442dd3-37be-482b-b272-ac752e3049f1 | |
6134 (do not change this comment) */ |