Mercurial > emacs
annotate src/w32.c @ 21790:825e1cc8f4b7
[HAVE_MENUS]: Include xterm.h only if HAVE_WINDOW_SYSTEM is defined.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 27 Apr 1998 20:30:51 +0000 |
parents | c11ef8945466 |
children | c33bec4d9e67 |
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. |
11384 | 2 Copyright (C) 1994, 1995 Free Software Foundation, Inc. |
9803 | 3 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
4 This file is part of GNU Emacs. |
9803 | 5 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
6 GNU Emacs is free software; you can redistribute it and/or modify |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
7 it under the terms of the GNU General Public License as published by |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
8 the Free Software Foundation; either version 2, or (at your option) |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
9 any later version. |
9803 | 10 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
11 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
|
12 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
|
13 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
|
14 GNU General Public License for more details. |
9803 | 15 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
16 You should have received a copy of the GNU General Public License |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
17 along with GNU Emacs; see the file COPYING. If not, write to |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
19 Boston, MA 02111-1307, USA. |
9803 | 20 |
21 Geoff Voelker (voelker@cs.washington.edu) 7-29-94 | |
22 */ | |
23 | |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
24 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
25 #include <stddef.h> /* for offsetof */ |
9803 | 26 #include <stdlib.h> |
27 #include <stdio.h> | |
28 #include <io.h> | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
29 #include <errno.h> |
9803 | 30 #include <fcntl.h> |
31 #include <ctype.h> | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
32 #include <signal.h> |
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> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
35 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
36 /* must include CRT headers *before* config.h */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
37 #include "config.h" |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
38 #undef access |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
39 #undef chdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
40 #undef chmod |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
41 #undef creat |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
42 #undef ctime |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
43 #undef fopen |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
44 #undef link |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
45 #undef mkdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
46 #undef mktemp |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
47 #undef open |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
48 #undef rename |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
49 #undef rmdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
50 #undef unlink |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
51 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
52 #undef close |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
53 #undef dup |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
54 #undef dup2 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
55 #undef pipe |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
56 #undef read |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
57 #undef write |
9803 | 58 |
59 #include "lisp.h" | |
60 | |
61 #include <pwd.h> | |
62 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
63 #include <windows.h> |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
64 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
65 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
66 #include <sys/socket.h> |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
67 #undef socket |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
68 #undef bind |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
69 #undef connect |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
70 #undef htons |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
71 #undef ntohs |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
72 #undef inet_addr |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
73 #undef gethostname |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
74 #undef gethostbyname |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
75 #undef getservbyname |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
76 #undef shutdown |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
77 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
78 |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
79 #include "w32.h" |
9803 | 80 #include "ndir.h" |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
81 #include "w32heap.h" |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
82 |
21456 | 83 #undef min |
84 #undef max | |
85 #define min(x, y) (((x) < (y)) ? (x) : (y)) | |
86 #define max(x, y) (((x) > (y)) ? (x) : (y)) | |
87 | |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
88 extern Lisp_Object Vw32_downcase_file_names; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
89 extern Lisp_Object Vw32_generate_fake_inodes; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
90 extern Lisp_Object Vw32_get_true_file_attributes; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
91 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
92 static char startup_dir[MAXPATHLEN]; |
9803 | 93 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
94 /* Get the current working directory. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
95 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
96 getwd (char *dir) |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
97 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
98 #if 0 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
99 if (GetCurrentDirectory (MAXPATHLEN, dir) > 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
100 return dir; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
101 return NULL; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
102 #else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
103 /* 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
|
104 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
|
105 conflicts when trying to rename or delete directories. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
106 strcpy (dir, startup_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
107 return dir; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
108 #endif |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
109 } |
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
110 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
111 #ifndef HAVE_SOCKETS |
9803 | 112 /* Emulate gethostname. */ |
113 int | |
114 gethostname (char *buffer, int size) | |
115 { | |
116 /* NT only allows small host names, so the buffer is | |
117 certainly large enough. */ | |
118 return !GetComputerName (buffer, &size); | |
119 } | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
120 #endif /* HAVE_SOCKETS */ |
9803 | 121 |
122 /* Emulate getloadavg. */ | |
123 int | |
124 getloadavg (double loadavg[], int nelem) | |
125 { | |
126 int i; | |
127 | |
128 /* A faithful emulation is going to have to be saved for a rainy day. */ | |
129 for (i = 0; i < nelem; i++) | |
130 { | |
131 loadavg[i] = 0.0; | |
132 } | |
133 return i; | |
134 } | |
135 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
136 /* Emulate getpwuid, getpwnam and others. */ |
9803 | 137 |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
138 #define PASSWD_FIELD_SIZE 256 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
139 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
140 static char the_passwd_name[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
141 static char the_passwd_passwd[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
142 static char the_passwd_gecos[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
143 static char the_passwd_dir[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
144 static char the_passwd_shell[PASSWD_FIELD_SIZE]; |
9803 | 145 |
146 static struct passwd the_passwd = | |
147 { | |
148 the_passwd_name, | |
149 the_passwd_passwd, | |
150 0, | |
151 0, | |
152 0, | |
153 the_passwd_gecos, | |
154 the_passwd_dir, | |
155 the_passwd_shell, | |
156 }; | |
157 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
158 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
159 getuid () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
160 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
161 return the_passwd.pw_uid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
162 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
163 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
164 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
165 geteuid () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
166 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
167 /* 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
|
168 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
|
169 case, but I don't know how wise that would be in the long run. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
170 return getuid (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
171 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
172 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
173 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
174 getgid () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
175 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
176 return the_passwd.pw_gid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
177 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
178 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
179 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
180 getegid () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
181 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
182 return getgid (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
183 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
184 |
9803 | 185 struct passwd * |
186 getpwuid (int uid) | |
187 { | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
188 if (uid == the_passwd.pw_uid) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
189 return &the_passwd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
190 return NULL; |
9803 | 191 } |
192 | |
193 struct passwd * | |
194 getpwnam (char *name) | |
195 { | |
196 struct passwd *pw; | |
197 | |
198 pw = getpwuid (getuid ()); | |
199 if (!pw) | |
200 return pw; | |
201 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
202 if (stricmp (name, pw->pw_name)) |
9803 | 203 return NULL; |
204 | |
205 return pw; | |
206 } | |
207 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
208 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
209 init_user_info () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
210 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
211 /* 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
|
212 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
|
213 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
214 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
|
215 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
|
216 primary group sid from the process token). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
217 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
218 char user_sid[256], name[256], domain[256]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
219 DWORD length = sizeof (name), dlength = sizeof (domain), trash; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
220 HANDLE token = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
221 SID_NAME_USE user_type; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
222 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
223 if (OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &token) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
224 && GetTokenInformation (token, TokenUser, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
225 (PVOID) user_sid, sizeof (user_sid), &trash) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
226 && LookupAccountSid (NULL, *((PSID *) user_sid), name, &length, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
227 domain, &dlength, &user_type)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
228 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
229 strcpy (the_passwd.pw_name, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
230 /* Determine a reasonable uid value. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
231 if (stricmp ("administrator", name) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
232 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
233 the_passwd.pw_uid = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
234 the_passwd.pw_gid = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
235 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
236 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
237 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
238 SID_IDENTIFIER_AUTHORITY * pSIA; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
239 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
240 pSIA = GetSidIdentifierAuthority (*((PSID *) user_sid)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
241 /* I believe the relative portion is the last 4 bytes (of 6) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
242 with msb first. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
243 the_passwd.pw_uid = ((pSIA->Value[2] << 24) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
244 (pSIA->Value[3] << 16) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
245 (pSIA->Value[4] << 8) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
246 (pSIA->Value[5] << 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
247 /* restrict to conventional uid range for normal users */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
248 the_passwd.pw_uid = the_passwd.pw_uid % 60001; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
249 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
250 /* Get group id */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
251 if (GetTokenInformation (token, TokenPrimaryGroup, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
252 (PVOID) user_sid, sizeof (user_sid), &trash)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
253 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
254 SID_IDENTIFIER_AUTHORITY * pSIA; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
255 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
256 pSIA = GetSidIdentifierAuthority (*((PSID *) user_sid)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
257 the_passwd.pw_gid = ((pSIA->Value[2] << 24) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
258 (pSIA->Value[3] << 16) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
259 (pSIA->Value[4] << 8) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
260 (pSIA->Value[5] << 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
261 /* I don't know if this is necessary, but for safety... */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
262 the_passwd.pw_gid = the_passwd.pw_gid % 60001; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
263 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
264 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
265 the_passwd.pw_gid = the_passwd.pw_uid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
266 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
267 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
268 /* If security calls are not supported (presumably because we |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
269 are running under Windows 95), fallback to this. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
270 else if (GetUserName (name, &length)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
271 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
272 strcpy (the_passwd.pw_name, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
273 if (stricmp ("administrator", name) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
274 the_passwd.pw_uid = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
275 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
276 the_passwd.pw_uid = 123; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
277 the_passwd.pw_gid = the_passwd.pw_uid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
278 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
279 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
280 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
281 strcpy (the_passwd.pw_name, "unknown"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
282 the_passwd.pw_uid = 123; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
283 the_passwd.pw_gid = 123; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
284 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
285 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
286 /* Ensure HOME and SHELL are defined. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
287 if (getenv ("HOME") == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
288 putenv ("HOME=c:/"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
289 if (getenv ("SHELL") == NULL) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
290 putenv (os_subtype == OS_WIN95 ? "SHELL=command" : "SHELL=cmd"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
291 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
292 /* Set dir and shell from environment variables. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
293 strcpy (the_passwd.pw_dir, getenv ("HOME")); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
294 strcpy (the_passwd.pw_shell, getenv ("SHELL")); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
295 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
296 if (token) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
297 CloseHandle (token); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
298 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
299 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
300 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
301 random () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
302 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
303 /* 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
|
304 return ((rand () << 15) | rand ()); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
305 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
306 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
307 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
308 srandom (int seed) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
309 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
310 srand (seed); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
311 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
312 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
313 |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
314 /* Normalize filename by converting all path separators to |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
315 the specified separator. Also conditionally convert upper |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
316 case path name components to lower case. */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
317 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
318 static void |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
319 normalize_filename (fp, path_sep) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
320 register char *fp; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
321 char path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
322 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
323 char sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
324 char *elem; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
325 |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
326 /* 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
|
327 preserves case in filenames. |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
328 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
|
329 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
|
330 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
|
331 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
|
332 { |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
333 *fp += 'a' - 'A'; |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
334 fp += 2; |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
335 } |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
336 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
337 if (NILP (Vw32_downcase_file_names)) |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
338 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
339 while (*fp) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
340 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
341 if (*fp == '/' || *fp == '\\') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
342 *fp = path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
343 fp++; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
344 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
345 return; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
346 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
347 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
348 sep = path_sep; /* convert to this path separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
349 elem = fp; /* start of current path element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
350 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
351 do { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
352 if (*fp >= 'a' && *fp <= 'z') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
353 elem = 0; /* don't convert this element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
354 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
355 if (*fp == 0 || *fp == ':') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
356 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
357 sep = *fp; /* restore current separator (or 0) */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
358 *fp = '/'; /* after conversion of this element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
359 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
360 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
361 if (*fp == '/' || *fp == '\\') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
362 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
363 if (elem && elem != fp) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
364 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
365 *fp = 0; /* temporary end of string */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
366 _strlwr (elem); /* while we convert to lower case */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
367 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
368 *fp = sep; /* convert (or restore) path separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
369 elem = fp + 1; /* next element starts after separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
370 sep = path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
371 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
372 } while (*fp++); |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
373 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
374 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
375 /* Destructively turn backslashes into slashes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
376 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
377 dostounix_filename (p) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
378 register char *p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
379 { |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
380 normalize_filename (p, '/'); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
381 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
382 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
383 /* Destructively turn slashes into backslashes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
384 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
385 unixtodos_filename (p) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
386 register char *p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
387 { |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
388 normalize_filename (p, '\\'); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
389 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
390 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
391 /* 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
|
392 (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
|
393 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
|
394 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
395 crlf_to_lf (n, buf) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
396 register int n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
397 register unsigned char *buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
398 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
399 unsigned char *np = buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
400 unsigned char *startp = buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
401 unsigned char *endp = buf + n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
402 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
403 if (n == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
404 return n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
405 while (buf < endp - 1) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
406 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
407 if (*buf == 0x0d) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
408 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
409 if (*(++buf) != 0x0a) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
410 *np++ = 0x0d; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
411 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
412 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
413 *np++ = *buf++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
414 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
415 if (buf < endp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
416 *np++ = *buf++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
417 return np - startp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
418 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
419 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
420 /* 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
|
421 optionally store pointer to char after root. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
422 static int |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
423 parse_root (char * name, char ** pPath) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
424 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
425 char * start = name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
426 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
427 if (name == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
428 return 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
429 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
430 /* find the root name of the volume if given */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
431 if (isalpha (name[0]) && name[1] == ':') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
432 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
433 /* skip past drive specifier */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
434 name += 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
435 if (IS_DIRECTORY_SEP (name[0])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
436 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
437 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
438 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
|
439 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
440 int slashes = 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
441 name += 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
442 do |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
443 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
444 if (IS_DIRECTORY_SEP (*name) && --slashes == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
445 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
446 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
447 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
448 while ( *name ); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
449 if (IS_DIRECTORY_SEP (name[0])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
450 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
451 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
452 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
453 if (pPath) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
454 *pPath = name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
455 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
456 return name - start; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
457 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
458 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
459 /* 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
|
460 static int |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
461 get_long_basename (char * name, char * buf, int size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
462 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
463 WIN32_FIND_DATA find_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
464 HANDLE dir_handle; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
465 int len = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
466 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
467 dir_handle = FindFirstFile (name, &find_data); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
468 if (dir_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
469 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
470 if ((len = strlen (find_data.cFileName)) < size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
471 memcpy (buf, find_data.cFileName, len + 1); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
472 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
473 len = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
474 FindClose (dir_handle); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
475 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
476 return len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
477 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
478 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
479 /* 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
|
480 BOOL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
481 w32_get_long_filename (char * name, char * buf, int size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
482 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
483 char * o = buf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
484 char * p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
485 char * q; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
486 char full[ MAX_PATH ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
487 int len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
488 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
489 len = strlen (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
490 if (len >= MAX_PATH) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
491 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
492 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
493 /* Use local copy for destructive modification. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
494 memcpy (full, name, len+1); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
495 unixtodos_filename (full); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
496 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
497 /* Copy root part verbatim. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
498 len = parse_root (full, &p); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
499 memcpy (o, full, len); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
500 o += len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
501 size -= len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
502 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
503 do |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
504 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
505 q = p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
506 p = strchr (q, '\\'); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
507 if (p) *p = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
508 len = get_long_basename (full, o, size); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
509 if (len > 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
510 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
511 o += len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
512 size -= len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
513 if (p != NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
514 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
515 *p++ = '\\'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
516 if (size < 2) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
517 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
518 *o++ = '\\'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
519 size--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
520 *o = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
521 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
522 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
523 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
524 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
525 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
526 while (p != NULL && *p); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
527 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
528 return TRUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
529 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
530 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
531 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
532 /* 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
|
533 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
534 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
535 sigsetmask (int signal_mask) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
536 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
537 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
538 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
539 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
540 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
541 sigblock (int sig) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
542 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
543 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
544 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
545 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
546 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
547 setpgrp (int pid, int gid) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
548 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
549 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
550 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
551 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
552 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
553 alarm (int seconds) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
554 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
555 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
556 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
557 |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
558 void |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
559 unrequest_sigio (void) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
560 { |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
561 return; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
562 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
563 |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
564 void |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
565 request_sigio (void) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
566 { |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
567 return; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
568 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
569 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
570 #define REG_ROOT "SOFTWARE\\GNU\\Emacs" |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
571 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
572 LPBYTE |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
573 w32_get_resource (key, lpdwtype) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
574 char *key; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
575 LPDWORD lpdwtype; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
576 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
577 LPBYTE lpvalue; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
578 HKEY hrootkey = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
579 DWORD cbData; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
580 BOOL ok = FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
581 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
582 /* Check both the current user and the local machine to see if |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
583 we have any resources. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
584 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
585 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
|
586 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
587 lpvalue = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
588 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
589 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
590 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
591 && 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
|
592 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
593 return (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
594 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
595 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
596 if (lpvalue) xfree (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
597 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
598 RegCloseKey (hrootkey); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
599 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
600 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
601 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
|
602 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
603 lpvalue = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
604 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
605 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
606 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
607 && 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
|
608 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
609 return (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
610 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
611 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
612 if (lpvalue) xfree (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
613 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
614 RegCloseKey (hrootkey); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
615 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
616 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
617 return (NULL); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
618 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
619 |
16892
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
620 char *get_emacs_configuration (void); |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
621 extern Lisp_Object Vsystem_configuration; |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
622 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
623 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
624 init_environment () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
625 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
626 /* Check for environment variables and use registry if they don't exist */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
627 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
628 int i; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
629 LPBYTE lpval; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
630 DWORD dwType; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
631 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
632 static char * env_vars[] = |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
633 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
634 "HOME", |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
635 "PRELOAD_WINSOCK", |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
636 "emacs_dir", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
637 "EMACSLOADPATH", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
638 "SHELL", |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
639 "CMDPROXY", |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
640 "EMACSDATA", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
641 "EMACSPATH", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
642 "EMACSLOCKDIR", |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
643 /* We no longer set INFOPATH because Info-default-directory-list |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
644 is then ignored. We use a hook in winnt.el instead. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
645 /* "INFOPATH", */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
646 "EMACSDOC", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
647 "TERM", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
648 }; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
649 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
650 for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
651 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
652 if (!getenv (env_vars[i]) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
653 && (lpval = w32_get_resource (env_vars[i], &dwType)) != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
654 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
655 if (dwType == REG_EXPAND_SZ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
656 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
657 char buf1[500], buf2[500]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
658 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
659 ExpandEnvironmentStrings ((LPSTR) lpval, buf1, 500); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
660 _snprintf (buf2, 499, "%s=%s", env_vars[i], buf1); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
661 putenv (strdup (buf2)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
662 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
663 else if (dwType == REG_SZ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
664 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
665 char buf[500]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
666 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
667 _snprintf (buf, 499, "%s=%s", env_vars[i], lpval); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
668 putenv (strdup (buf)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
669 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
670 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
671 xfree (lpval); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
672 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
673 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
674 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
675 |
16892
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
676 /* Rebuild system configuration to reflect invoking system. */ |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
677 Vsystem_configuration = build_string (EMACS_CONFIGURATION); |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
678 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
679 /* 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
|
680 "Path" although cmd.exe (perhaps NT itself) arranges for |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
681 environment variable lookup and setting to be case insensitive. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
682 However, Emacs assumes a fully case sensitive environment, so we |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
683 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
|
684 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
|
685 modifying the string in the C runtime environ entry. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
686 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
687 The same applies to COMSPEC. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
688 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
689 char ** envp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
690 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
691 for (envp = environ; *envp; envp++) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
692 if (_strnicmp (*envp, "PATH=", 5) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
693 memcpy (*envp, "PATH=", 5); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
694 else if (_strnicmp (*envp, "COMSPEC=", 8) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
695 memcpy (*envp, "COMSPEC=", 8); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
696 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
697 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
698 /* Remember the initial working directory for getwd, then make the |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
699 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
|
700 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
|
701 running subprocesses for the same reason.) */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
702 if (!GetCurrentDirectory (MAXPATHLEN, startup_dir)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
703 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
704 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
705 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
706 char *p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
707 char modname[MAX_PATH]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
708 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
709 if (!GetModuleFileName (NULL, modname, MAX_PATH)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
710 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
711 if ((p = strrchr (modname, '\\')) == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
712 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
713 *p = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
714 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
715 SetCurrentDirectory (modname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
716 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
717 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
718 init_user_info (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
719 } |
9803 | 720 |
721 /* We don't have scripts to automatically determine the system configuration | |
722 for Emacs before it's compiled, and we don't want to have to make the | |
723 user enter it, so we define EMACS_CONFIGURATION to invoke this runtime | |
724 routine. */ | |
725 | |
11941
cb26a4ca0e10
(configuration_buffer): Increase size.
Geoff Voelker <voelker@cs.washington.edu>
parents:
11384
diff
changeset
|
726 static char configuration_buffer[32]; |
9803 | 727 |
728 char * | |
729 get_emacs_configuration (void) | |
730 { | |
13156 | 731 char *arch, *oem, *os; |
9803 | 732 |
13156 | 733 /* Determine the processor type. */ |
734 switch (get_processor_type ()) | |
735 { | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
736 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
737 #ifdef PROCESSOR_INTEL_386 |
13156 | 738 case PROCESSOR_INTEL_386: |
739 case PROCESSOR_INTEL_486: | |
740 case PROCESSOR_INTEL_PENTIUM: | |
741 arch = "i386"; | |
742 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
743 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
744 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
745 #ifdef PROCESSOR_INTEL_860 |
13156 | 746 case PROCESSOR_INTEL_860: |
747 arch = "i860"; | |
748 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
749 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
750 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
751 #ifdef PROCESSOR_MIPS_R2000 |
13156 | 752 case PROCESSOR_MIPS_R2000: |
753 case PROCESSOR_MIPS_R3000: | |
754 case PROCESSOR_MIPS_R4000: | |
755 arch = "mips"; | |
756 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
757 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
758 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
759 #ifdef PROCESSOR_ALPHA_21064 |
13156 | 760 case PROCESSOR_ALPHA_21064: |
761 arch = "alpha"; | |
762 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
763 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
764 |
13156 | 765 default: |
766 arch = "unknown"; | |
767 break; | |
768 } | |
9803 | 769 |
13156 | 770 /* Let oem be "*" until we figure out how to decode the OEM field. */ |
771 oem = "*"; | |
9803 | 772 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
773 os = (GetVersion () & OS_WIN95) ? "windows95" : "nt"; |
11941
cb26a4ca0e10
(configuration_buffer): Increase size.
Geoff Voelker <voelker@cs.washington.edu>
parents:
11384
diff
changeset
|
774 |
13156 | 775 sprintf (configuration_buffer, "%s-%s-%s%d.%d", arch, oem, os, |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
776 get_w32_major_version (), get_w32_minor_version ()); |
13156 | 777 return configuration_buffer; |
9803 | 778 } |
779 | |
11384 | 780 #include <sys/timeb.h> |
781 | |
782 /* Emulate gettimeofday (Ulrich Leodolter, 1/11/95). */ | |
783 void | |
784 gettimeofday (struct timeval *tv, struct timezone *tz) | |
785 { | |
786 struct _timeb tb; | |
787 _ftime (&tb); | |
788 | |
789 tv->tv_sec = tb.time; | |
790 tv->tv_usec = tb.millitm * 1000L; | |
791 if (tz) | |
792 { | |
793 tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich */ | |
794 tz->tz_dsttime = tb.dstflag; /* type of dst correction */ | |
795 } | |
796 } | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
797 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
798 /* ------------------------------------------------------------------------- */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
799 /* 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
|
800 /* ------------------------------------------------------------------------- */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
801 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
802 /* Place a wrapper around the MSVC version of ctime. It returns NULL |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
803 on network directories, so we handle that case here. |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
804 (Ulrich Leodolter, 1/11/95). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
805 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
806 sys_ctime (const time_t *t) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
807 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
808 char *str = (char *) ctime (t); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
809 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
|
810 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
811 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
812 /* 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
|
813 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
|
814 This is much easier. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
815 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
816 sys_sleep (int seconds) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
817 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
818 Sleep (seconds * 1000); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
819 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
820 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
821 /* 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
|
822 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
|
823 extern int __cdecl _free_osfhnd (int fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
824 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
825 /* 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
|
826 filedesc fd_info [ MAXDESC ]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
827 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
828 typedef struct volume_info_data { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
829 struct volume_info_data * next; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
830 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
831 /* time when info was obtained */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
832 DWORD timestamp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
833 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
834 /* actual volume info */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
835 char * root_dir; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
836 DWORD serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
837 DWORD maxcomp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
838 DWORD flags; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
839 char * name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
840 char * type; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
841 } volume_info_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
842 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
843 /* Global referenced by various functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
844 static volume_info_data volume_info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
845 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
846 /* 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
|
847 data never expires). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
848 static BOOL fixed_drives[26]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
849 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
850 /* 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
|
851 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
|
852 #define DRIVE_INDEX( c ) ( (c) <= 'Z' ? (c) - 'A' : (c) - 'a' ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
853 #define VOLINFO_STILL_VALID( root_dir, info ) \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
854 ( ( isalpha (root_dir[0]) && \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
855 fixed_drives[ DRIVE_INDEX (root_dir[0]) ] ) \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
856 || GetTickCount () - info->timestamp < 10000 ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
857 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
858 /* Cache support functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
859 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
860 /* Simple linked list with linear search is sufficient. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
861 static volume_info_data *volume_cache = NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
862 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
863 static volume_info_data * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
864 lookup_volume_info (char * root_dir) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
865 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
866 volume_info_data * info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
867 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
868 for (info = volume_cache; info; info = info->next) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
869 if (stricmp (info->root_dir, root_dir) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
870 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
871 return info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
872 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
873 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
874 static void |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
875 add_volume_info (char * root_dir, volume_info_data * info) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
876 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
877 info->root_dir = strdup (root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
878 info->next = volume_cache; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
879 volume_cache = info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
880 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
881 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
882 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
883 /* Wrapper for GetVolumeInformation, which uses caching to avoid |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
884 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
|
885 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
|
886 volume_info_data * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
887 GetCachedVolumeInformation (char * root_dir) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
888 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
889 volume_info_data * info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
890 char default_root[ MAX_PATH ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
891 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
892 /* NULL for root_dir means use root from current directory. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
893 if (root_dir == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
894 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
895 if (GetCurrentDirectory (MAX_PATH, default_root) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
896 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
897 parse_root (default_root, &root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
898 *root_dir = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
899 root_dir = default_root; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
900 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
901 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
902 /* Local fixed drives can be cached permanently. Removable drives |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
903 cannot be cached permanently, since the volume name and serial |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
904 number (if nothing else) can change. Remote drives should be |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
905 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
|
906 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
|
907 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
|
908 by other processes) without notice. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
909 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
910 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
|
911 volumes, we use a simple expiry mechanism to invalidate cache |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
912 entries that are more than ten seconds old. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
913 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
914 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
915 /* No point doing this, because WNetGetConnection is even slower than |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
916 GetVolumeInformation, consistently taking ~50ms on a 486 (FWIW, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
917 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
|
918 involve network access, and so is extremely quick). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
919 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
920 /* Map drive letter to UNC if remote. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
921 if ( isalpha( root_dir[0] ) && !fixed[ DRIVE_INDEX( root_dir[0] ) ] ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
922 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
923 char remote_name[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
924 char drive[3] = { root_dir[0], ':' }; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
925 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
926 if (WNetGetConnection (drive, remote_name, sizeof (remote_name)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
927 == NO_ERROR) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
928 /* do something */ ; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
929 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
930 #endif |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
931 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
932 info = lookup_volume_info (root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
933 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
934 if (info == NULL || ! VOLINFO_STILL_VALID (root_dir, info)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
935 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
936 char name[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
937 DWORD serialnum; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
938 DWORD maxcomp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
939 DWORD flags; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
940 char type[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
941 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
942 /* Info is not cached, or is stale. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
943 if (!GetVolumeInformation (root_dir, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
944 name, sizeof (name), |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
945 &serialnum, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
946 &maxcomp, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
947 &flags, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
948 type, sizeof (type))) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
949 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
950 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
951 /* Cache the volume information for future use, overwriting existing |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
952 entry if present. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
953 if (info == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
954 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
955 info = (volume_info_data *) xmalloc (sizeof (volume_info_data)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
956 add_volume_info (root_dir, info); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
957 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
958 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
959 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
960 free (info->name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
961 free (info->type); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
962 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
963 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
964 info->name = strdup (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
965 info->serialnum = serialnum; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
966 info->maxcomp = maxcomp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
967 info->flags = flags; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
968 info->type = strdup (type); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
969 info->timestamp = GetTickCount (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
970 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
971 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
972 return info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
973 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
974 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
975 /* 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
|
976 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
|
977 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
978 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
|
979 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
980 char temp[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
981 char *rootname = NULL; /* default to current volume */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
982 volume_info_data * info; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
983 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
984 if (name == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
985 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
986 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
987 /* 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
|
988 if (isalpha (name[0]) && name[1] == ':') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
989 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
990 rootname = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
991 temp[0] = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
992 temp[1] = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
993 temp[2] = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
994 temp[3] = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
995 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
996 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
|
997 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
998 char *str = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
999 int slashes = 4; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1000 rootname = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1001 do |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1002 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1003 if (IS_DIRECTORY_SEP (*name) && --slashes == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1004 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1005 *str++ = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1006 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1007 while ( *name ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1008 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1009 *str++ = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1010 *str = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1011 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1012 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1013 if (pPath) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1014 *pPath = name; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1015 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1016 info = GetCachedVolumeInformation (rootname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1017 if (info != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1018 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1019 /* Set global referenced by other functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1020 volume_info = *info; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1021 return TRUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1022 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1023 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1024 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1025 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1026 /* 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
|
1027 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
|
1028 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1029 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
|
1030 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1031 if (get_volume_info (name, pPath)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1032 return (volume_info.maxcomp == 12); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1033 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1034 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1035 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1036 /* Map filename to a legal 8.3 name if necessary. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1037 const char * |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1038 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
|
1039 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1040 static char shortname[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1041 char * str = shortname; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1042 char c; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1043 char * path; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1044 const char * save_name = name; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1045 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1046 if (is_fat_volume (name, &path)) /* truncate to 8.3 */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1047 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1048 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
|
1049 register int extn = 0; /* extension added? */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1050 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
|
1051 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1052 while (name < path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1053 *str++ = *name++; /* skip past UNC header */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1054 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1055 while ((c = *name++)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1056 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1057 switch ( c ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1058 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1059 case '\\': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1060 case '/': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1061 *str++ = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1062 extn = 0; /* reset extension flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1063 dots = 2; /* max 2 dots */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1064 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
|
1065 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1066 case ':': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1067 *str++ = ':'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1068 extn = 0; /* reset extension flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1069 dots = 2; /* max 2 dots */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1070 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
|
1071 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1072 case '.': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1073 if ( dots ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1074 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1075 /* 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
|
1076 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
|
1077 to be read as _emacs, for example. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1078 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1079 if (! *name || |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1080 *name == '.' || |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1081 IS_DIRECTORY_SEP (*name)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1082 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1083 *str++ = '.'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1084 dots--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1085 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1086 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1087 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1088 *str++ = '_'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1089 left--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1090 dots = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1091 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1092 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1093 else if ( !extn ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1094 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1095 *str++ = '.'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1096 extn = 1; /* we've got an extension */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1097 left = 3; /* 3 chars in extension */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1098 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1099 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1100 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1101 /* 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
|
1102 *str++ = '_'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1103 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1104 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1105 case '~': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1106 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
|
1107 if ( ! left ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1108 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
|
1109 /* FALLTHRU */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1110 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1111 if ( left ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1112 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1113 *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
|
1114 left--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1115 dots = 0; /* started a path component */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1116 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1117 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1118 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1119 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1120 *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
|
1121 } |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1122 else |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1123 { |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1124 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
|
1125 unixtodos_filename (shortname); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1126 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1127 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1128 if (pPath) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1129 *pPath = shortname + (path - save_name); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1130 |
15213
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1131 return shortname; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1132 } |
11384 | 1133 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1134 /* Emulate the Unix directory procedures opendir, closedir, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1135 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
|
1136 so we provide them here. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1137 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1138 struct direct dir_static; /* simulated directory contents */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1139 static HANDLE dir_find_handle = INVALID_HANDLE_VALUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1140 static int dir_is_fat; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1141 static char dir_pathname[MAXPATHLEN+1]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1142 static WIN32_FIND_DATA dir_find_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1143 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1144 DIR * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1145 opendir (char *filename) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1146 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1147 DIR *dirp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1148 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1149 /* 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
|
1150 this operation, so we defer the open until read time. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1151 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1152 if (!(dirp = (DIR *) malloc (sizeof (DIR)))) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1153 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1154 if (dir_find_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1155 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1156 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1157 dirp->dd_fd = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1158 dirp->dd_loc = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1159 dirp->dd_size = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1160 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1161 strncpy (dir_pathname, map_w32_filename (filename, NULL), MAXPATHLEN); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1162 dir_pathname[MAXPATHLEN] = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1163 dir_is_fat = is_fat_volume (filename, NULL); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1164 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1165 return dirp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1166 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1167 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1168 void |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1169 closedir (DIR *dirp) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1170 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1171 /* If we have a find-handle open, close it. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1172 if (dir_find_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1173 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1174 FindClose (dir_find_handle); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1175 dir_find_handle = INVALID_HANDLE_VALUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1176 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1177 xfree ((char *) dirp); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1178 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1179 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1180 struct direct * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1181 readdir (DIR *dirp) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1182 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1183 /* If we aren't dir_finding, do a find-first, otherwise do a find-next. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1184 if (dir_find_handle == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1185 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1186 char filename[MAXNAMLEN + 3]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1187 int ln; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1188 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1189 strcpy (filename, dir_pathname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1190 ln = strlen (filename) - 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1191 if (!IS_DIRECTORY_SEP (filename[ln])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1192 strcat (filename, "\\"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1193 strcat (filename, "*"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1194 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1195 dir_find_handle = FindFirstFile (filename, &dir_find_data); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1196 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1197 if (dir_find_handle == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1198 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1199 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1200 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1201 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1202 if (!FindNextFile (dir_find_handle, &dir_find_data)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1203 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1204 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1205 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1206 /* 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
|
1207 value returned by stat(). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1208 dir_static.d_ino = 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1209 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1210 dir_static.d_reclen = sizeof (struct direct) - MAXNAMLEN + 3 + |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1211 dir_static.d_namlen - dir_static.d_namlen % 4; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1212 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1213 dir_static.d_namlen = strlen (dir_find_data.cFileName); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1214 strcpy (dir_static.d_name, dir_find_data.cFileName); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1215 if (dir_is_fat) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1216 _strlwr (dir_static.d_name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1217 else if (!NILP (Vw32_downcase_file_names)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1218 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1219 register char *p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1220 for (p = dir_static.d_name; *p; p++) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1221 if (*p >= 'a' && *p <= 'z') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1222 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1223 if (!*p) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1224 _strlwr (dir_static.d_name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1225 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1226 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1227 return &dir_static; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1228 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1229 |
9803 | 1230 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1231 /* 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
|
1232 to reasonable short names if necessary. This was originally added to |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1233 permit running Emacs on NT 3.1 on a FAT partition, which doesn't support |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1234 long file names. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1235 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1236 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1237 sys_access (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1238 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1239 return _access (map_w32_filename (path, NULL), mode); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1240 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1241 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1242 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1243 sys_chdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1244 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1245 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
|
1246 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1247 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1248 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1249 sys_chmod (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1250 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1251 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
|
1252 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1253 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1254 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1255 sys_creat (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1256 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1257 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
|
1258 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1259 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1260 FILE * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1261 sys_fopen(const char * path, const char * mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1262 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1263 int fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1264 int oflag; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1265 const char * mode_save = mode; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1266 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1267 /* 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
|
1268 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
|
1269 prevent future file access. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1270 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1271 if (mode[0] == 'r') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1272 oflag = O_RDONLY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1273 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
|
1274 oflag = O_WRONLY | O_CREAT | O_TRUNC; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1275 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1276 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1277 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1278 /* Only do simplistic option parsing. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1279 while (*++mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1280 if (mode[0] == '+') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1281 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1282 oflag &= ~(O_RDONLY | O_WRONLY); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1283 oflag |= O_RDWR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1284 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1285 else if (mode[0] == 'b') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1286 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1287 oflag &= ~O_TEXT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1288 oflag |= O_BINARY; |
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 else if (mode[0] == 't') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1291 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1292 oflag &= ~O_BINARY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1293 oflag |= O_TEXT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1294 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1295 else break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1296 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1297 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
|
1298 if (fd < 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1299 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1300 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1301 return _fdopen (fd, mode_save); |
15141
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 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1304 /* 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
|
1305 int |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1306 sys_link (const char * old, const char * new) |
9803 | 1307 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1308 HANDLE fileh; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1309 int result = -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1310 char oldname[MAX_PATH], newname[MAX_PATH]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1311 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1312 if (old == NULL || new == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1313 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1314 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1315 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1316 } |
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 strcpy (oldname, map_w32_filename (old, NULL)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1319 strcpy (newname, map_w32_filename (new, NULL)); |
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 fileh = CreateFile (oldname, 0, 0, NULL, OPEN_EXISTING, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1322 FILE_FLAG_BACKUP_SEMANTICS, NULL); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1323 if (fileh != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1324 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1325 int wlen; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1326 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1327 /* Confusingly, the "alternate" stream name field does not apply |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1328 when restoring a hard link, and instead contains the actual |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1329 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
|
1330 The WIN32_STREAM_ID structure before the cStreamName field is |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1331 the stream header, which is then immediately followed by the |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1332 stream data. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1333 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1334 struct { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1335 WIN32_STREAM_ID wid; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1336 WCHAR wbuffer[MAX_PATH]; /* extra space for link name */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1337 } data; |
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 wlen = MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, newname, -1, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1340 data.wid.cStreamName, MAX_PATH); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1341 if (wlen > 0) |
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 LPVOID context = NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1344 DWORD wbytes = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1345 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1346 data.wid.dwStreamId = BACKUP_LINK; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1347 data.wid.dwStreamAttributes = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1348 data.wid.Size.LowPart = wlen * sizeof(WCHAR); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1349 data.wid.Size.HighPart = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1350 data.wid.dwStreamNameSize = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1351 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1352 if (BackupWrite (fileh, (LPBYTE)&data, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1353 offsetof (WIN32_STREAM_ID, cStreamName) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1354 + data.wid.Size.LowPart, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1355 &wbytes, FALSE, FALSE, &context) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1356 && BackupWrite (fileh, NULL, 0, &wbytes, TRUE, FALSE, &context)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1357 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1358 /* succeeded */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1359 result = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1360 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1361 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1362 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1363 /* Should try mapping GetLastError to errno; for now just |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1364 indicate a general error (eg. links not supported). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1365 errno = EINVAL; // perhaps EMLINK? |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1366 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1367 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1368 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1369 CloseHandle (fileh); |
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 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1372 errno = ENOENT; |
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 return result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1375 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1376 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1377 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1378 sys_mkdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1379 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1380 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
|
1381 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1382 |
15354
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1383 /* 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
|
1384 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
|
1385 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
|
1386 string. |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1387 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1388 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
|
1389 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
|
1390 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
|
1391 first of the 6 X's. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1392 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1393 sys_mktemp (char * template) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1394 { |
15354
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1395 char * p; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1396 int i; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1397 unsigned uid = GetCurrentThreadId (); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1398 static char first_char[] = "abcdefghijklmnopqrstuvwyz0123456789!%-_@#"; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1399 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1400 if (template == NULL) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1401 return NULL; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1402 p = template + strlen (template); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1403 i = 5; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1404 /* 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
|
1405 while (--p >= template && p[0] == 'X' && --i >= 0) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1406 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1407 p[0] = '0' + uid % 10; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1408 uid /= 10; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1409 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1410 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1411 if (i < 0 && p[0] == 'X') |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1412 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1413 i = 0; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1414 do |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1415 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1416 int save_errno = errno; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1417 p[0] = first_char[i]; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1418 if (sys_access (template, 0) < 0) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1419 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1420 errno = save_errno; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1421 return template; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1422 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1423 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1424 while (++i < sizeof (first_char)); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1425 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1426 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1427 /* 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
|
1428 so return empty string */ |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1429 template[0] = 0; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
1430 return template; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1431 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1432 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1433 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1434 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
|
1435 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1436 /* Force all file handles to be non-inheritable. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1437 return _open (map_w32_filename (path, NULL), oflag | _O_NOINHERIT, mode); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1438 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1439 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1440 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1441 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
|
1442 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1443 char temp[MAX_PATH]; |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1444 DWORD attr; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1445 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
1446 /* 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
|
1447 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
|
1448 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
|
1449 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
|
1450 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
1451 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
|
1452 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
|
1453 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
|
1454 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
|
1455 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
1456 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
|
1457 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
|
1458 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1459 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
|
1460 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1461 if (os_subtype == OS_WIN95) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1462 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1463 char * p; |
9803 | 1464 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1465 if (p = strrchr (temp, '\\')) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1466 p++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1467 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1468 p = temp; |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1469 /* Force temp name to require a manufactured 8.3 alias - this |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1470 seems to make the second rename work properly. */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1471 strcpy (p, "_rename_temp.XXXXXX"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1472 sys_mktemp (temp); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1473 if (rename (map_w32_filename (oldname, NULL), temp) < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1474 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1475 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1476 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1477 /* Emulate Unix behaviour - 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
|
1478 (at least if it is a file; don't do this for directories). |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1479 However, don't do this if we are just changing the case of the file |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1480 name - we will end up deleting the file we are trying to rename! */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1481 newname = map_w32_filename (newname, NULL); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1482 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1483 /* TODO: Use GetInformationByHandle (on NT) to ensure newname and temp |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1484 do not refer to the same file, eg. through share aliases. */ |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1485 if (stricmp (newname, temp) != 0 |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1486 && (attr = GetFileAttributes (newname)) != -1 |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
1487 && (attr & FILE_ATTRIBUTE_DIRECTORY) == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1488 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1489 _chmod (newname, 0666); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1490 _unlink (newname); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1491 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1492 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1493 return rename (temp, newname); |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1496 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1497 sys_rmdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1498 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1499 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
|
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 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1503 sys_unlink (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1504 { |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1505 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
|
1506 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1507 /* 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
|
1508 _chmod (path, 0666); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1509 return _unlink (path); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1510 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1511 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1512 static FILETIME utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1513 static long double utc_base; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1514 static int init = 0; |
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 static time_t |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1517 convert_time (FILETIME ft) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1518 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1519 long double ret; |
9803 | 1520 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1521 if (!init) |
9803 | 1522 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1523 /* Determine the delta between 1-Jan-1601 and 1-Jan-1970. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1524 SYSTEMTIME st; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1525 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1526 st.wYear = 1970; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1527 st.wMonth = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1528 st.wDay = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1529 st.wHour = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1530 st.wMinute = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1531 st.wSecond = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1532 st.wMilliseconds = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1533 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1534 SystemTimeToFileTime (&st, &utc_base_ft); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1535 utc_base = (long double) utc_base_ft.dwHighDateTime |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1536 * 4096 * 1024 * 1024 + utc_base_ft.dwLowDateTime; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1537 init = 1; |
9803 | 1538 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1539 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1540 if (CompareFileTime (&ft, &utc_base_ft) < 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1541 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1542 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1543 ret = (long double) ft.dwHighDateTime * 4096 * 1024 * 1024 + ft.dwLowDateTime; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1544 ret -= utc_base; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1545 return (time_t) (ret * 1e-7); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1546 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1547 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1548 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1549 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
|
1550 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1551 long double tmp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1552 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1553 if (!init) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1554 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1555 /* Determine the delta between 1-Jan-1601 and 1-Jan-1970. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1556 SYSTEMTIME st; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1557 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1558 st.wYear = 1970; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1559 st.wMonth = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1560 st.wDay = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1561 st.wHour = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1562 st.wMinute = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1563 st.wSecond = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1564 st.wMilliseconds = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1565 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1566 SystemTimeToFileTime (&st, &utc_base_ft); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1567 utc_base = (long double) utc_base_ft.dwHighDateTime |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1568 * 4096 * 1024 * 1024 + utc_base_ft.dwLowDateTime; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1569 init = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1570 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1571 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1572 /* time in 100ns units since 1-Jan-1601 */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1573 tmp = (long double) time * 1e7 + utc_base; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1574 pft->dwHighDateTime = (DWORD) (tmp / (4096.0 * 1024 * 1024)); |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1575 pft->dwLowDateTime = (DWORD) (tmp - (4096.0 * 1024 * 1024) * pft->dwHighDateTime); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1576 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1577 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1578 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1579 /* 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
|
1580 using the file index from GetInformationByHandle, is not perfect and |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1581 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
|
1582 Instead, we now determine file-truename correctly (except for |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1583 possible drive aliasing etc). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1584 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1585 /* 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
|
1586 static unsigned |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1587 hashval (const unsigned char * str) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1588 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1589 unsigned h = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1590 while (*str) |
9803 | 1591 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1592 h = (h << 4) + *str++; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1593 h ^= (h >> 28); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1594 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1595 return h; |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1598 /* 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
|
1599 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
|
1600 static DWORD |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1601 generate_inode_val (const char * name) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1602 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1603 char fullname[ MAX_PATH ]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1604 char * p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1605 unsigned hash; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1606 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1607 /* Get the truly canonical filename, if it exists. (Note: this |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1608 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
|
1609 links. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1610 if (!w32_get_long_filename ((char *)name, fullname, MAX_PATH)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1611 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1612 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1613 parse_root (fullname, &p); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1614 /* 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
|
1615 _strlwr (p); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1616 return hashval (p); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1617 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1618 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1619 #endif |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1620 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1621 /* 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
|
1622 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
|
1623 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
|
1624 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1625 stat (const char * path, struct stat * buf) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1626 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1627 char * name; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1628 WIN32_FIND_DATA wfd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1629 HANDLE fh; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1630 DWORD fake_inode; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1631 int permission; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1632 int len; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1633 int rootdir = FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1634 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1635 if (path == NULL || buf == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1636 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1637 errno = EFAULT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1638 return -1; |
9803 | 1639 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1640 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1641 name = (char *) map_w32_filename (path, &path); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1642 /* must be valid filename, no wild cards */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1643 if (strchr (name, '*') || strchr (name, '?')) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1644 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1645 errno = ENOENT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1646 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1647 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1648 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1649 /* 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
|
1650 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
|
1651 is a trailing separator. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1652 len = strlen (name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1653 rootdir = (path >= name + len - 1 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1654 && (IS_DIRECTORY_SEP (*path) || *path == 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1655 name = strcpy (alloca (len + 2), name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1656 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1657 if (rootdir) |
9803 | 1658 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1659 if (!IS_DIRECTORY_SEP (name[len-1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1660 strcat (name, "\\"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1661 if (GetDriveType (name) < 2) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1662 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1663 errno = ENOENT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1664 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1665 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1666 memset (&wfd, 0, sizeof (wfd)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1667 wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1668 wfd.ftCreationTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1669 wfd.ftLastAccessTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1670 wfd.ftLastWriteTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1671 strcpy (wfd.cFileName, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1672 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1673 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1674 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1675 if (IS_DIRECTORY_SEP (name[len-1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1676 name[len - 1] = 0; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1677 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1678 /* (This is hacky, but helps when doing file completions on |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1679 network drives.) Optimize by using information available from |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1680 active readdir if possible. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1681 if (dir_find_handle != INVALID_HANDLE_VALUE |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1682 && (len = strlen (dir_pathname)), |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1683 strnicmp (name, dir_pathname, len) == 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1684 && IS_DIRECTORY_SEP (name[len]) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1685 && stricmp (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
|
1686 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1687 /* This was the last entry returned by readdir. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1688 wfd = dir_find_data; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1689 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1690 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1691 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1692 fh = FindFirstFile (name, &wfd); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1693 if (fh == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1694 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1695 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1696 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1697 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1698 FindClose (fh); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1699 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1700 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1701 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1702 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1703 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1704 buf->st_mode = _S_IFDIR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1705 buf->st_nlink = 2; /* doesn't really matter */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1706 fake_inode = 0; /* this doesn't either I think */ |
9803 | 1707 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1708 else if (!NILP (Vw32_get_true_file_attributes)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1709 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1710 /* This is more accurate in terms of gettting the correct number |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1711 of links, but is quite slow (it is noticable when Emacs is |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1712 making a list of file name completions). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1713 BY_HANDLE_FILE_INFORMATION info; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1714 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1715 /* No access rights required to get info. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1716 fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING, 0, NULL); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1717 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1718 if (GetFileInformationByHandle (fh, &info)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1719 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1720 switch (GetFileType (fh)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1721 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1722 case FILE_TYPE_DISK: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1723 buf->st_mode = _S_IFREG; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1724 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1725 case FILE_TYPE_PIPE: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1726 buf->st_mode = _S_IFIFO; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1727 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1728 case FILE_TYPE_CHAR: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1729 case FILE_TYPE_UNKNOWN: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1730 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1731 buf->st_mode = _S_IFCHR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1732 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1733 buf->st_nlink = info.nNumberOfLinks; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1734 /* 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
|
1735 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
|
1736 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
|
1737 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
|
1738 (on NTFS, presumably less on FAT). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1739 fake_inode = info.nFileIndexLow ^ info.nFileIndexHigh; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1740 CloseHandle (fh); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1741 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1742 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1743 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1744 errno = EACCES; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1745 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1746 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1747 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1748 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1749 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1750 /* Don't bother to make this information more accurate. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1751 buf->st_mode = _S_IFREG; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1752 buf->st_nlink = 1; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1753 fake_inode = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1754 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1755 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1756 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1757 /* Not sure if there is any point in this. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1758 if (!NILP (Vw32_generate_fake_inodes)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1759 fake_inode = generate_inode_val (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1760 else if (fake_inode == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1761 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1762 /* For want of something better, try to make everything unique. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1763 static DWORD gen_num = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1764 fake_inode = ++gen_num; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1765 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1766 #endif |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1767 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1768 /* 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
|
1769 if (sizeof (buf->st_ino) == 2) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1770 buf->st_ino = fake_inode ^ (fake_inode >> 16); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1771 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1772 buf->st_ino = fake_inode; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1773 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1774 /* consider files to belong to current user */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1775 buf->st_uid = the_passwd.pw_uid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1776 buf->st_gid = the_passwd.pw_gid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1777 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1778 /* 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
|
1779 buf->st_dev = volume_info.serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1780 buf->st_rdev = volume_info.serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1781 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1782 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1783 buf->st_size = wfd.nFileSizeLow; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1784 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1785 /* Convert timestamps to Unix format. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1786 buf->st_mtime = convert_time (wfd.ftLastWriteTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1787 buf->st_atime = convert_time (wfd.ftLastAccessTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1788 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
|
1789 buf->st_ctime = convert_time (wfd.ftCreationTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1790 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
|
1791 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1792 /* determine rwx permissions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1793 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1794 permission = _S_IREAD; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1795 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1796 permission = _S_IREAD | _S_IWRITE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1797 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1798 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1799 permission |= _S_IEXEC; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1800 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1801 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1802 char * p = strrchr (name, '.'); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1803 if (p != NULL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1804 && (stricmp (p, ".exe") == 0 || |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1805 stricmp (p, ".com") == 0 || |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1806 stricmp (p, ".bat") == 0 || |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1807 stricmp (p, ".cmd") == 0)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1808 permission |= _S_IEXEC; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1809 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1810 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1811 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
|
1812 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1813 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1814 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1815 |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1816 /* 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
|
1817 file timestamps. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1818 int |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1819 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
|
1820 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1821 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
|
1822 BY_HANDLE_FILE_INFORMATION info; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1823 DWORD fake_inode; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1824 int permission; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1825 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1826 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
|
1827 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1828 case FILE_TYPE_DISK: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1829 buf->st_mode = _S_IFREG; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1830 if (!GetFileInformationByHandle (fh, &info)) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1831 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1832 errno = EACCES; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1833 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1834 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1835 break; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1836 case FILE_TYPE_PIPE: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1837 buf->st_mode = _S_IFIFO; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1838 goto non_disk; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1839 case FILE_TYPE_CHAR: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1840 case FILE_TYPE_UNKNOWN: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1841 default: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1842 buf->st_mode = _S_IFCHR; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1843 non_disk: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1844 memset (&info, 0, sizeof (info)); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1845 info.dwFileAttributes = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1846 info.ftCreationTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1847 info.ftLastAccessTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1848 info.ftLastWriteTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1849 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1850 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1851 if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1852 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1853 buf->st_mode = _S_IFDIR; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1854 buf->st_nlink = 2; /* doesn't really matter */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1855 fake_inode = 0; /* this doesn't either I think */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1856 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1857 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1858 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1859 buf->st_nlink = info.nNumberOfLinks; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1860 /* Might as well use file index to fake inode values, but this |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1861 is not guaranteed to be unique unless we keep a handle open |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1862 all the time (even then there are situations where it is |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1863 not unique). Reputedly, there are at most 48 bits of info |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1864 (on NTFS, presumably less on FAT). */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1865 fake_inode = info.nFileIndexLow ^ info.nFileIndexHigh; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1866 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1867 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1868 /* 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
|
1869 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
|
1870 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
|
1871 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1872 buf->st_ino = fake_inode; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1873 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1874 /* consider files to belong to current user */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1875 buf->st_uid = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1876 buf->st_gid = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1877 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1878 buf->st_dev = info.dwVolumeSerialNumber; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1879 buf->st_rdev = info.dwVolumeSerialNumber; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1880 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1881 buf->st_size = info.nFileSizeLow; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1882 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1883 /* Convert timestamps to Unix format. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1884 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
|
1885 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
|
1886 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
|
1887 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
|
1888 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
|
1889 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1890 /* determine rwx permissions */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1891 if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1892 permission = _S_IREAD; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1893 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1894 permission = _S_IREAD | _S_IWRITE; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1895 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1896 if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1897 permission |= _S_IEXEC; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1898 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1899 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1900 #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
|
1901 char * p = strrchr (name, '.'); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1902 if (p != NULL && |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1903 (stricmp (p, ".exe") == 0 || |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1904 stricmp (p, ".com") == 0 || |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1905 stricmp (p, ".bat") == 0 || |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1906 stricmp (p, ".cmd") == 0)) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1907 permission |= _S_IEXEC; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1908 #endif |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1909 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1910 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1911 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
|
1912 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1913 return 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1914 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1915 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1916 int |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1917 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
|
1918 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1919 struct utimbuf deftime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1920 HANDLE fh; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1921 FILETIME mtime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1922 FILETIME atime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1923 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1924 if (times == NULL) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1925 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1926 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
|
1927 times = &deftime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1928 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1929 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1930 /* 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
|
1931 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
|
1932 0, OPEN_EXISTING, 0, NULL); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1933 if (fh) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1934 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1935 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
|
1936 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
|
1937 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
|
1938 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1939 CloseHandle (fh); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1940 errno = EACCES; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1941 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1942 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1943 CloseHandle (fh); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1944 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1945 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1946 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1947 errno = EINVAL; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1948 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1949 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1950 return 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1951 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
1952 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1953 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1954 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1955 /* 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
|
1956 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
|
1957 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1958 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
|
1959 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
|
1960 otherwise provide the minimum necessary functionality |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1961 (eg. gethostname). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1962 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1963 /* function pointers for relevant socket functions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1964 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
|
1965 void (PASCAL *pfn_WSASetLastError) (int iError); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1966 int (PASCAL *pfn_WSAGetLastError) (void); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1967 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
|
1968 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
|
1969 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
|
1970 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
|
1971 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
|
1972 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
|
1973 int (PASCAL *pfn_closesocket) (SOCKET s); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1974 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
|
1975 int (PASCAL *pfn_WSACleanup) (void); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1976 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1977 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
|
1978 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
|
1979 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
|
1980 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
|
1981 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
|
1982 struct servent * (PASCAL *pfn_getservbyname) (const char * name, const char * proto); |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
1983 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
1984 /* 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
|
1985 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
|
1986 #ifndef HANDLE_FLAG_INHERIT |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
1987 #define HANDLE_FLAG_INHERIT 1 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
1988 #endif |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1989 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
1990 HANDLE winsock_lib; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
1991 static int winsock_inuse; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1992 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
1993 BOOL |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1994 term_winsock (void) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1995 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
1996 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
|
1997 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
1998 /* 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
|
1999 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
|
2000 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
|
2001 if (pfn_WSACleanup () == 0 || |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2002 pfn_WSAGetLastError () == WSAENETDOWN) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2003 { |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2004 if (FreeLibrary (winsock_lib)) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2005 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2006 return TRUE; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2007 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2008 } |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2009 return FALSE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2010 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2011 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2012 BOOL |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2013 init_winsock (int load_now) |
15141
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 WSADATA winsockData; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2016 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2017 if (winsock_lib != NULL) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2018 return TRUE; |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2019 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2020 pfn_SetHandleInformation = NULL; |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2021 pfn_SetHandleInformation |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2022 = (void *) GetProcAddress (GetModuleHandle ("kernel32.dll"), |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2023 "SetHandleInformation"); |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2024 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2025 winsock_lib = LoadLibrary ("wsock32.dll"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2026 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2027 if (winsock_lib != NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2028 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2029 /* dynamically link to socket functions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2030 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2031 #define LOAD_PROC(fn) \ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2032 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
|
2033 goto fail; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2034 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2035 LOAD_PROC( WSAStartup ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2036 LOAD_PROC( WSASetLastError ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2037 LOAD_PROC( WSAGetLastError ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2038 LOAD_PROC( socket ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2039 LOAD_PROC( bind ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2040 LOAD_PROC( connect ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2041 LOAD_PROC( ioctlsocket ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2042 LOAD_PROC( recv ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2043 LOAD_PROC( send ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2044 LOAD_PROC( closesocket ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2045 LOAD_PROC( shutdown ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2046 LOAD_PROC( htons ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2047 LOAD_PROC( ntohs ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2048 LOAD_PROC( inet_addr ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2049 LOAD_PROC( gethostname ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2050 LOAD_PROC( gethostbyname ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2051 LOAD_PROC( getservbyname ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2052 LOAD_PROC( WSACleanup ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2053 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2054 #undef LOAD_PROC |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2055 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2056 /* specify version 1.1 of winsock */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2057 if (pfn_WSAStartup (0x101, &winsockData) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2058 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2059 if (winsockData.wVersion != 0x101) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2060 goto fail; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2061 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2062 if (!load_now) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2063 { |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2064 /* 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
|
2065 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
|
2066 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
|
2067 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
|
2068 connection to be established. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2069 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2070 pfn_WSACleanup (); |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2071 FreeLibrary (winsock_lib); |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2072 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2073 } |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2074 winsock_inuse = 0; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2075 return TRUE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2076 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2077 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2078 fail: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2079 FreeLibrary (winsock_lib); |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2080 winsock_lib = NULL; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2081 } |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2082 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2083 return FALSE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2084 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2085 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2086 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2087 int h_errno = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2088 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2089 /* function to set h_errno for compatability; map winsock error codes to |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2090 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
|
2091 are already in <sys/socket.h> */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2092 static void set_errno () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2093 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2094 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2095 h_errno = EINVAL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2096 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2097 h_errno = pfn_WSAGetLastError (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2098 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2099 switch (h_errno) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2100 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2101 case WSAEACCES: h_errno = EACCES; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2102 case WSAEBADF: h_errno = EBADF; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2103 case WSAEFAULT: h_errno = EFAULT; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2104 case WSAEINTR: h_errno = EINTR; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2105 case WSAEINVAL: h_errno = EINVAL; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2106 case WSAEMFILE: h_errno = EMFILE; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2107 case WSAENAMETOOLONG: h_errno = ENAMETOOLONG; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2108 case WSAENOTEMPTY: h_errno = ENOTEMPTY; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2109 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2110 errno = h_errno; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2111 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2112 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2113 static void check_errno () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2114 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2115 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
|
2116 pfn_WSASetLastError (0); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2117 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2118 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2119 /* [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
|
2120 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
|
2121 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
|
2122 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2123 //#define SOCK_REPLACE_HANDLE |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2124 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2125 #ifdef SOCK_REPLACE_HANDLE |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2126 #define SOCK_HANDLE(fd) ((SOCKET) _get_osfhandle (fd)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2127 #else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2128 #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
|
2129 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2130 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2131 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2132 sys_socket(int af, int type, int protocol) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2133 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2134 int fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2135 long s; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2136 child_process * cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2137 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2138 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2139 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2140 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2141 return INVALID_SOCKET; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2142 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2143 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2144 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2145 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2146 /* call the real socket function */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2147 s = (long) pfn_socket (af, type, protocol); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2148 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2149 if (s != INVALID_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2150 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2151 /* Although under NT 3.5 _open_osfhandle will accept a socket |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2152 handle, if opened with SO_OPENTYPE == SO_SYNCHRONOUS_NONALERT, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2153 that does not work under NT 3.1. However, we can get the same |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2154 effect by using a backdoor function to replace an existing |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2155 descriptor handle with the one we want. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2156 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2157 /* allocate a file descriptor (with appropriate flags) */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2158 fd = _open ("NUL:", _O_RDWR); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2159 if (fd >= 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2160 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2161 #ifdef SOCK_REPLACE_HANDLE |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2162 /* now replace handle to NUL with our socket handle */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2163 CloseHandle ((HANDLE) _get_osfhandle (fd)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2164 _free_osfhnd (fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2165 _set_osfhnd (fd, s); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2166 /* setmode (fd, _O_BINARY); */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2167 #else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2168 /* Make a non-inheritable copy of the socket handle. */ |
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 HANDLE parent; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2171 HANDLE new_s = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2172 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2173 parent = GetCurrentProcess (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2174 |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2175 /* Apparently there is a bug in NT 3.51 with some service |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2176 packs, which prevents using DuplicateHandle to make a |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2177 socket handle non-inheritable (causes WSACleanup to |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2178 hang). The work-around is to use SetHandleInformation |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2179 instead if it is available and implemented. */ |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2180 if (!pfn_SetHandleInformation |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2181 || !pfn_SetHandleInformation ((HANDLE) s, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2182 HANDLE_FLAG_INHERIT, |
21747
c11ef8945466
(sys_socket): Make sockets non-inheritable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21737
diff
changeset
|
2183 0)) |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2184 { |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2185 DuplicateHandle (parent, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2186 (HANDLE) s, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2187 parent, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2188 &new_s, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2189 0, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2190 FALSE, |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2191 DUPLICATE_SAME_ACCESS); |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2192 pfn_closesocket (s); |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2193 s = (SOCKET) new_s; |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2194 } |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2195 fd_info[fd].hnd = (HANDLE) s; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2196 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2197 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2198 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2199 /* set our own internal flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2200 fd_info[fd].flags = FILE_SOCKET | FILE_BINARY | FILE_READ | FILE_WRITE; |
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 cp = new_child (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2203 if (cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2204 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2205 cp->fd = fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2206 cp->status = STATUS_READ_ACKNOWLEDGED; |
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 /* attach child_process to fd_info */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2209 if (fd_info[ fd ].cp != NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2210 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2211 DebPrint (("sys_socket: fd_info[%d] apparently in use!\n", fd)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2212 abort (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2213 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2214 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2215 fd_info[ fd ].cp = cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2216 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2217 /* success! */ |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2218 winsock_inuse++; /* count open sockets */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2219 return fd; |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2222 /* clean up */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2223 _close (fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2224 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2225 pfn_closesocket (s); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2226 h_errno = EMFILE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2227 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2228 set_errno (); |
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 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2231 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2232 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2233 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2234 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2235 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
|
2236 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2237 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2238 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2239 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2240 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2241 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2242 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2243 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2244 if (fd_info[s].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2245 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2246 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
|
2247 if (rc == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2248 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2249 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2250 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2251 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2252 return SOCKET_ERROR; |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2255 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2256 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2257 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
|
2258 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2259 if (winsock_lib == NULL) |
15141
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 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2262 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2263 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2264 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2265 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2266 if (fd_info[s].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2267 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2268 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
|
2269 if (rc == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2270 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2271 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2272 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2273 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2274 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2275 } |
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 u_short |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2278 sys_htons (u_short hostshort) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2279 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2280 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2281 pfn_htons (hostshort) : hostshort; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2282 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2283 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2284 u_short |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2285 sys_ntohs (u_short netshort) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2286 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2287 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2288 pfn_ntohs (netshort) : netshort; |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2291 unsigned long |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2292 sys_inet_addr (const char * cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2293 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2294 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2295 pfn_inet_addr (cp) : INADDR_NONE; |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2298 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2299 sys_gethostname (char * name, int namelen) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2300 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2301 if (winsock_lib != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2302 return pfn_gethostname (name, namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2303 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2304 if (namelen > MAX_COMPUTERNAME_LENGTH) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2305 return !GetComputerName (name, &namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2306 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2307 h_errno = EFAULT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2308 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2309 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2310 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2311 struct hostent * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2312 sys_gethostbyname(const char * name) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2313 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2314 struct hostent * host; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2315 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2316 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2317 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2318 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2319 return NULL; |
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 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2323 host = pfn_gethostbyname (name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2324 if (!host) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2325 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2326 return host; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2327 } |
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 struct servent * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2330 sys_getservbyname(const char * name, const char * proto) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2331 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2332 struct servent * serv; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2333 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2334 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2335 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2336 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2337 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2338 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2339 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2340 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2341 serv = pfn_getservbyname (name, proto); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2342 if (!serv) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2343 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2344 return serv; |
9803 | 2345 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2346 |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2347 int |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2348 sys_shutdown (int s, int how) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2349 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2350 int rc; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2351 |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2352 if (winsock_lib == NULL) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2353 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2354 h_errno = ENETDOWN; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2355 return SOCKET_ERROR; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2356 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2357 |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2358 check_errno (); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2359 if (fd_info[s].flags & FILE_SOCKET) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2360 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2361 int rc = pfn_shutdown (SOCK_HANDLE (s), how); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2362 if (rc == SOCKET_ERROR) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2363 set_errno (); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2364 return rc; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2365 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2366 h_errno = ENOTSOCK; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2367 return SOCKET_ERROR; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2368 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
2369 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2370 #endif /* HAVE_SOCKETS */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2371 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2372 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2373 /* 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
|
2374 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
|
2375 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2376 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2377 sys_close (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2378 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2379 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2380 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2381 if (fd < 0 || fd >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2382 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2383 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2384 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2385 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2386 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2387 if (fd_info[fd].cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2388 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2389 child_process * cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2390 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2391 fd_info[fd].cp = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2392 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2393 if (CHILD_ACTIVE (cp)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2394 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2395 /* 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
|
2396 int i; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2397 for (i = 0; i < MAXDESC; i++) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2398 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2399 if (i == fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2400 continue; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2401 if (fd_info[i].cp == cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2402 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2403 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2404 if (i == MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2405 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2406 #ifdef HAVE_SOCKETS |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2407 if (fd_info[fd].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2408 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2409 #ifndef SOCK_REPLACE_HANDLE |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2410 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2411 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2412 pfn_shutdown (SOCK_HANDLE (fd), 2); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2413 rc = pfn_closesocket (SOCK_HANDLE (fd)); |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2414 #endif |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2415 winsock_inuse--; /* count open sockets */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2416 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2417 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2418 delete_child (cp); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2419 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2420 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2421 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2422 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2423 /* 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
|
2424 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
|
2425 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
|
2426 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
|
2427 rc = _close (fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2428 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2429 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2430 fd_info[fd].flags = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2431 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2432 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2433 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2434 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2435 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2436 sys_dup (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2437 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2438 int new_fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2439 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2440 new_fd = _dup (fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2441 if (new_fd >= 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2442 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2443 /* duplicate our internal info as well */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2444 fd_info[new_fd] = fd_info[fd]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2445 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2446 return new_fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2447 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2448 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2449 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2450 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2451 sys_dup2 (int src, int dst) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2452 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2453 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2454 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2455 if (dst < 0 || dst >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2456 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2457 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2458 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2459 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2460 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2461 /* 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
|
2462 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
|
2463 sys_close (dst); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2464 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2465 rc = _dup2 (src, dst); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2466 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2467 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2468 /* duplicate our internal info as well */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2469 fd_info[dst] = fd_info[src]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2470 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2471 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2472 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2473 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2474 /* Unix pipe() has only one arg */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2475 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2476 sys_pipe (int * phandles) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2477 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2478 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2479 unsigned flags; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2480 child_process * cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2481 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2482 /* 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
|
2483 replace the relevant handle with an inheritable one. Also put |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2484 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
|
2485 if required. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2486 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
|
2487 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2488 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2489 { |
21565
2468c9227af0
(sys_pipe): Use binary pipe I/O unconditionally.
Eli Zaretskii <eliz@gnu.org>
parents:
21456
diff
changeset
|
2490 flags = FILE_PIPE | FILE_READ | FILE_BINARY; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2491 fd_info[phandles[0]].flags = flags; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2492 |
21565
2468c9227af0
(sys_pipe): Use binary pipe I/O unconditionally.
Eli Zaretskii <eliz@gnu.org>
parents:
21456
diff
changeset
|
2493 flags = FILE_PIPE | FILE_WRITE | FILE_BINARY; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2494 fd_info[phandles[1]].flags = flags; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2495 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2496 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2497 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2498 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2499 |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2500 /* From ntproc.c */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2501 extern Lisp_Object Vw32_pipe_read_delay; |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2502 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2503 /* 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
|
2504 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
|
2505 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2506 _sys_read_ahead (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2507 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2508 child_process * cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2509 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2510 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2511 if (fd < 0 || fd >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2512 return STATUS_READ_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2513 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2514 cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2515 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2516 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
|
2517 return STATUS_READ_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2518 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2519 if ((fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) == 0 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2520 || (fd_info[fd].flags & FILE_READ) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2521 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2522 DebPrint (("_sys_read_ahead: internal error: fd %d is not a pipe or socket!\n", fd)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2523 abort (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2524 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2525 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2526 cp->status = STATUS_READ_IN_PROGRESS; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2527 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2528 if (fd_info[fd].flags & FILE_PIPE) |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2529 { |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2530 rc = _read (fd, &cp->chr, sizeof (char)); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2531 |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2532 /* 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
|
2533 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
|
2534 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
|
2535 the normal console stdout - as a result most DOS programs will |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2536 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
|
2537 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
|
2538 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
|
2539 if (rc > 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2540 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2541 int wait = XINT (Vw32_pipe_read_delay); |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2542 |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2543 if (wait > 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2544 Sleep (wait); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2545 else if (wait < 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2546 while (++wait <= 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2547 /* 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
|
2548 temporary priority boost to the child process. */ |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2549 Sleep (0); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2550 } |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
2551 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2552 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2553 else if (fd_info[fd].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2554 rc = pfn_recv (SOCK_HANDLE (fd), &cp->chr, sizeof (char), 0); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2555 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2556 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2557 if (rc == sizeof (char)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2558 cp->status = STATUS_READ_SUCCEEDED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2559 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2560 cp->status = STATUS_READ_FAILED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2561 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2562 return cp->status; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2563 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2564 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2565 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2566 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
|
2567 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2568 int nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2569 int to_read; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2570 DWORD waiting; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2571 char * orig_buffer = buffer; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2572 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2573 if (fd < 0 || fd >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2574 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2575 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2576 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2577 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2578 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2579 if (fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2580 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2581 child_process *cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2582 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2583 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
|
2584 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2585 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2586 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2587 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2588 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2589 nchars = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2590 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2591 /* re-read CR carried over from last read */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2592 if (fd_info[fd].flags & FILE_LAST_CR) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2593 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2594 if (fd_info[fd].flags & FILE_BINARY) abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2595 *buffer++ = 0x0d; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2596 count--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2597 nchars++; |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2598 fd_info[fd].flags &= ~FILE_LAST_CR; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2599 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2600 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2601 /* 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
|
2602 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
|
2603 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
|
2604 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
|
2605 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
|
2606 if (cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2607 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2608 int current_status = cp->status; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2609 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2610 switch (current_status) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2611 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2612 case STATUS_READ_FAILED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2613 case STATUS_READ_ERROR: |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2614 /* report normal EOF if nothing in buffer */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2615 if (nchars <= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2616 fd_info[fd].flags |= FILE_AT_EOF; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2617 return nchars; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2618 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2619 case STATUS_READ_READY: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2620 case STATUS_READ_IN_PROGRESS: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2621 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
|
2622 errno = EWOULDBLOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2623 return -1; |
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 case STATUS_READ_SUCCEEDED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2626 /* consume read-ahead char */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2627 *buffer++ = cp->chr; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2628 count--; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2629 nchars++; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2630 cp->status = STATUS_READ_ACKNOWLEDGED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2631 ResetEvent (cp->char_avail); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2632 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2633 case STATUS_READ_ACKNOWLEDGED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2634 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2635 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2636 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2637 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
|
2638 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2639 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2640 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2641 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2642 if (fd_info[fd].flags & FILE_PIPE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2643 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2644 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
|
2645 to_read = min (waiting, (DWORD) count); |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2646 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2647 if (to_read > 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2648 nchars += _read (fd, buffer, to_read); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2649 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2650 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2651 else /* FILE_SOCKET */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2652 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2653 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2654 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2655 /* 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
|
2656 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONREAD, &waiting); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2657 if (waiting == 0 && nchars == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2658 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2659 h_errno = errno = EWOULDBLOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2660 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2661 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2662 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2663 if (waiting) |
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 /* always use binary mode for sockets */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2666 int res = pfn_recv (SOCK_HANDLE (fd), buffer, count, 0); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2667 if (res == SOCKET_ERROR) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2668 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2669 DebPrint(("sys_read.recv failed with error %d on socket %ld\n", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2670 pfn_WSAGetLastError (), SOCK_HANDLE (fd))); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2671 set_errno (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2672 return -1; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2673 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2674 nchars += res; |
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 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2678 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2679 else |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2680 { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2681 int nread = _read (fd, buffer, count); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2682 if (nread >= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2683 nchars += nread; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2684 else if (nchars == 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2685 nchars = nread; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2686 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2687 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2688 if (nchars <= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2689 fd_info[fd].flags |= FILE_AT_EOF; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2690 /* Perform text mode translation if required. */ |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2691 else if ((fd_info[fd].flags & FILE_BINARY) == 0) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2692 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2693 nchars = crlf_to_lf (nchars, orig_buffer); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2694 /* If buffer contains only CR, return that. To be absolutely |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2695 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
|
2696 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
|
2697 itself in the buffer. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2698 if (nchars > 1 && orig_buffer[nchars - 1] == 0x0d) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2699 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2700 fd_info[fd].flags |= FILE_LAST_CR; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2701 nchars--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2702 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2703 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2704 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2705 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2706 nchars = _read (fd, buffer, count); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2707 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2708 return nchars; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2709 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2710 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2711 /* 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
|
2712 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2713 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
|
2714 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2715 int nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2716 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2717 if (fd < 0 || fd >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2718 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2719 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2720 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2721 } |
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 if (fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2724 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2725 if ((fd_info[fd].flags & FILE_WRITE) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2726 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2727 errno = EBADF; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2728 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2729 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2730 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2731 /* Perform text mode translation if required. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2732 if ((fd_info[fd].flags & FILE_BINARY) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2733 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2734 char * tmpbuf = alloca (count * 2); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2735 unsigned char * src = (void *)buffer; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2736 unsigned char * dst = tmpbuf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2737 int nbytes = count; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2738 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2739 while (1) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2740 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2741 unsigned char *next; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2742 /* copy next line or remaining bytes */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2743 next = _memccpy (dst, src, '\n', nbytes); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2744 if (next) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2745 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2746 /* copied one line ending with '\n' */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2747 int copied = next - dst; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2748 nbytes -= copied; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2749 src += copied; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2750 /* insert '\r' before '\n' */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2751 next[-1] = '\r'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2752 next[0] = '\n'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2753 dst = next + 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2754 count++; |
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 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2757 /* copied remaining partial line -> now finished */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2758 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2759 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2760 buffer = tmpbuf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2761 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2762 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2763 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2764 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2765 if (fd_info[fd].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2766 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2767 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2768 nchars = pfn_send (SOCK_HANDLE (fd), buffer, count, 0); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2769 if (nchars == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2770 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2771 DebPrint(("sys_read.send failed with error %d on socket %ld\n", |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2772 pfn_WSAGetLastError (), SOCK_HANDLE (fd))); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2773 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2774 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2775 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2776 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2777 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2778 nchars = _write (fd, buffer, count); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2779 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2780 return nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2781 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2782 |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2783 static void |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2784 check_windows_init_file () |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2785 { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2786 extern int noninteractive, inhibit_window_system; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2787 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2788 /* 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
|
2789 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
|
2790 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
|
2791 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2792 if (!noninteractive && !inhibit_window_system) { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2793 extern Lisp_Object Vwindow_system, Vload_path; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2794 Lisp_Object init_file; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2795 int fd; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2796 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2797 init_file = build_string ("term/w32-win"); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2798 fd = openp (Vload_path, init_file, ".el:.elc", NULL, 0); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2799 if (fd < 0) { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2800 Lisp_Object load_path_print = Fprin1_to_string (Vload_path, Qnil); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2801 char *init_file_name = XSTRING (init_file)->data; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2802 char *load_path = XSTRING (load_path_print)->data; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2803 char *buffer = alloca (1024); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2804 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2805 sprintf (buffer, |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2806 "The Emacs Windows initialization file \"%s.el\" " |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2807 "could not be found in your Emacs installation. " |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2808 "Emacs checked the following directories for this file:\n" |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2809 "\n%s\n\n" |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2810 "When Emacs cannot find this file, it usually means that it " |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2811 "was not installed properly, or its distribution file was " |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2812 "not unpacked properly.\nSee the README.W32 file in the " |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2813 "top-level Emacs directory for more information.", |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2814 init_file_name, load_path); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2815 MessageBox (NULL, |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2816 buffer, |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2817 "Emacs Abort Dialog", |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2818 MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2819 close (fd); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2820 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2821 /* Use the low-level Emacs abort. */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2822 #undef abort |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2823 abort (); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2824 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2825 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2826 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2827 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2828 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2829 term_ntproc () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2830 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2831 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2832 /* shutdown the socket interface if necessary */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2833 term_winsock (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2834 #endif |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2835 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2836 /* Check whether we are shutting down because we cannot find the |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2837 Windows initialization file. Do this during shutdown so that |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2838 Emacs is initialized as possible, and so that it is out of the |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2839 critical startup path. */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
2840 check_windows_init_file (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2841 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2842 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2843 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2844 init_ntproc () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2845 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2846 #ifdef HAVE_SOCKETS |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2847 /* 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
|
2848 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
|
2849 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
|
2850 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
|
2851 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2852 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
|
2853 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
|
2854 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2855 /* Always initialize this correctly. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2856 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2857 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2858 if (getenv ("PRELOAD_WINSOCK") != NULL) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2859 init_winsock (TRUE); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2860 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2861 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2862 /* 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
|
2863 handles with non-inheritable versions. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2864 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2865 HANDLE parent; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2866 HANDLE stdin_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2867 HANDLE stdout_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2868 HANDLE stderr_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2869 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2870 parent = GetCurrentProcess (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2871 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2872 /* 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
|
2873 handles will be invalid when running as a gui program. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2874 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2875 GetStdHandle (STD_INPUT_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2876 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2877 &stdin_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2878 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2879 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2880 DUPLICATE_SAME_ACCESS); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2881 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2882 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2883 GetStdHandle (STD_OUTPUT_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2884 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2885 &stdout_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2886 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2887 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2888 DUPLICATE_SAME_ACCESS); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2889 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2890 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2891 GetStdHandle (STD_ERROR_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2892 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2893 &stderr_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2894 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2895 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2896 DUPLICATE_SAME_ACCESS); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2897 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2898 fclose (stdin); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2899 fclose (stdout); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2900 fclose (stderr); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2901 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2902 if (stdin_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2903 _open_osfhandle ((long) stdin_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2904 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2905 _open ("nul", O_TEXT | O_NOINHERIT | O_RDONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2906 _fdopen (0, "r"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2907 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2908 if (stdout_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2909 _open_osfhandle ((long) stdout_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2910 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2911 _open ("nul", O_TEXT | O_NOINHERIT | O_WRONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2912 _fdopen (1, "w"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2913 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2914 if (stderr_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2915 _open_osfhandle ((long) stderr_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2916 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2917 _open ("nul", O_TEXT | O_NOINHERIT | O_WRONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2918 _fdopen (2, "w"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2919 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2920 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2921 /* unfortunately, atexit depends on implementation of malloc */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2922 /* atexit (term_ntproc); */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2923 signal (SIGABRT, term_ntproc); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2924 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2925 /* determine which drives are fixed, for GetCachedVolumeInformation */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2926 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2927 /* GetDriveType must have trailing backslash. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2928 char drive[] = "A:\\"; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2929 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2930 /* Loop over all possible drive letters */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2931 while (*drive <= 'Z') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2932 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2933 /* Record if this drive letter refers to a fixed drive. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2934 fixed_drives[DRIVE_INDEX (*drive)] = |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2935 (GetDriveType (drive) == DRIVE_FIXED); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2936 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2937 (*drive)++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2938 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2939 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2940 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2941 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2942 /* end of nt.c */ |