Mercurial > emacs
annotate src/w32.c @ 80670:42bdac53d197
(custom-save-all): Avoid destrying symlink if already visiting the
custom file.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 02 Aug 2008 21:10:05 +0000 |
parents | 58df3fdb731c |
children | a20e957dc172 |
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. |
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64326
diff
changeset
|
2 Copyright (C) 1994, 1995, 2000, 2001, 2002, 2003, 2004, |
79759 | 3 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
9803 | 4 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
5 This file is part of GNU Emacs. |
9803 | 6 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
7 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
|
8 it under the terms of the GNU General Public License as published by |
78260
922696f363b0
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
78028
diff
changeset
|
9 the Free Software Foundation; either version 3, or (at your option) |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
10 any later version. |
9803 | 11 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
15 GNU General Public License for more details. |
9803 | 16 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13932
diff
changeset
|
18 along with GNU Emacs; see the file COPYING. If not, write to |
64084 | 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 Boston, MA 02110-1301, USA. | |
9803 | 21 |
22 Geoff Voelker (voelker@cs.washington.edu) 7-29-94 | |
23 */ | |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
24 #include <stddef.h> /* for offsetof */ |
9803 | 25 #include <stdlib.h> |
26 #include <stdio.h> | |
27 #include <io.h> | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
28 #include <errno.h> |
9803 | 29 #include <fcntl.h> |
30 #include <ctype.h> | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
31 #include <signal.h> |
22363 | 32 #include <sys/file.h> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
33 #include <sys/time.h> |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
34 #include <sys/utime.h> |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
35 #include <mbstring.h> /* for _mbspbrk */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
36 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
37 /* must include CRT headers *before* config.h */ |
42469 | 38 |
39 #ifdef HAVE_CONFIG_H | |
40 #include <config.h> | |
41 #endif | |
42 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
43 #undef access |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
44 #undef chdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
45 #undef chmod |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
46 #undef creat |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
47 #undef ctime |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
48 #undef fopen |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
49 #undef link |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
50 #undef mkdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
51 #undef mktemp |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
52 #undef open |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
53 #undef rename |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
54 #undef rmdir |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
55 #undef unlink |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
56 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
57 #undef close |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
58 #undef dup |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
59 #undef dup2 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
60 #undef pipe |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
61 #undef read |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
62 #undef write |
9803 | 63 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
64 #undef strerror |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
65 |
9803 | 66 #include "lisp.h" |
67 | |
68 #include <pwd.h> | |
53123 | 69 #include <grp.h> |
9803 | 70 |
31350
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
71 #ifdef __GNUC__ |
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
72 #define _ANONYMOUS_UNION |
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
73 #define _ANONYMOUS_STRUCT |
f5c37cece73f
(_ANONYMOUS_UNION) [__GNUC__]: New define
Andrew Innes <andrewi@gnu.org>
parents:
31106
diff
changeset
|
74 #endif |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
75 #include <windows.h> |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
76 #include <shlobj.h> |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
77 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
78 #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
|
79 #include <sys/socket.h> |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
80 #undef socket |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
81 #undef bind |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
82 #undef connect |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
83 #undef htons |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
84 #undef ntohs |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
85 #undef inet_addr |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
86 #undef gethostname |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
87 #undef gethostbyname |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
88 #undef getservbyname |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
89 #undef getpeername |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
90 #undef shutdown |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
91 #undef setsockopt |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
92 #undef listen |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
93 #undef getsockname |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
94 #undef accept |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
95 #undef recvfrom |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
96 #undef sendto |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
97 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
98 |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
99 #include "w32.h" |
9803 | 100 #include "ndir.h" |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
101 #include "w32heap.h" |
35286
fcd8120b294a
(init_environment, sys_shutdown, sys_pipe): Remove unused
Jason Rumney <jasonr@gnu.org>
parents:
34696
diff
changeset
|
102 #include "systime.h" |
fcd8120b294a
(init_environment, sys_shutdown, sys_pipe): Remove unused
Jason Rumney <jasonr@gnu.org>
parents:
34696
diff
changeset
|
103 |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
104 typedef HRESULT (WINAPI * ShGetFolderPath_fn) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
105 (IN HWND, IN int, IN HANDLE, IN DWORD, OUT char *); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
106 |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
107 void globals_of_w32 (); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
108 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
109 extern Lisp_Object Vw32_downcase_file_names; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
110 extern Lisp_Object Vw32_generate_fake_inodes; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
111 extern Lisp_Object Vw32_get_true_file_attributes; |
80484
796bbedc63b1
(stat): When Vw32_get_true_file_attributes is Qlocal, get
Jason Rumney <jasonr@gnu.org>
parents:
80376
diff
changeset
|
112 /* Defined in process.c for its own purpose. */ |
796bbedc63b1
(stat): When Vw32_get_true_file_attributes is Qlocal, get
Jason Rumney <jasonr@gnu.org>
parents:
80376
diff
changeset
|
113 extern Lisp_Object Qlocal; |
796bbedc63b1
(stat): When Vw32_get_true_file_attributes is Qlocal, get
Jason Rumney <jasonr@gnu.org>
parents:
80376
diff
changeset
|
114 |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
115 extern int w32_num_mouse_buttons; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
116 |
34696
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
117 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
118 /* |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
119 Initialization states |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
120 */ |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
121 static BOOL g_b_init_is_windows_9x; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
122 static BOOL g_b_init_open_process_token; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
123 static BOOL g_b_init_get_token_information; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
124 static BOOL g_b_init_lookup_account_sid; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
125 static BOOL g_b_init_get_sid_identifier_authority; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
126 |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
127 /* |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
128 BEGIN: Wrapper functions around OpenProcessToken |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
129 and other functions in advapi32.dll that are only |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
130 supported in Windows NT / 2k / XP |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
131 */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
132 /* ** Function pointer typedefs ** */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
133 typedef BOOL (WINAPI * OpenProcessToken_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
134 HANDLE ProcessHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
135 DWORD DesiredAccess, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
136 PHANDLE TokenHandle); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
137 typedef BOOL (WINAPI * GetTokenInformation_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
138 HANDLE TokenHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
139 TOKEN_INFORMATION_CLASS TokenInformationClass, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
140 LPVOID TokenInformation, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
141 DWORD TokenInformationLength, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
142 PDWORD ReturnLength); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
143 #ifdef _UNICODE |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
144 const char * const LookupAccountSid_Name = "LookupAccountSidW"; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
145 #else |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
146 const char * const LookupAccountSid_Name = "LookupAccountSidA"; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
147 #endif |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
148 typedef BOOL (WINAPI * LookupAccountSid_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
149 LPCTSTR lpSystemName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
150 PSID Sid, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
151 LPTSTR Name, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
152 LPDWORD cbName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
153 LPTSTR DomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
154 LPDWORD cbDomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
155 PSID_NAME_USE peUse); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
156 typedef PSID_IDENTIFIER_AUTHORITY (WINAPI * GetSidIdentifierAuthority_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
157 PSID pSid); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
158 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
159 /* ** A utility function ** */ |
74947 | 160 static BOOL |
161 is_windows_9x () | |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
162 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
163 static BOOL s_b_ret=0; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
164 OSVERSIONINFO os_ver; |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
165 if (g_b_init_is_windows_9x == 0) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
166 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
167 g_b_init_is_windows_9x = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
168 ZeroMemory(&os_ver, sizeof(OSVERSIONINFO)); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
169 os_ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
170 if (GetVersionEx (&os_ver)) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
171 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
172 s_b_ret = (os_ver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
173 } |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
174 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
175 return s_b_ret; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
176 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
177 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
178 /* ** The wrapper functions ** */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
179 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
180 BOOL WINAPI open_process_token ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
181 HANDLE ProcessHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
182 DWORD DesiredAccess, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
183 PHANDLE TokenHandle) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
184 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
185 static OpenProcessToken_Proc s_pfn_Open_Process_Token = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
186 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
187 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
188 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
189 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
190 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
191 if (g_b_init_open_process_token == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
192 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
193 g_b_init_open_process_token = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
194 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
195 s_pfn_Open_Process_Token = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
196 (OpenProcessToken_Proc) GetProcAddress (hm_advapi32, "OpenProcessToken"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
197 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
198 if (s_pfn_Open_Process_Token == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
199 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
200 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
201 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
202 return ( |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
203 s_pfn_Open_Process_Token ( |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
204 ProcessHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
205 DesiredAccess, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
206 TokenHandle) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
207 ); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
208 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
209 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
210 BOOL WINAPI get_token_information ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
211 HANDLE TokenHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
212 TOKEN_INFORMATION_CLASS TokenInformationClass, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
213 LPVOID TokenInformation, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
214 DWORD TokenInformationLength, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
215 PDWORD ReturnLength) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
216 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
217 static GetTokenInformation_Proc s_pfn_Get_Token_Information = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
218 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
219 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
220 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
221 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
222 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
223 if (g_b_init_get_token_information == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
224 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
225 g_b_init_get_token_information = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
226 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
227 s_pfn_Get_Token_Information = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
228 (GetTokenInformation_Proc) GetProcAddress (hm_advapi32, "GetTokenInformation"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
229 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
230 if (s_pfn_Get_Token_Information == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
231 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
232 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
233 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
234 return ( |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
235 s_pfn_Get_Token_Information ( |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
236 TokenHandle, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
237 TokenInformationClass, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
238 TokenInformation, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
239 TokenInformationLength, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
240 ReturnLength) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
241 ); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
242 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
243 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
244 BOOL WINAPI lookup_account_sid ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
245 LPCTSTR lpSystemName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
246 PSID Sid, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
247 LPTSTR Name, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
248 LPDWORD cbName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
249 LPTSTR DomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
250 LPDWORD cbDomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
251 PSID_NAME_USE peUse) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
252 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
253 static LookupAccountSid_Proc s_pfn_Lookup_Account_Sid = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
254 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
255 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
256 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
257 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
258 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
259 if (g_b_init_lookup_account_sid == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
260 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
261 g_b_init_lookup_account_sid = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
262 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
263 s_pfn_Lookup_Account_Sid = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
264 (LookupAccountSid_Proc) GetProcAddress (hm_advapi32, LookupAccountSid_Name); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
265 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
266 if (s_pfn_Lookup_Account_Sid == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
267 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
268 return FALSE; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
269 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
270 return ( |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
271 s_pfn_Lookup_Account_Sid ( |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
272 lpSystemName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
273 Sid, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
274 Name, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
275 cbName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
276 DomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
277 cbDomainName, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
278 peUse) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
279 ); |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
280 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
281 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
282 PSID_IDENTIFIER_AUTHORITY WINAPI get_sid_identifier_authority ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
283 PSID pSid) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
284 { |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
285 static GetSidIdentifierAuthority_Proc s_pfn_Get_Sid_Identifier_Authority = NULL; |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
286 HMODULE hm_advapi32 = NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
287 if (is_windows_9x () == TRUE) |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
288 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
289 return NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
290 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
291 if (g_b_init_get_sid_identifier_authority == 0) |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
292 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
293 g_b_init_get_sid_identifier_authority = 1; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
294 hm_advapi32 = LoadLibrary ("Advapi32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
295 s_pfn_Get_Sid_Identifier_Authority = |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
296 (GetSidIdentifierAuthority_Proc) GetProcAddress ( |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
297 hm_advapi32, "GetSidIdentifierAuthority"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
298 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
299 if (s_pfn_Get_Sid_Identifier_Authority == NULL) |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
300 { |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
301 return NULL; |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
302 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
303 return (s_pfn_Get_Sid_Identifier_Authority (pSid)); |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
304 } |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
305 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
306 /* |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
307 END: Wrapper functions around OpenProcessToken |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
308 and other functions in advapi32.dll that are only |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
309 supported in Windows NT / 2k / XP |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
310 */ |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
311 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
312 |
34696
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
313 /* Equivalent of strerror for W32 error codes. */ |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
314 char * |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
315 w32_strerror (int error_no) |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
316 { |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
317 static char buf[500]; |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
318 |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
319 if (error_no == 0) |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
320 error_no = GetLastError (); |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
321 |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
322 buf[0] = '\0'; |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
323 if (!FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
324 error_no, |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
325 0, /* choose most suitable language */ |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
326 buf, sizeof (buf), NULL)) |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
327 sprintf (buf, "w32 error %u", error_no); |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
328 return buf; |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
329 } |
a1785afaedef
(w32_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
34644
diff
changeset
|
330 |
72286
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
331 /* Return 1 if P is a valid pointer to an object of size SIZE. Return |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
332 0 if P is NOT a valid pointer. Return -1 if we cannot validate P. |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
333 |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
334 This is called from alloc.c:valid_pointer_p. */ |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
335 int |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
336 w32_valid_pointer_p (void *p, int size) |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
337 { |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
338 SIZE_T done; |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
339 HANDLE h = OpenProcess (PROCESS_VM_READ, FALSE, GetCurrentProcessId ()); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
340 |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
341 if (h) |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
342 { |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
343 unsigned char *buf = alloca (size); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
344 int retval = ReadProcessMemory (h, p, buf, size, &done); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
345 |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
346 CloseHandle (h); |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
347 return retval; |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
348 } |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
349 else |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
350 return -1; |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
351 } |
95d41ccb4448
(w32_valid_pointer_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72059
diff
changeset
|
352 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
353 static char startup_dir[MAXPATHLEN]; |
9803 | 354 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
355 /* Get the current working directory. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
356 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
357 getwd (char *dir) |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
358 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
359 #if 0 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
360 if (GetCurrentDirectory (MAXPATHLEN, dir) > 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
361 return dir; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
362 return NULL; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
363 #else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
364 /* 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
|
365 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
|
366 conflicts when trying to rename or delete directories. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
367 strcpy (dir, startup_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
368 return dir; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
369 #endif |
14246
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
370 } |
ebdd1b50daba
(nt_stat): Use alloca instead of xmalloc.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14186
diff
changeset
|
371 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
372 #ifndef HAVE_SOCKETS |
9803 | 373 /* Emulate gethostname. */ |
374 int | |
375 gethostname (char *buffer, int size) | |
376 { | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
377 /* NT only allows small host names, so the buffer is |
9803 | 378 certainly large enough. */ |
379 return !GetComputerName (buffer, &size); | |
380 } | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
381 #endif /* HAVE_SOCKETS */ |
9803 | 382 |
383 /* Emulate getloadavg. */ | |
384 int | |
385 getloadavg (double loadavg[], int nelem) | |
386 { | |
387 int i; | |
388 | |
389 /* A faithful emulation is going to have to be saved for a rainy day. */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
390 for (i = 0; i < nelem; i++) |
9803 | 391 { |
392 loadavg[i] = 0.0; | |
393 } | |
394 return i; | |
395 } | |
396 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
397 /* Emulate getpwuid, getpwnam and others. */ |
9803 | 398 |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
399 #define PASSWD_FIELD_SIZE 256 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
400 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
401 static char the_passwd_name[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
402 static char the_passwd_passwd[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
403 static char the_passwd_gecos[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
404 static char the_passwd_dir[PASSWD_FIELD_SIZE]; |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
405 static char the_passwd_shell[PASSWD_FIELD_SIZE]; |
9803 | 406 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
407 static struct passwd the_passwd = |
9803 | 408 { |
409 the_passwd_name, | |
410 the_passwd_passwd, | |
411 0, | |
412 0, | |
413 0, | |
414 the_passwd_gecos, | |
415 the_passwd_dir, | |
416 the_passwd_shell, | |
417 }; | |
418 | |
53123 | 419 static struct group the_group = |
420 { | |
421 /* There are no groups on NT, so we just return "root" as the | |
422 group name. */ | |
423 "root", | |
424 }; | |
425 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
426 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
427 getuid () |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
428 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
429 return the_passwd.pw_uid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
430 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
431 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
432 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
433 geteuid () |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
434 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
435 /* 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
|
436 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
|
437 case, but I don't know how wise that would be in the long run. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
438 return getuid (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
439 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
440 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
441 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
442 getgid () |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
443 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
444 return the_passwd.pw_gid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
445 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
446 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
447 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
448 getegid () |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
449 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
450 return getgid (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
451 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
452 |
9803 | 453 struct passwd * |
454 getpwuid (int uid) | |
455 { | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
456 if (uid == the_passwd.pw_uid) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
457 return &the_passwd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
458 return NULL; |
9803 | 459 } |
460 | |
53123 | 461 struct group * |
462 getgrgid (gid_t gid) | |
463 { | |
464 return &the_group; | |
465 } | |
466 | |
9803 | 467 struct passwd * |
468 getpwnam (char *name) | |
469 { | |
470 struct passwd *pw; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
471 |
9803 | 472 pw = getpwuid (getuid ()); |
473 if (!pw) | |
474 return pw; | |
475 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
476 if (stricmp (name, pw->pw_name)) |
9803 | 477 return NULL; |
478 | |
479 return pw; | |
480 } | |
481 | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
482 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
483 init_user_info () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
484 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
485 /* 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
|
486 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
|
487 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
488 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
|
489 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
|
490 primary group sid from the process token). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
491 |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
492 char user_sid[256], name[256], domain[256]; |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
493 DWORD length = sizeof (name), dlength = sizeof (domain), trash; |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
494 HANDLE token = NULL; |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
495 SID_NAME_USE user_type; |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
496 |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
497 if (open_process_token (GetCurrentProcess (), TOKEN_QUERY, &token) |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
498 && get_token_information (token, TokenUser, |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
499 (PVOID) user_sid, sizeof (user_sid), &trash) |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
500 && lookup_account_sid (NULL, *((PSID *) user_sid), name, &length, |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
501 domain, &dlength, &user_type)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
502 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
503 strcpy (the_passwd.pw_name, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
504 /* Determine a reasonable uid value. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
505 if (stricmp ("administrator", name) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
506 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
507 the_passwd.pw_uid = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
508 the_passwd.pw_gid = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
509 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
510 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
511 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
512 SID_IDENTIFIER_AUTHORITY * pSIA; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
513 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
514 pSIA = get_sid_identifier_authority (*((PSID *) user_sid)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
515 /* 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
|
516 with msb first. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
517 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
|
518 (pSIA->Value[3] << 16) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
519 (pSIA->Value[4] << 8) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
520 (pSIA->Value[5] << 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
521 /* 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
|
522 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
|
523 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
524 /* Get group id */ |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
525 if (get_token_information (token, TokenPrimaryGroup, |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
526 (PVOID) user_sid, sizeof (user_sid), &trash)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
527 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
528 SID_IDENTIFIER_AUTHORITY * pSIA; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
529 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46370
diff
changeset
|
530 pSIA = get_sid_identifier_authority (*((PSID *) user_sid)); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
531 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
|
532 (pSIA->Value[3] << 16) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
533 (pSIA->Value[4] << 8) + |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
534 (pSIA->Value[5] << 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
535 /* 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
|
536 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
|
537 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
538 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
539 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
|
540 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
541 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
542 /* If security calls are not supported (presumably because we |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
543 are running under Windows 95), fallback to this. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
544 else if (GetUserName (name, &length)) |
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 strcpy (the_passwd.pw_name, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
547 if (stricmp ("administrator", name) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
548 the_passwd.pw_uid = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
549 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
550 the_passwd.pw_uid = 123; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
551 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
|
552 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
553 else |
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 strcpy (the_passwd.pw_name, "unknown"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
556 the_passwd.pw_uid = 123; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
557 the_passwd.pw_gid = 123; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
558 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
559 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
560 /* Ensure HOME and SHELL are defined. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
561 if (getenv ("HOME") == NULL) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
562 abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
563 if (getenv ("SHELL") == NULL) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
564 abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
565 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
566 /* Set dir and shell from environment variables. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
567 strcpy (the_passwd.pw_dir, getenv ("HOME")); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
568 strcpy (the_passwd.pw_shell, getenv ("SHELL")); |
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 if (token) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
571 CloseHandle (token); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
572 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
573 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
574 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
575 random () |
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 /* 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
|
578 return ((rand () << 15) | rand ()); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
579 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
580 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
581 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
582 srandom (int seed) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
583 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
584 srand (seed); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
585 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
586 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
587 |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
588 /* Normalize filename by converting all path separators to |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
589 the specified separator. Also conditionally convert upper |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
590 case path name components to lower case. */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
591 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
592 static void |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
593 normalize_filename (fp, path_sep) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
594 register char *fp; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
595 char path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
596 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
597 char sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
598 char *elem; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
599 |
15615
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
600 /* 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
|
601 preserves case in filenames. |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 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
|
606 { |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
607 *fp += 'a' - 'A'; |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
608 fp += 2; |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
609 } |
124e347ce827
(normalize_filename): Always lower-case drive letters, even on systems
Miles Bader <miles@gnu.org>
parents:
15418
diff
changeset
|
610 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
611 if (NILP (Vw32_downcase_file_names)) |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
612 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
613 while (*fp) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
614 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
615 if (*fp == '/' || *fp == '\\') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
616 *fp = path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
617 fp++; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
618 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
619 return; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
620 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
621 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
622 sep = path_sep; /* convert to this path separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
623 elem = fp; /* start of current path element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
624 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
625 do { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
626 if (*fp >= 'a' && *fp <= 'z') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
627 elem = 0; /* don't convert this element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
628 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
629 if (*fp == 0 || *fp == ':') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
630 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
631 sep = *fp; /* restore current separator (or 0) */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
632 *fp = '/'; /* after conversion of this element */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
633 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
634 |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
635 if (*fp == '/' || *fp == '\\') |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
636 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
637 if (elem && elem != fp) |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
638 { |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
639 *fp = 0; /* temporary end of string */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
640 _strlwr (elem); /* while we convert to lower case */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
641 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
642 *fp = sep; /* convert (or restore) path separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
643 elem = fp + 1; /* next element starts after separator */ |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
644 sep = path_sep; |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
645 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
646 } while (*fp++); |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
647 } |
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
648 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
649 /* Destructively turn backslashes into slashes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
650 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
651 dostounix_filename (p) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
652 register char *p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
653 { |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
654 normalize_filename (p, '/'); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
655 } |
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 /* Destructively turn slashes into backslashes. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
658 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
659 unixtodos_filename (p) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
660 register char *p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
661 { |
15326
ea444efb0b95
(normalize_filename): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15279
diff
changeset
|
662 normalize_filename (p, '\\'); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
663 } |
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 /* 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
|
666 (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
|
667 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
|
668 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
669 crlf_to_lf (n, buf) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
670 register int n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
671 register unsigned char *buf; |
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 unsigned char *np = buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
674 unsigned char *startp = buf; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
675 unsigned char *endp = buf + n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
676 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
677 if (n == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
678 return n; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
679 while (buf < endp - 1) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
680 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
681 if (*buf == 0x0d) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
682 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
683 if (*(++buf) != 0x0a) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
684 *np++ = 0x0d; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
685 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
686 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
687 *np++ = *buf++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
688 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
689 if (buf < endp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
690 *np++ = *buf++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
691 return np - startp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
692 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
693 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
694 /* 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
|
695 optionally store pointer to char after root. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
696 static int |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
697 parse_root (char * name, char ** pPath) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
698 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
699 char * start = name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
700 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
701 if (name == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
702 return 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
703 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
704 /* find the root name of the volume if given */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
705 if (isalpha (name[0]) && name[1] == ':') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
706 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
707 /* skip past drive specifier */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
708 name += 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
709 if (IS_DIRECTORY_SEP (name[0])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
710 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
711 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
712 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
|
713 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
714 int slashes = 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
715 name += 2; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
716 do |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
717 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
718 if (IS_DIRECTORY_SEP (*name) && --slashes == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
719 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
720 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
721 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
722 while ( *name ); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
723 if (IS_DIRECTORY_SEP (name[0])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
724 name++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
725 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
726 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
727 if (pPath) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
728 *pPath = name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
729 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
730 return name - start; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
731 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
732 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
733 /* 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
|
734 static int |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
735 get_long_basename (char * name, char * buf, int size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
736 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
737 WIN32_FIND_DATA find_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
738 HANDLE dir_handle; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
739 int len = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
740 |
28932
f8b0ac62f238
Use the term `invalid' instead of `illegal'.
Gerd Moellmann <gerd@gnu.org>
parents:
27890
diff
changeset
|
741 /* must be valid filename, no wild cards or other invalid characters */ |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
742 if (_mbspbrk (name, "*?|<>\"")) |
22039
c33bec4d9e67
(stat, get_long_basename): Fail if filename contains any
Richard M. Stallman <rms@gnu.org>
parents:
21747
diff
changeset
|
743 return 0; |
c33bec4d9e67
(stat, get_long_basename): Fail if filename contains any
Richard M. Stallman <rms@gnu.org>
parents:
21747
diff
changeset
|
744 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
745 dir_handle = FindFirstFile (name, &find_data); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
746 if (dir_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
747 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
748 if ((len = strlen (find_data.cFileName)) < size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
749 memcpy (buf, find_data.cFileName, len + 1); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
750 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
751 len = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
752 FindClose (dir_handle); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
753 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
754 return len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
755 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
756 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
757 /* 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
|
758 BOOL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
759 w32_get_long_filename (char * name, char * buf, int size) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
760 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
761 char * o = buf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
762 char * p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
763 char * q; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
764 char full[ MAX_PATH ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
765 int len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
766 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
767 len = strlen (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
768 if (len >= MAX_PATH) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
769 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
770 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
771 /* Use local copy for destructive modification. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
772 memcpy (full, name, len+1); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
773 unixtodos_filename (full); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
774 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
775 /* Copy root part verbatim. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
776 len = parse_root (full, &p); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
777 memcpy (o, full, len); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
778 o += len; |
23858
6bb3dc7f1b48
(w32_get_long_filename): Handle root dirs correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23809
diff
changeset
|
779 *o = '\0'; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
780 size -= len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
781 |
23858
6bb3dc7f1b48
(w32_get_long_filename): Handle root dirs correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23809
diff
changeset
|
782 while (p != NULL && *p) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
783 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
784 q = p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
785 p = strchr (q, '\\'); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
786 if (p) *p = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
787 len = get_long_basename (full, o, size); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
788 if (len > 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
789 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
790 o += len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
791 size -= len; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
792 if (p != NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
793 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
794 *p++ = '\\'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
795 if (size < 2) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
796 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
797 *o++ = '\\'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
798 size--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
799 *o = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
800 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
801 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
802 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
803 return FALSE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
804 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
805 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
806 return TRUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
807 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
808 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
809 int |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
810 is_unc_volume (const char *filename) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
811 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
812 const char *ptr = filename; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
813 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
814 if (!IS_DIRECTORY_SEP (ptr[0]) || !IS_DIRECTORY_SEP (ptr[1]) || !ptr[2]) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
815 return 0; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
816 |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
817 if (_mbspbrk (ptr + 2, "*?|<>\"\\/")) |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
818 return 0; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
819 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
820 return 1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
821 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
822 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
823 /* 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
|
824 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
825 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
826 sigsetmask (int signal_mask) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
827 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
828 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
829 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
830 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
831 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
832 sigmask (int sig) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
833 { |
27630
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
834 return 0; |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
835 } |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
836 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
837 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
838 sigblock (int sig) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
839 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
840 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
841 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
842 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
843 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
844 sigunblock (int sig) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
845 { |
27630
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
846 return 0; |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
847 } |
95dde6f88b39
(sigmask): New function (does nothing).
Andrew Innes <andrewi@gnu.org>
parents:
25193
diff
changeset
|
848 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
849 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
850 setpgrp (int pid, int gid) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
851 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
852 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
853 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
854 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
855 int |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
856 alarm (int seconds) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
857 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
858 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
859 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
860 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
861 void |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
862 unrequest_sigio (void) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
863 { |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
864 return; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
865 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
866 |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
867 void |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
868 request_sigio (void) |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
869 { |
21451
f6a5f21ba451
(unrequest_sigio, request_sigio): Fix prototype.
Karl Heuer <kwzh@gnu.org>
parents:
19704
diff
changeset
|
870 return; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
871 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
872 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
873 #define REG_ROOT "SOFTWARE\\GNU\\Emacs" |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
874 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
875 LPBYTE |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
876 w32_get_resource (key, lpdwtype) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
877 char *key; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
878 LPDWORD lpdwtype; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
879 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
880 LPBYTE lpvalue; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
881 HKEY hrootkey = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
882 DWORD cbData; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
883 |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
884 /* Check both the current user and the local machine to see if |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
885 we have any resources. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
886 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
887 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
|
888 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
889 lpvalue = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
890 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
891 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
892 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
893 && 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
|
894 { |
78919
87875c00eb06
(w32_get_resource): Always close registry keys.
Jason Rumney <jasonr@gnu.org>
parents:
78260
diff
changeset
|
895 RegCloseKey (hrootkey); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
896 return (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
897 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
898 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
899 if (lpvalue) xfree (lpvalue); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
900 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
901 RegCloseKey (hrootkey); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
902 } |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
903 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
904 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
|
905 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
906 lpvalue = NULL; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
907 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
908 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
909 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
910 && 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
|
911 { |
78919
87875c00eb06
(w32_get_resource): Always close registry keys.
Jason Rumney <jasonr@gnu.org>
parents:
78260
diff
changeset
|
912 RegCloseKey (hrootkey); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
913 return (lpvalue); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
914 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
915 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
916 if (lpvalue) xfree (lpvalue); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
917 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
918 RegCloseKey (hrootkey); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
919 } |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
920 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
921 return (NULL); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
922 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
923 |
16892
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
924 char *get_emacs_configuration (void); |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
925 extern Lisp_Object Vsystem_configuration; |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
926 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
927 void |
24229
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
928 init_environment (char ** argv) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
929 { |
22363 | 930 static const char * const tempdirs[] = { |
931 "$TMPDIR", "$TEMP", "$TMP", "c:/" | |
932 }; | |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
933 |
22363 | 934 int i; |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
935 |
22363 | 936 const int imax = sizeof (tempdirs) / sizeof (tempdirs[0]); |
937 | |
938 /* Make sure they have a usable $TMPDIR. Many Emacs functions use | |
939 temporary files and assume "/tmp" if $TMPDIR is unset, which | |
940 will break on DOS/Windows. Refuse to work if we cannot find | |
941 a directory, not even "c:/", usable for that purpose. */ | |
942 for (i = 0; i < imax ; i++) | |
943 { | |
944 const char *tmp = tempdirs[i]; | |
945 | |
946 if (*tmp == '$') | |
947 tmp = getenv (tmp + 1); | |
948 /* Note that `access' can lie to us if the directory resides on a | |
949 read-only filesystem, like CD-ROM or a write-protected floppy. | |
950 The only way to be really sure is to actually create a file and | |
951 see if it succeeds. But I think that's too much to ask. */ | |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
952 if (tmp && _access (tmp, D_OK) == 0) |
22363 | 953 { |
954 char * var = alloca (strlen (tmp) + 8); | |
955 sprintf (var, "TMPDIR=%s", tmp); | |
36001
1d402a57bb21
(init-environment): Duplicate local string before putenv.
Jason Rumney <jasonr@gnu.org>
parents:
35425
diff
changeset
|
956 _putenv (strdup (var)); |
22363 | 957 break; |
958 } | |
959 } | |
960 if (i >= imax) | |
961 cmd_error_internal | |
962 (Fcons (Qerror, | |
963 Fcons (build_string ("no usable temporary directories found!!"), | |
964 Qnil)), | |
965 "While setting TMPDIR: "); | |
966 | |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
967 /* Check for environment variables and use registry settings if they |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
968 don't exist. Fallback on default values where applicable. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
969 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
970 int i; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
971 LPBYTE lpval; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
972 DWORD dwType; |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
973 char locale_name[32]; |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
974 struct stat ignored; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
975 char default_home[MAX_PATH]; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
976 |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
977 static const struct env_entry |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
978 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
979 char * name; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
980 char * def_value; |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
981 } dflt_envvars[] = |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
982 { |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
983 {"HOME", "C:/"}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
984 {"PRELOAD_WINSOCK", NULL}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
985 {"emacs_dir", "C:/emacs"}, |
35425
c26271ca6ad0
(init_environment): Add a version-independent site-lisp
Andrew Innes <andrewi@gnu.org>
parents:
35286
diff
changeset
|
986 {"EMACSLOADPATH", "%emacs_dir%/site-lisp;%emacs_dir%/../site-lisp;%emacs_dir%/lisp;%emacs_dir%/leim"}, |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
987 {"SHELL", "%emacs_dir%/bin/cmdproxy.exe"}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
988 {"EMACSDATA", "%emacs_dir%/etc"}, |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
989 {"EMACSPATH", "%emacs_dir%/bin"}, |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
990 /* We no longer set INFOPATH because Info-default-directory-list |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
991 is then ignored. */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
992 /* {"INFOPATH", "%emacs_dir%/info"}, */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
993 {"EMACSDOC", "%emacs_dir%/etc"}, |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
994 {"TERM", "cmd"}, |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
995 {"LANG", NULL}, |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
996 }; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
997 |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
998 #define N_ENV_VARS sizeof(dflt_envvars)/sizeof(dflt_envvars[0]) |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
999 |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1000 /* We need to copy dflt_envvars[] and work on the copy because we |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1001 don't want the dumped Emacs to inherit the values of |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1002 environment variables we saw during dumping (which could be on |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1003 a different system). The defaults above must be left intact. */ |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1004 struct env_entry env_vars[N_ENV_VARS]; |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1005 |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1006 for (i = 0; i < N_ENV_VARS; i++) |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1007 env_vars[i] = dflt_envvars[i]; |
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1008 |
64326
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1009 /* For backwards compatibility, check if a .emacs file exists in C:/ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1010 If not, then we can try to default to the appdata directory under the |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1011 user's profile, which is more likely to be writable. */ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1012 if (stat ("C:/.emacs", &ignored) < 0) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1013 { |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1014 HRESULT profile_result; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1015 /* Dynamically load ShGetFolderPath, as it won't exist on versions |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1016 of Windows 95 and NT4 that have not been updated to include |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1017 MSIE 5. Also we don't link with shell32.dll by default. */ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1018 HMODULE shell32_dll; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1019 ShGetFolderPath_fn get_folder_path; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1020 shell32_dll = GetModuleHandle ("shell32.dll"); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1021 get_folder_path = (ShGetFolderPath_fn) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1022 GetProcAddress (shell32_dll, "SHGetFolderPathA"); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1023 |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1024 if (get_folder_path != NULL) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1025 { |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1026 profile_result = get_folder_path (NULL, CSIDL_APPDATA, NULL, |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1027 0, default_home); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1028 |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1029 /* If we can't get the appdata dir, revert to old behaviour. */ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1030 if (profile_result == S_OK) |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1031 env_vars[0].def_value = default_home; |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1032 } |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1033 |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1034 /* Unload shell32.dll, it is not needed anymore. */ |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1035 FreeLibrary (shell32_dll); |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1036 } |
8d328b39d0d9
(init_environment): Default HOME directory to user's
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1037 |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1038 /* Get default locale info and use it for LANG. */ |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1039 if (GetLocaleInfo (LOCALE_USER_DEFAULT, |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1040 LOCALE_SABBREVLANGNAME | LOCALE_USE_CP_ACP, |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1041 locale_name, sizeof (locale_name))) |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1042 { |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1043 for (i = 0; i < N_ENV_VARS; i++) |
33869
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1044 { |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1045 if (strcmp (env_vars[i].name, "LANG") == 0) |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1046 { |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1047 env_vars[i].def_value = locale_name; |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1048 break; |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1049 } |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1050 } |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1051 } |
e41a7b1e443f
(init_environment): Set LANG environment variable based on
Jason Rumney <jasonr@gnu.org>
parents:
31350
diff
changeset
|
1052 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1053 #define SET_ENV_BUF_SIZE (4 * MAX_PATH) /* to cover EMACSLOADPATH */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1054 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1055 /* Treat emacs_dir specially: set it unconditionally based on our |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1056 location, if it appears that we are running from the bin subdir |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1057 of a standard installation. */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1058 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1059 char *p; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1060 char modname[MAX_PATH]; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1061 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1062 if (!GetModuleFileName (NULL, modname, MAX_PATH)) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1063 abort (); |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1064 if ((p = strrchr (modname, '\\')) == NULL) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1065 abort (); |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1066 *p = 0; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1067 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1068 if ((p = strrchr (modname, '\\')) && stricmp (p, "\\bin") == 0) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1069 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1070 char buf[SET_ENV_BUF_SIZE]; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1071 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1072 *p = 0; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1073 for (p = modname; *p; p++) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1074 if (*p == '\\') *p = '/'; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1075 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1076 _snprintf (buf, sizeof(buf)-1, "emacs_dir=%s", modname); |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1077 _putenv (strdup (buf)); |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1078 } |
57609
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1079 /* Handle running emacs from the build directory: src/oo-spd/i386/ */ |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1080 |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1081 /* FIXME: should use substring of get_emacs_configuration (). |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1082 But I don't think the Windows build supports alpha, mips etc |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1083 anymore, so have taken the easy option for now. */ |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1084 else if (p && stricmp (p, "\\i386") == 0) |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1085 { |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1086 *p = 0; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1087 p = strrchr (modname, '\\'); |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1088 if (p != NULL) |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1089 { |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1090 *p = 0; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1091 p = strrchr (modname, '\\'); |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1092 if (p && stricmp (p, "\\src") == 0) |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1093 { |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1094 char buf[SET_ENV_BUF_SIZE]; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1095 |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1096 *p = 0; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1097 for (p = modname; *p; p++) |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1098 if (*p == '\\') *p = '/'; |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1099 |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1100 _snprintf (buf, sizeof(buf)-1, "emacs_dir=%s", modname); |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1101 _putenv (strdup (buf)); |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1102 } |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1103 } |
5aefaad0a5f1
(init_environment): Set emacs_dir correctly when running
Jason Rumney <jasonr@gnu.org>
parents:
55645
diff
changeset
|
1104 } |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1105 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1106 |
70738
ec34443b2ba0
(init_environment): Perform the processing of environment variables on a copy
Eli Zaretskii <eliz@gnu.org>
parents:
69172
diff
changeset
|
1107 for (i = 0; i < N_ENV_VARS; i++) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1108 { |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1109 if (!getenv (env_vars[i].name)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1110 { |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1111 int dont_free = 0; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1112 |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1113 if ((lpval = w32_get_resource (env_vars[i].name, &dwType)) == NULL |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1114 /* Also ignore empty environment variables. */ |
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
1115 || *lpval == 0) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1116 { |
79222
0ff71882c6a7
(init_environment): Fix tiny memory leak.
Juanma Barranquero <lekktu@gmail.com>
parents:
78919
diff
changeset
|
1117 if (lpval) xfree (lpval); |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1118 lpval = env_vars[i].def_value; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1119 dwType = REG_EXPAND_SZ; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1120 dont_free = 1; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1121 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1122 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1123 if (lpval) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1124 { |
70740
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1125 char buf1[SET_ENV_BUF_SIZE], buf2[SET_ENV_BUF_SIZE]; |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1126 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1127 if (dwType == REG_EXPAND_SZ) |
70740
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1128 ExpandEnvironmentStrings ((LPSTR) lpval, buf1, sizeof(buf1)); |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1129 else if (dwType == REG_SZ) |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1130 strcpy (buf1, lpval); |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1131 if (dwType == REG_EXPAND_SZ || dwType == REG_SZ) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1132 { |
70740
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1133 _snprintf (buf2, sizeof(buf2)-1, "%s=%s", env_vars[i].name, |
f263eba56074
(init_environment): Simplify code that calls ExpandEnvironmentStrings and make
Eli Zaretskii <eliz@gnu.org>
parents:
70738
diff
changeset
|
1134 buf1); |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1135 _putenv (strdup (buf2)); |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1136 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1137 |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1138 if (!dont_free) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1139 xfree (lpval); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1140 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1141 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1142 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1143 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1144 |
16892
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1145 /* Rebuild system configuration to reflect invoking system. */ |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1146 Vsystem_configuration = build_string (EMACS_CONFIGURATION); |
a8a539285d69
Rebuild Vsystem_configuration at startup.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1147 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1148 /* 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
|
1149 "Path" although cmd.exe (perhaps NT itself) arranges for |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1150 environment variable lookup and setting to be case insensitive. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1151 However, Emacs assumes a fully case sensitive environment, so we |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1152 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
|
1153 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
|
1154 modifying the string in the C runtime environ entry. |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1155 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1156 The same applies to COMSPEC. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1157 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1158 char ** envp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1159 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1160 for (envp = environ; *envp; envp++) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1161 if (_strnicmp (*envp, "PATH=", 5) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1162 memcpy (*envp, "PATH=", 5); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1163 else if (_strnicmp (*envp, "COMSPEC=", 8) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1164 memcpy (*envp, "COMSPEC=", 8); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1165 } |
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 /* Remember the initial working directory for getwd, then make the |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1168 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
|
1169 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
|
1170 running subprocesses for the same reason.) */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1171 if (!GetCurrentDirectory (MAXPATHLEN, startup_dir)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1172 abort (); |
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 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1175 char *p; |
24229
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1176 static char modname[MAX_PATH]; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1177 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1178 if (!GetModuleFileName (NULL, modname, MAX_PATH)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1179 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1180 if ((p = strrchr (modname, '\\')) == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1181 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1182 *p = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1183 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1184 SetCurrentDirectory (modname); |
24229
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1185 |
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1186 /* Ensure argv[0] has the full path to Emacs. */ |
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1187 *p = '\\'; |
fc89585ce76f
(init_environment): Change argv[0] to contain the full path to Emacs.
Andrew Innes <andrewi@gnu.org>
parents:
23858
diff
changeset
|
1188 argv[0] = modname; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1189 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1190 |
27890
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1191 /* Determine if there is a middle mouse button, to allow parse_button |
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1192 to decide whether right mouse events should be mouse-2 or |
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1193 mouse-3. */ |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
1194 w32_num_mouse_buttons = GetSystemMetrics (SM_CMOUSEBUTTONS); |
27890
91be3fa84ccb
(init_environment): Set Vw32_num_mouse_buttons here.
Jason Rumney <jasonr@gnu.org>
parents:
27630
diff
changeset
|
1195 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1196 init_user_info (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1197 } |
9803 | 1198 |
42192
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1199 char * |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1200 emacs_root_dir (void) |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1201 { |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1202 static char root_dir[FILENAME_MAX]; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1203 const char *p; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1204 |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1205 p = getenv ("emacs_dir"); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1206 if (p == NULL) |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1207 abort (); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1208 strcpy (root_dir, p); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1209 root_dir[parse_root (root_dir, NULL)] = '\0'; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1210 dostounix_filename (root_dir); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1211 return root_dir; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1212 } |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
39812
diff
changeset
|
1213 |
9803 | 1214 /* We don't have scripts to automatically determine the system configuration |
1215 for Emacs before it's compiled, and we don't want to have to make the | |
1216 user enter it, so we define EMACS_CONFIGURATION to invoke this runtime | |
1217 routine. */ | |
1218 | |
1219 char * | |
1220 get_emacs_configuration (void) | |
1221 { | |
13156 | 1222 char *arch, *oem, *os; |
24885
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1223 int build_num; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1224 static char configuration_buffer[32]; |
9803 | 1225 |
13156 | 1226 /* Determine the processor type. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1227 switch (get_processor_type ()) |
13156 | 1228 { |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1229 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1230 #ifdef PROCESSOR_INTEL_386 |
13156 | 1231 case PROCESSOR_INTEL_386: |
1232 case PROCESSOR_INTEL_486: | |
1233 case PROCESSOR_INTEL_PENTIUM: | |
1234 arch = "i386"; | |
1235 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1236 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1237 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1238 #ifdef PROCESSOR_INTEL_860 |
13156 | 1239 case PROCESSOR_INTEL_860: |
1240 arch = "i860"; | |
1241 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1242 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1243 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1244 #ifdef PROCESSOR_MIPS_R2000 |
13156 | 1245 case PROCESSOR_MIPS_R2000: |
1246 case PROCESSOR_MIPS_R3000: | |
1247 case PROCESSOR_MIPS_R4000: | |
1248 arch = "mips"; | |
1249 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1250 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1251 |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1252 #ifdef PROCESSOR_ALPHA_21064 |
13156 | 1253 case PROCESSOR_ALPHA_21064: |
1254 arch = "alpha"; | |
1255 break; | |
12451
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1256 #endif |
4439dcb1496a
(PASSWD_FIELD_SIZE): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents:
12183
diff
changeset
|
1257 |
13156 | 1258 default: |
1259 arch = "unknown"; | |
1260 break; | |
1261 } | |
9803 | 1262 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1263 /* Use the OEM field to reflect the compiler/library combination. */ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1264 #ifdef _MSC_VER |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1265 #define COMPILER_NAME "msvc" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1266 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1267 #ifdef __GNUC__ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1268 #define COMPILER_NAME "mingw" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1269 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1270 #define COMPILER_NAME "unknown" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1271 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1272 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1273 oem = COMPILER_NAME; |
9803 | 1274 |
24885
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1275 switch (osinfo_cache.dwPlatformId) { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1276 case VER_PLATFORM_WIN32_NT: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1277 os = "nt"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1278 build_num = osinfo_cache.dwBuildNumber; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1279 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1280 case VER_PLATFORM_WIN32_WINDOWS: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1281 if (osinfo_cache.dwMinorVersion == 0) { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1282 os = "windows95"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1283 } else { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1284 os = "windows98"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1285 } |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1286 build_num = LOWORD (osinfo_cache.dwBuildNumber); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1287 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1288 case VER_PLATFORM_WIN32s: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1289 /* Not supported, should not happen. */ |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1290 os = "windows32s"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1291 build_num = LOWORD (osinfo_cache.dwBuildNumber); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1292 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1293 default: |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1294 os = "unknown"; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1295 build_num = 0; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1296 break; |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1297 } |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1298 |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1299 if (osinfo_cache.dwPlatformId == VER_PLATFORM_WIN32_NT) { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1300 sprintf (configuration_buffer, "%s-%s-%s%d.%d.%d", arch, oem, os, |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1301 get_w32_major_version (), get_w32_minor_version (), build_num); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1302 } else { |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1303 sprintf (configuration_buffer, "%s-%s-%s.%d", arch, oem, os, build_num); |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1304 } |
5f1b1f5fd7c8
(get_emacs_configuration): Use GetVersionEx to
Geoff Voelker <voelker@cs.washington.edu>
parents:
24857
diff
changeset
|
1305 |
13156 | 1306 return configuration_buffer; |
9803 | 1307 } |
1308 | |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1309 char * |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1310 get_emacs_configuration_options (void) |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1311 { |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1312 static char options_buffer[256]; |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1313 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1314 /* Work out the effective configure options for this build. */ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1315 #ifdef _MSC_VER |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1316 #define COMPILER_VERSION "--with-msvc (%d.%02d)", _MSC_VER / 100, _MSC_VER % 100 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1317 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1318 #ifdef __GNUC__ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1319 #define COMPILER_VERSION "--with-gcc (%d.%d)", __GNUC__, __GNUC_MINOR__ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1320 #else |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1321 #define COMPILER_VERSION "" |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1322 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1323 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1324 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1325 sprintf (options_buffer, COMPILER_VERSION); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1326 #ifdef EMACSDEBUG |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1327 strcat (options_buffer, " --no-opt"); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1328 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1329 #ifdef USER_CFLAGS |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1330 strcat (options_buffer, " --cflags"); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1331 strcat (options_buffer, USER_CFLAGS); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1332 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1333 #ifdef USER_LDFLAGS |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1334 strcat (options_buffer, " --ldflags"); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1335 strcat (options_buffer, USER_LDFLAGS); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1336 #endif |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1337 return options_buffer; |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1338 } |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1339 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1340 |
11384 | 1341 #include <sys/timeb.h> |
1342 | |
1343 /* Emulate gettimeofday (Ulrich Leodolter, 1/11/95). */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1344 void |
11384 | 1345 gettimeofday (struct timeval *tv, struct timezone *tz) |
1346 { | |
63020
92ecd695d7c1
(gettimeofday): Use struct _timeb, not struct timeb.
Eli Zaretskii <eliz@gnu.org>
parents:
60092
diff
changeset
|
1347 struct _timeb tb; |
11384 | 1348 _ftime (&tb); |
1349 | |
1350 tv->tv_sec = tb.time; | |
1351 tv->tv_usec = tb.millitm * 1000L; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1352 if (tz) |
11384 | 1353 { |
1354 tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich */ | |
1355 tz->tz_dsttime = tb.dstflag; /* type of dst correction */ | |
1356 } | |
1357 } | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1358 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1359 /* ------------------------------------------------------------------------- */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1360 /* 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
|
1361 /* ------------------------------------------------------------------------- */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1362 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1363 /* Place a wrapper around the MSVC version of ctime. It returns NULL |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1364 on network directories, so we handle that case here. |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1365 (Ulrich Leodolter, 1/11/95). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1366 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1367 sys_ctime (const time_t *t) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1368 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1369 char *str = (char *) ctime (t); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1370 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
|
1371 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1372 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1373 /* 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
|
1374 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
|
1375 This is much easier. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1376 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1377 sys_sleep (int seconds) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1378 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1379 Sleep (seconds * 1000); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1380 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1381 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1382 /* 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
|
1383 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
|
1384 extern int __cdecl _free_osfhnd (int fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1385 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1386 /* 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
|
1387 filedesc fd_info [ MAXDESC ]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1388 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1389 typedef struct volume_info_data { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1390 struct volume_info_data * next; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1391 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1392 /* time when info was obtained */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1393 DWORD timestamp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1394 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1395 /* actual volume info */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1396 char * root_dir; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1397 DWORD serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1398 DWORD maxcomp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1399 DWORD flags; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1400 char * name; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1401 char * type; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1402 } volume_info_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1403 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1404 /* Global referenced by various functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1405 static volume_info_data volume_info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1406 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1407 /* 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
|
1408 data never expires). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1409 static BOOL fixed_drives[26]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1410 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1411 /* 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
|
1412 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
|
1413 #define DRIVE_INDEX( c ) ( (c) <= 'Z' ? (c) - 'A' : (c) - 'a' ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1414 #define VOLINFO_STILL_VALID( root_dir, info ) \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1415 ( ( isalpha (root_dir[0]) && \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1416 fixed_drives[ DRIVE_INDEX (root_dir[0]) ] ) \ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1417 || GetTickCount () - info->timestamp < 10000 ) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1418 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1419 /* Cache support functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1420 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1421 /* Simple linked list with linear search is sufficient. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1422 static volume_info_data *volume_cache = NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1423 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1424 static volume_info_data * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1425 lookup_volume_info (char * root_dir) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1426 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1427 volume_info_data * info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1428 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1429 for (info = volume_cache; info; info = info->next) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1430 if (stricmp (info->root_dir, root_dir) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1431 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1432 return info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1433 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1434 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1435 static void |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1436 add_volume_info (char * root_dir, volume_info_data * info) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1437 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1438 info->root_dir = xstrdup (root_dir); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1439 info->next = volume_cache; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1440 volume_cache = info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1441 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1442 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1443 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1444 /* Wrapper for GetVolumeInformation, which uses caching to avoid |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1445 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
|
1446 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
|
1447 volume_info_data * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1448 GetCachedVolumeInformation (char * root_dir) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1449 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1450 volume_info_data * info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1451 char default_root[ MAX_PATH ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1452 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1453 /* NULL for root_dir means use root from current directory. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1454 if (root_dir == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1455 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1456 if (GetCurrentDirectory (MAX_PATH, default_root) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1457 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1458 parse_root (default_root, &root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1459 *root_dir = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1460 root_dir = default_root; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1461 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1462 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1463 /* Local fixed drives can be cached permanently. Removable drives |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1464 cannot be cached permanently, since the volume name and serial |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1465 number (if nothing else) can change. Remote drives should be |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1466 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
|
1467 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
|
1468 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
|
1469 by other processes) without notice. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1470 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1471 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
|
1472 volumes, we use a simple expiry mechanism to invalidate cache |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1473 entries that are more than ten seconds old. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1474 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1475 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1476 /* No point doing this, because WNetGetConnection is even slower than |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1477 GetVolumeInformation, consistently taking ~50ms on a 486 (FWIW, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1478 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
|
1479 involve network access, and so is extremely quick). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1480 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1481 /* Map drive letter to UNC if remote. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1482 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
|
1483 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1484 char remote_name[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1485 char drive[3] = { root_dir[0], ':' }; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1486 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1487 if (WNetGetConnection (drive, remote_name, sizeof (remote_name)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1488 == NO_ERROR) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1489 /* do something */ ; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1490 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1491 #endif |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1492 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1493 info = lookup_volume_info (root_dir); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1494 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1495 if (info == NULL || ! VOLINFO_STILL_VALID (root_dir, info)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1496 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1497 char name[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1498 DWORD serialnum; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1499 DWORD maxcomp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1500 DWORD flags; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1501 char type[ 256 ]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1502 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1503 /* Info is not cached, or is stale. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1504 if (!GetVolumeInformation (root_dir, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1505 name, sizeof (name), |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1506 &serialnum, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1507 &maxcomp, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1508 &flags, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1509 type, sizeof (type))) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1510 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1511 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1512 /* Cache the volume information for future use, overwriting existing |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1513 entry if present. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1514 if (info == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1515 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1516 info = (volume_info_data *) xmalloc (sizeof (volume_info_data)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1517 add_volume_info (root_dir, info); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1518 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1519 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1520 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1521 xfree (info->name); |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1522 xfree (info->type); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1523 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1524 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1525 info->name = xstrdup (name); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1526 info->serialnum = serialnum; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1527 info->maxcomp = maxcomp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1528 info->flags = flags; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1529 info->type = xstrdup (type); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1530 info->timestamp = GetTickCount (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1531 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1532 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1533 return info; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1534 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1535 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1536 /* 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
|
1537 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
|
1538 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1539 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
|
1540 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1541 char temp[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1542 char *rootname = NULL; /* default to current volume */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1543 volume_info_data * info; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1544 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1545 if (name == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1546 return FALSE; |
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 /* 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
|
1549 if (isalpha (name[0]) && name[1] == ':') |
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 rootname = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1552 temp[0] = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1553 temp[1] = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1554 temp[2] = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1555 temp[3] = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1556 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1557 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
|
1558 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1559 char *str = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1560 int slashes = 4; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1561 rootname = temp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1562 do |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1563 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1564 if (IS_DIRECTORY_SEP (*name) && --slashes == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1565 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1566 *str++ = *name++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1567 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1568 while ( *name ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1569 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1570 *str++ = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1571 *str = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1572 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1573 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1574 if (pPath) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1575 *pPath = name; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1576 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1577 info = GetCachedVolumeInformation (rootname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1578 if (info != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1579 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1580 /* Set global referenced by other functions. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1581 volume_info = *info; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1582 return TRUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1583 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1584 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1585 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1586 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1587 /* 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
|
1588 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
|
1589 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1590 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
|
1591 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1592 if (get_volume_info (name, pPath)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1593 return (volume_info.maxcomp == 12); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1594 return FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1595 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1596 |
80030
6b3001cc9ca9
*** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents:
79759
diff
changeset
|
1597 /* Map filename to a valid 8.3 name if necessary. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1598 const char * |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1599 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
|
1600 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1601 static char shortname[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1602 char * str = shortname; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1603 char c; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1604 char * path; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1605 const char * save_name = name; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1606 |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1607 if (strlen (name) >= MAX_PATH) |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1608 { |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1609 /* Return a filename which will cause callers to fail. */ |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1610 strcpy (shortname, "?"); |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1611 return shortname; |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1612 } |
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
1613 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1614 if (is_fat_volume (name, (const char **)&path)) /* truncate to 8.3 */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1615 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1616 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
|
1617 register int extn = 0; /* extension added? */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1618 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
|
1619 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1620 while (name < path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1621 *str++ = *name++; /* skip past UNC header */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1622 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1623 while ((c = *name++)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1624 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1625 switch ( c ) |
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 case '\\': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1628 case '/': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1629 *str++ = '\\'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1630 extn = 0; /* reset extension flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1631 dots = 2; /* max 2 dots */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1632 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
|
1633 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1634 case ':': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1635 *str++ = ':'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1636 extn = 0; /* reset extension flags */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1637 dots = 2; /* max 2 dots */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1638 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
|
1639 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1640 case '.': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1641 if ( dots ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1642 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1643 /* 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
|
1644 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
|
1645 to be read as _emacs, for example. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1646 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1647 if (! *name || |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1648 *name == '.' || |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1649 IS_DIRECTORY_SEP (*name)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1650 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1651 *str++ = '.'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1652 dots--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1653 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1654 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1655 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1656 *str++ = '_'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1657 left--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1658 dots = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1659 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1660 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1661 else if ( !extn ) |
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 *str++ = '.'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1664 extn = 1; /* we've got an extension */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1665 left = 3; /* 3 chars in extension */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1666 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1667 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1668 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1669 /* 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
|
1670 *str++ = '_'; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1671 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1672 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1673 case '~': |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1674 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
|
1675 if ( ! left ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1676 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
|
1677 /* FALLTHRU */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1678 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1679 if ( left ) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1680 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1681 *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
|
1682 left--; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1683 dots = 0; /* started a path component */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1684 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1685 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1686 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1687 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1688 *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
|
1689 } |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1690 else |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1691 { |
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1692 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
|
1693 unixtodos_filename (shortname); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1694 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1695 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1696 if (pPath) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1697 *pPath = shortname + (path - save_name); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1698 |
15213
867e4ead88d9
(map_win32_filename): If not a fat volume, cvt name to dos.
Richard M. Stallman <rms@gnu.org>
parents:
15141
diff
changeset
|
1699 return shortname; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1700 } |
11384 | 1701 |
22363 | 1702 static int |
1703 is_exec (const char * name) | |
1704 { | |
1705 char * p = strrchr (name, '.'); | |
1706 return | |
1707 (p != NULL | |
1708 && (stricmp (p, ".exe") == 0 || | |
1709 stricmp (p, ".com") == 0 || | |
1710 stricmp (p, ".bat") == 0 || | |
1711 stricmp (p, ".cmd") == 0)); | |
1712 } | |
1713 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1714 /* Emulate the Unix directory procedures opendir, closedir, |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1715 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
|
1716 so we provide them here. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1717 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1718 struct direct dir_static; /* simulated directory contents */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1719 static HANDLE dir_find_handle = INVALID_HANDLE_VALUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1720 static int dir_is_fat; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1721 static char dir_pathname[MAXPATHLEN+1]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1722 static WIN32_FIND_DATA dir_find_data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1723 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1724 /* Support shares on a network resource as subdirectories of a read-only |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1725 root directory. */ |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1726 static HANDLE wnet_enum_handle = INVALID_HANDLE_VALUE; |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
1727 HANDLE open_unc_volume (const char *); |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1728 char *read_unc_volume (HANDLE, char *, int); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1729 void close_unc_volume (HANDLE); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1730 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1731 DIR * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1732 opendir (char *filename) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1733 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1734 DIR *dirp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1735 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1736 /* 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
|
1737 this operation, so we defer the open until read time. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1738 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1739 if (dir_find_handle != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1740 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1741 if (wnet_enum_handle != INVALID_HANDLE_VALUE) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1742 return NULL; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1743 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1744 if (is_unc_volume (filename)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1745 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1746 wnet_enum_handle = open_unc_volume (filename); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1747 if (wnet_enum_handle == INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1748 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1749 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1750 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1751 if (!(dirp = (DIR *) malloc (sizeof (DIR)))) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1752 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1753 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1754 dirp->dd_fd = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1755 dirp->dd_loc = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1756 dirp->dd_size = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1757 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1758 strncpy (dir_pathname, map_w32_filename (filename, NULL), MAXPATHLEN); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1759 dir_pathname[MAXPATHLEN] = '\0'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1760 dir_is_fat = is_fat_volume (filename, NULL); |
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 return dirp; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1763 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1764 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1765 void |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1766 closedir (DIR *dirp) |
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 /* If we have a find-handle open, close it. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1769 if (dir_find_handle != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1770 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1771 FindClose (dir_find_handle); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1772 dir_find_handle = INVALID_HANDLE_VALUE; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1773 } |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1774 else if (wnet_enum_handle != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1775 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1776 close_unc_volume (wnet_enum_handle); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1777 wnet_enum_handle = INVALID_HANDLE_VALUE; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1778 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1779 xfree ((char *) dirp); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1780 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1781 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1782 struct direct * |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1783 readdir (DIR *dirp) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1784 { |
80376
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1785 int downcase = !NILP (Vw32_downcase_file_names); |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1786 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1787 if (wnet_enum_handle != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1788 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1789 if (!read_unc_volume (wnet_enum_handle, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1790 dir_find_data.cFileName, |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1791 MAX_PATH)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1792 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1793 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1794 /* If we aren't dir_finding, do a find-first, otherwise do a find-next. */ |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1795 else if (dir_find_handle == INVALID_HANDLE_VALUE) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1796 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1797 char filename[MAXNAMLEN + 3]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1798 int ln; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1799 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1800 strcpy (filename, dir_pathname); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1801 ln = strlen (filename) - 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1802 if (!IS_DIRECTORY_SEP (filename[ln])) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1803 strcat (filename, "\\"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1804 strcat (filename, "*"); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1805 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1806 dir_find_handle = FindFirstFile (filename, &dir_find_data); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1807 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1808 if (dir_find_handle == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1809 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1810 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1811 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1812 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1813 if (!FindNextFile (dir_find_handle, &dir_find_data)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1814 return NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1815 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1816 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1817 /* 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
|
1818 value returned by stat(). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1819 dir_static.d_ino = 1; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1820 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1821 dir_static.d_reclen = sizeof (struct direct) - MAXNAMLEN + 3 + |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1822 dir_static.d_namlen - dir_static.d_namlen % 4; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1823 |
80376
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1824 /* If the file name in cFileName[] includes `?' characters, it means |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1825 the original file name used characters that cannot be represented |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1826 by the current ANSI codepage. To avoid total lossage, retrieve |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1827 the short 8+3 alias of the long file name. */ |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1828 if (_mbspbrk (dir_find_data.cFileName, "?")) |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1829 { |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1830 strcpy (dir_static.d_name, dir_find_data.cAlternateFileName); |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1831 /* 8+3 aliases are returned in all caps, which could break |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1832 various alists that look at filenames' extensions. */ |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1833 downcase = 1; |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1834 } |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1835 else |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1836 strcpy (dir_static.d_name, dir_find_data.cFileName); |
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1837 dir_static.d_namlen = strlen (dir_static.d_name); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1838 if (dir_is_fat) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1839 _strlwr (dir_static.d_name); |
80376
6e2a0297b94d
(readdir): If FindFirstFile/FindNextFile return in cFileName a file name that
Eli Zaretskii <eliz@gnu.org>
parents:
80030
diff
changeset
|
1840 else if (downcase) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1841 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1842 register char *p; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1843 for (p = dir_static.d_name; *p; p++) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1844 if (*p >= 'a' && *p <= 'z') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1845 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1846 if (!*p) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1847 _strlwr (dir_static.d_name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1848 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1849 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1850 return &dir_static; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1851 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
1852 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1853 HANDLE |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
1854 open_unc_volume (const char *path) |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1855 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1856 NETRESOURCE nr; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1857 HANDLE henum; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1858 int result; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1859 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1860 nr.dwScope = RESOURCE_GLOBALNET; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1861 nr.dwType = RESOURCETYPE_DISK; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1862 nr.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1863 nr.dwUsage = RESOURCEUSAGE_CONTAINER; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1864 nr.lpLocalName = NULL; |
63020
92ecd695d7c1
(gettimeofday): Use struct _timeb, not struct timeb.
Eli Zaretskii <eliz@gnu.org>
parents:
60092
diff
changeset
|
1865 nr.lpRemoteName = (LPSTR)map_w32_filename (path, NULL); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1866 nr.lpComment = NULL; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1867 nr.lpProvider = NULL; |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1868 |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1869 result = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1870 RESOURCEUSAGE_CONNECTABLE, &nr, &henum); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1871 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1872 if (result == NO_ERROR) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1873 return henum; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1874 else |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1875 return INVALID_HANDLE_VALUE; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1876 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1877 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1878 char * |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1879 read_unc_volume (HANDLE henum, char *readbuf, int size) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1880 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1881 DWORD count; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1882 int result; |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
1883 DWORD bufsize = 512; |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1884 char *buffer; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1885 char *ptr; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1886 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1887 count = 1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1888 buffer = alloca (bufsize); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1889 result = WNetEnumResource (wnet_enum_handle, &count, buffer, &bufsize); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1890 if (result != NO_ERROR) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1891 return NULL; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1892 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1893 /* WNetEnumResource returns \\resource\share...skip forward to "share". */ |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1894 ptr = ((LPNETRESOURCE) buffer)->lpRemoteName; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1895 ptr += 2; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1896 while (*ptr && !IS_DIRECTORY_SEP (*ptr)) ptr++; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1897 ptr++; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1898 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1899 strncpy (readbuf, ptr, size); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1900 return readbuf; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1901 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1902 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1903 void |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1904 close_unc_volume (HANDLE henum) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1905 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1906 if (henum != INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1907 WNetCloseEnum (henum); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1908 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1909 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1910 DWORD |
55645
5b3f2477d17b
Rename w32_num_mouse_buttons from Vw32_num_mouse_buttons.
Jason Rumney <jasonr@gnu.org>
parents:
55643
diff
changeset
|
1911 unc_volume_file_attributes (const char *path) |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1912 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1913 HANDLE henum; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1914 DWORD attrs; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1915 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1916 henum = open_unc_volume (path); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1917 if (henum == INVALID_HANDLE_VALUE) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1918 return -1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1919 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1920 attrs = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1921 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1922 close_unc_volume (henum); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1923 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1924 return attrs; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1925 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1926 |
9803 | 1927 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1928 /* 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
|
1929 to reasonable short names if necessary. This was originally added to |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
1930 permit running Emacs on NT 3.1 on a FAT partition, which doesn't support |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1931 long file names. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1932 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1933 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1934 sys_access (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1935 { |
22363 | 1936 DWORD attributes; |
1937 | |
1938 /* MSVC implementation doesn't recognize D_OK. */ | |
1939 path = map_w32_filename (path, NULL); | |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1940 if (is_unc_volume (path)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1941 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1942 attributes = unc_volume_file_attributes (path); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1943 if (attributes == -1) { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1944 errno = EACCES; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1945 return -1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1946 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1947 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
1948 else if ((attributes = GetFileAttributes (path)) == -1) |
22363 | 1949 { |
1950 /* Should try mapping GetLastError to errno; for now just indicate | |
1951 that path doesn't exist. */ | |
1952 errno = EACCES; | |
1953 return -1; | |
1954 } | |
1955 if ((mode & X_OK) != 0 && !is_exec (path)) | |
1956 { | |
1957 errno = EACCES; | |
1958 return -1; | |
1959 } | |
1960 if ((mode & W_OK) != 0 && (attributes & FILE_ATTRIBUTE_READONLY) != 0) | |
1961 { | |
1962 errno = EACCES; | |
1963 return -1; | |
1964 } | |
1965 if ((mode & D_OK) != 0 && (attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) | |
1966 { | |
1967 errno = EACCES; | |
1968 return -1; | |
1969 } | |
1970 return 0; | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1971 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1972 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1973 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1974 sys_chdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1975 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1976 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
|
1977 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1978 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1979 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1980 sys_chmod (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1981 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1982 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
|
1983 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1984 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1985 int |
63744 | 1986 sys_chown (const char *path, uid_t owner, gid_t group) |
1987 { | |
1988 if (sys_chmod (path, _S_IREAD) == -1) /* check if file exists */ | |
1989 return -1; | |
1990 return 0; | |
1991 } | |
1992 | |
1993 int | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1994 sys_creat (const char * path, int mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1995 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
1996 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
|
1997 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1998 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
1999 FILE * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2000 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
|
2001 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2002 int fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2003 int oflag; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2004 const char * mode_save = mode; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2005 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2006 /* 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
|
2007 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
|
2008 prevent future file access. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2009 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2010 if (mode[0] == 'r') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2011 oflag = O_RDONLY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2012 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
|
2013 oflag = O_WRONLY | O_CREAT | O_TRUNC; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2014 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2015 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2016 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2017 /* Only do simplistic option parsing. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2018 while (*++mode) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2019 if (mode[0] == '+') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2020 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2021 oflag &= ~(O_RDONLY | O_WRONLY); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2022 oflag |= O_RDWR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2023 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2024 else if (mode[0] == 'b') |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2025 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2026 oflag &= ~O_TEXT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2027 oflag |= O_BINARY; |
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 else if (mode[0] == 't') |
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 oflag &= ~O_BINARY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2032 oflag |= O_TEXT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2033 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2034 else break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2035 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2036 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
|
2037 if (fd < 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2038 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2039 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2040 return _fdopen (fd, mode_save); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2041 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2042 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2043 /* 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
|
2044 int |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2045 sys_link (const char * old, const char * new) |
9803 | 2046 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2047 HANDLE fileh; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2048 int result = -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2049 char oldname[MAX_PATH], newname[MAX_PATH]; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2050 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2051 if (old == NULL || new == NULL) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2052 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2053 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2054 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2055 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2056 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2057 strcpy (oldname, map_w32_filename (old, NULL)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2058 strcpy (newname, map_w32_filename (new, NULL)); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2059 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2060 fileh = CreateFile (oldname, 0, 0, NULL, OPEN_EXISTING, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2061 FILE_FLAG_BACKUP_SEMANTICS, NULL); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2062 if (fileh != INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2063 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2064 int wlen; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2065 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2066 /* Confusingly, the "alternate" stream name field does not apply |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2067 when restoring a hard link, and instead contains the actual |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2068 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
|
2069 The WIN32_STREAM_ID structure before the cStreamName field is |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2070 the stream header, which is then immediately followed by the |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2071 stream data. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2072 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2073 struct { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2074 WIN32_STREAM_ID wid; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2075 WCHAR wbuffer[MAX_PATH]; /* extra space for link name */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2076 } data; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2077 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2078 wlen = MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, newname, -1, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2079 data.wid.cStreamName, MAX_PATH); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2080 if (wlen > 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2081 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2082 LPVOID context = NULL; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2083 DWORD wbytes = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2084 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2085 data.wid.dwStreamId = BACKUP_LINK; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2086 data.wid.dwStreamAttributes = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2087 data.wid.Size.LowPart = wlen * sizeof(WCHAR); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2088 data.wid.Size.HighPart = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2089 data.wid.dwStreamNameSize = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2090 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2091 if (BackupWrite (fileh, (LPBYTE)&data, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2092 offsetof (WIN32_STREAM_ID, cStreamName) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2093 + data.wid.Size.LowPart, |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2094 &wbytes, FALSE, FALSE, &context) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2095 && BackupWrite (fileh, NULL, 0, &wbytes, TRUE, FALSE, &context)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2096 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2097 /* succeeded */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2098 result = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2099 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2100 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2101 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2102 /* Should try mapping GetLastError to errno; for now just |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2103 indicate a general error (eg. links not supported). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2104 errno = EINVAL; // perhaps EMLINK? |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2105 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2106 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2107 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2108 CloseHandle (fileh); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2109 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2110 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2111 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2112 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2113 return result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2114 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2115 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2116 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2117 sys_mkdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2118 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2119 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
|
2120 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2121 |
15354
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2122 /* 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
|
2123 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
|
2124 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
|
2125 string. |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2126 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2127 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
|
2128 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
|
2129 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
|
2130 first of the 6 X's. */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2131 char * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2132 sys_mktemp (char * template) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2133 { |
15354
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2134 char * p; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2135 int i; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2136 unsigned uid = GetCurrentThreadId (); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2137 static char first_char[] = "abcdefghijklmnopqrstuvwyz0123456789!%-_@#"; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2138 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2139 if (template == NULL) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2140 return NULL; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2141 p = template + strlen (template); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2142 i = 5; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2143 /* 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
|
2144 while (--p >= template && p[0] == 'X' && --i >= 0) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2145 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2146 p[0] = '0' + uid % 10; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2147 uid /= 10; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2148 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2149 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2150 if (i < 0 && p[0] == 'X') |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2151 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2152 i = 0; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2153 do |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2154 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2155 int save_errno = errno; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2156 p[0] = first_char[i]; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2157 if (sys_access (template, 0) < 0) |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2158 { |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2159 errno = save_errno; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2160 return template; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2161 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2162 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2163 while (++i < sizeof (first_char)); |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2164 } |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2165 |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2166 /* 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
|
2167 so return empty string */ |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2168 template[0] = 0; |
0e45e7d8bfdf
(sys_mktemp): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
15342
diff
changeset
|
2169 return template; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2170 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2171 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2172 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2173 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
|
2174 { |
37291
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2175 const char* mpath = map_w32_filename (path, NULL); |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2176 /* Try to open file without _O_CREAT, to be able to write to hidden |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2177 and system files. Force all file handles to be |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2178 non-inheritable. */ |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2179 int res = _open (mpath, (oflag & ~_O_CREAT) | _O_NOINHERIT, mode); |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2180 if (res >= 0) |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2181 return res; |
83dd2eb5365f
(sys_open): Try to open file without _O_CREAT first, to be
Gerd Moellmann <gerd@gnu.org>
parents:
36001
diff
changeset
|
2182 return _open (mpath, oflag | _O_NOINHERIT, mode); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2183 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2184 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2185 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2186 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
|
2187 { |
34644
69143373d98d
(sys_rename): Only check errno against EEXIST, and not
Andrew Innes <andrewi@gnu.org>
parents:
33869
diff
changeset
|
2188 BOOL result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2189 char temp[MAX_PATH]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2190 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
2191 /* 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
|
2192 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
|
2193 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
|
2194 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
|
2195 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
2196 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
|
2197 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
|
2198 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
|
2199 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
|
2200 |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16867
diff
changeset
|
2201 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
|
2202 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
|
2203 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2204 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
|
2205 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2206 if (os_subtype == OS_WIN95) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2207 { |
22363 | 2208 char * o; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2209 char * p; |
22363 | 2210 int i = 0; |
2211 | |
2212 oldname = map_w32_filename (oldname, NULL); | |
2213 if (o = strrchr (oldname, '\\')) | |
2214 o++; | |
2215 else | |
2216 o = (char *) oldname; | |
9803 | 2217 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2218 if (p = strrchr (temp, '\\')) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2219 p++; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2220 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2221 p = temp; |
22363 | 2222 |
2223 do | |
2224 { | |
2225 /* Force temp name to require a manufactured 8.3 alias - this | |
2226 seems to make the second rename work properly. */ | |
22501
d2edb98d0fa5
(sys_rename): On some network drives, rename fails with
Richard M. Stallman <rms@gnu.org>
parents:
22430
diff
changeset
|
2227 sprintf (p, "_.%s.%u", o, i); |
22363 | 2228 i++; |
22430
921311b43bf4
(sys_rename): Don't examine errno if rename didn't fail.
Richard M. Stallman <rms@gnu.org>
parents:
22363
diff
changeset
|
2229 result = rename (oldname, temp); |
22363 | 2230 } |
2231 /* This loop must surely terminate! */ | |
34644
69143373d98d
(sys_rename): Only check errno against EEXIST, and not
Andrew Innes <andrewi@gnu.org>
parents:
33869
diff
changeset
|
2232 while (result < 0 && errno == EEXIST); |
22430
921311b43bf4
(sys_rename): Don't examine errno if rename didn't fail.
Richard M. Stallman <rms@gnu.org>
parents:
22363
diff
changeset
|
2233 if (result < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2234 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2235 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2236 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2237 /* 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
|
2238 (at least if it is a file; don't do this for directories). |
22363 | 2239 |
2240 Since we mustn't do this if we are just changing the case of the | |
2241 file name (we would end up deleting the file we are trying to | |
2242 rename!), we let rename detect if the destination file already | |
2243 exists - that way we avoid the possible pitfalls of trying to | |
2244 determine ourselves whether two names really refer to the same | |
2245 file, which is not always possible in the general case. (Consider | |
2246 all the permutations of shared or subst'd drives, etc.) */ | |
2247 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2248 newname = map_w32_filename (newname, NULL); |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2249 result = rename (temp, newname); |
22363 | 2250 |
2251 if (result < 0 | |
34644
69143373d98d
(sys_rename): Only check errno against EEXIST, and not
Andrew Innes <andrewi@gnu.org>
parents:
33869
diff
changeset
|
2252 && errno == EEXIST |
22363 | 2253 && _chmod (newname, 0666) == 0 |
2254 && _unlink (newname) == 0) | |
2255 result = rename (temp, newname); | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2256 |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2257 return result; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2258 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2259 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2260 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2261 sys_rmdir (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2262 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2263 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
|
2264 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2265 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2266 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2267 sys_unlink (const char * path) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2268 { |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2269 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
|
2270 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2271 /* 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
|
2272 _chmod (path, 0666); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2273 return _unlink (path); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2274 } |
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 static FILETIME utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2277 static long double utc_base; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2278 static int init = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2279 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2280 static time_t |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2281 convert_time (FILETIME ft) |
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 long double ret; |
9803 | 2284 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2285 if (!init) |
9803 | 2286 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2287 /* 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
|
2288 SYSTEMTIME st; |
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 st.wYear = 1970; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2291 st.wMonth = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2292 st.wDay = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2293 st.wHour = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2294 st.wMinute = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2295 st.wSecond = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2296 st.wMilliseconds = 0; |
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 SystemTimeToFileTime (&st, &utc_base_ft); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2299 utc_base = (long double) utc_base_ft.dwHighDateTime |
72059
7b3a19a8bfdb
(convert_time): Use explicit long double constants to ensure long double
Eli Zaretskii <eliz@gnu.org>
parents:
71899
diff
changeset
|
2300 * 4096.0L * 1024.0L * 1024.0L + utc_base_ft.dwLowDateTime; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2301 init = 1; |
9803 | 2302 } |
15141
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 (CompareFileTime (&ft, &utc_base_ft) < 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2305 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2306 |
72059
7b3a19a8bfdb
(convert_time): Use explicit long double constants to ensure long double
Eli Zaretskii <eliz@gnu.org>
parents:
71899
diff
changeset
|
2307 ret = (long double) ft.dwHighDateTime |
7b3a19a8bfdb
(convert_time): Use explicit long double constants to ensure long double
Eli Zaretskii <eliz@gnu.org>
parents:
71899
diff
changeset
|
2308 * 4096.0L * 1024.0L * 1024.0L + ft.dwLowDateTime; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2309 ret -= utc_base; |
72059
7b3a19a8bfdb
(convert_time): Use explicit long double constants to ensure long double
Eli Zaretskii <eliz@gnu.org>
parents:
71899
diff
changeset
|
2310 return (time_t) (ret * 1e-7L); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2311 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2312 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2313 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2314 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
|
2315 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2316 long double tmp; |
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 if (!init) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2319 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2320 /* 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
|
2321 SYSTEMTIME st; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2322 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2323 st.wYear = 1970; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2324 st.wMonth = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2325 st.wDay = 1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2326 st.wHour = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2327 st.wMinute = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2328 st.wSecond = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2329 st.wMilliseconds = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2330 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2331 SystemTimeToFileTime (&st, &utc_base_ft); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2332 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
|
2333 * 4096 * 1024 * 1024 + utc_base_ft.dwLowDateTime; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2334 init = 1; |
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 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2337 /* 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
|
2338 tmp = (long double) time * 1e7 + utc_base; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2339 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
|
2340 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
|
2341 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2342 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2343 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2344 /* 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
|
2345 using the file index from GetInformationByHandle, is not perfect and |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2346 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
|
2347 Instead, we now determine file-truename correctly (except for |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2348 possible drive aliasing etc). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2349 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2350 /* 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
|
2351 static unsigned |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2352 hashval (const unsigned char * str) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2353 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2354 unsigned h = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2355 while (*str) |
9803 | 2356 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2357 h = (h << 4) + *str++; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2358 h ^= (h >> 28); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2359 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2360 return h; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2361 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2362 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2363 /* 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
|
2364 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
|
2365 static DWORD |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2366 generate_inode_val (const char * name) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2367 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2368 char fullname[ MAX_PATH ]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2369 char * p; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2370 unsigned hash; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2371 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2372 /* Get the truly canonical filename, if it exists. (Note: this |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2373 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
|
2374 links. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2375 if (!w32_get_long_filename ((char *)name, fullname, MAX_PATH)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2376 abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2377 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2378 parse_root (fullname, &p); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2379 /* 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
|
2380 _strlwr (p); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2381 return hashval (p); |
15141
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 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2384 #endif |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2385 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2386 /* 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
|
2387 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
|
2388 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
|
2389 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2390 stat (const char * path, struct stat * buf) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2391 { |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2392 char *name, *r; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2393 WIN32_FIND_DATA wfd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2394 HANDLE fh; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2395 DWORD fake_inode; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2396 int permission; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2397 int len; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2398 int rootdir = FALSE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2399 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2400 if (path == NULL || buf == NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2401 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2402 errno = EFAULT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2403 return -1; |
9803 | 2404 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2405 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2406 name = (char *) map_w32_filename (path, &path); |
76098
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
2407 /* Must be valid filename, no wild cards or other invalid |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
2408 characters. We use _mbspbrk to support multibyte strings that |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
2409 might look to strpbrk as if they included literal *, ?, and other |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
2410 characters mentioned below that are disallowed by Windows |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
2411 filesystems. */ |
9ad6c99cdc71
(stat, get_long_basename, is_unc_volume): Use _mbspbrk instead of strpbrk.
Eli Zaretskii <eliz@gnu.org>
parents:
75348
diff
changeset
|
2412 if (_mbspbrk (name, "*?|<>\"")) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2413 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2414 errno = ENOENT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2415 return -1; |
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 |
22299
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2418 /* If name is "c:/.." or "/.." then stat "c:/" or "/". */ |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2419 r = IS_DEVICE_SEP (name[1]) ? &name[2] : name; |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2420 if (IS_DIRECTORY_SEP (r[0]) && r[1] == '.' && r[2] == '.' && r[3] == '\0') |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2421 { |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2422 r[1] = r[2] = '\0'; |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2423 } |
83928cc3329e
(sys_rename): Handle filenames with accented characters.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22039
diff
changeset
|
2424 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2425 /* 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
|
2426 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
|
2427 is a trailing separator. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2428 len = strlen (name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2429 rootdir = (path >= name + len - 1 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2430 && (IS_DIRECTORY_SEP (*path) || *path == 0)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2431 name = strcpy (alloca (len + 2), name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2432 |
22505
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2433 if (is_unc_volume (name)) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2434 { |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2435 DWORD attrs = unc_volume_file_attributes (name); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2436 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2437 if (attrs == -1) |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2438 return -1; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2439 |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2440 memset (&wfd, 0, sizeof (wfd)); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2441 wfd.dwFileAttributes = attrs; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2442 wfd.ftCreationTime = utc_base_ft; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2443 wfd.ftLastAccessTime = utc_base_ft; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2444 wfd.ftLastWriteTime = utc_base_ft; |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2445 strcpy (wfd.cFileName, name); |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2446 } |
d4f3552a85f2
(is_unc_volume, open_unc_volume, read_unc_volume,
Geoff Voelker <voelker@cs.washington.edu>
parents:
22501
diff
changeset
|
2447 else if (rootdir) |
9803 | 2448 { |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2449 if (!IS_DIRECTORY_SEP (name[len-1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2450 strcat (name, "\\"); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2451 if (GetDriveType (name) < 2) |
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 errno = ENOENT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2454 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2455 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2456 memset (&wfd, 0, sizeof (wfd)); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2457 wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2458 wfd.ftCreationTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2459 wfd.ftLastAccessTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2460 wfd.ftLastWriteTime = utc_base_ft; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2461 strcpy (wfd.cFileName, name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2462 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2463 else |
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 if (IS_DIRECTORY_SEP (name[len-1])) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2466 name[len - 1] = 0; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2467 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2468 /* (This is hacky, but helps when doing file completions on |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2469 network drives.) Optimize by using information available from |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2470 active readdir if possible. */ |
25193
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
2471 len = strlen (dir_pathname); |
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
2472 if (IS_DIRECTORY_SEP (dir_pathname[len-1])) |
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
2473 len--; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2474 if (dir_find_handle != INVALID_HANDLE_VALUE |
25193
953155ee541a
(stat): Check for directory ending in separator when
Geoff Voelker <voelker@cs.washington.edu>
parents:
24885
diff
changeset
|
2475 && strnicmp (name, dir_pathname, len) == 0 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2476 && IS_DIRECTORY_SEP (name[len]) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2477 && 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
|
2478 { |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2479 /* This was the last entry returned by readdir. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2480 wfd = dir_find_data; |
15141
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 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2483 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2484 fh = FindFirstFile (name, &wfd); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2485 if (fh == INVALID_HANDLE_VALUE) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2486 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2487 errno = ENOENT; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2488 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2489 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2490 FindClose (fh); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2491 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2492 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2493 |
80563
58df3fdb731c
(stat): Fix test of Vw32_get_true_file_attributes against the value returned
Eli Zaretskii <eliz@gnu.org>
parents:
80486
diff
changeset
|
2494 if (!(NILP (Vw32_get_true_file_attributes) |
58df3fdb731c
(stat): Fix test of Vw32_get_true_file_attributes against the value returned
Eli Zaretskii <eliz@gnu.org>
parents:
80486
diff
changeset
|
2495 || (EQ (Vw32_get_true_file_attributes, Qlocal) && |
58df3fdb731c
(stat): Fix test of Vw32_get_true_file_attributes against the value returned
Eli Zaretskii <eliz@gnu.org>
parents:
80486
diff
changeset
|
2496 GetDriveType (name) != DRIVE_FIXED)) |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2497 /* No access rights required to get info. */ |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2498 && (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING, |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2499 FILE_FLAG_BACKUP_SEMANTICS, NULL)) |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2500 != INVALID_HANDLE_VALUE) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2501 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2502 /* This is more accurate in terms of gettting the correct number |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
2503 of links, but is quite slow (it is noticeable when Emacs is |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2504 making a list of file name completions). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2505 BY_HANDLE_FILE_INFORMATION info; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2506 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2507 if (GetFileInformationByHandle (fh, &info)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2508 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2509 buf->st_nlink = info.nNumberOfLinks; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2510 /* 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
|
2511 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
|
2512 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
|
2513 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
|
2514 (on NTFS, presumably less on FAT). */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2515 fake_inode = info.nFileIndexLow ^ info.nFileIndexHigh; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2516 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2517 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2518 { |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
2519 buf->st_nlink = 1; |
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
2520 fake_inode = 0; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2521 } |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
2522 |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2523 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2524 { |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2525 buf->st_mode = _S_IFDIR; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2526 } |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2527 else |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
2528 { |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2529 switch (GetFileType (fh)) |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2530 { |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2531 case FILE_TYPE_DISK: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2532 buf->st_mode = _S_IFREG; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2533 break; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2534 case FILE_TYPE_PIPE: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2535 buf->st_mode = _S_IFIFO; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2536 break; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2537 case FILE_TYPE_CHAR: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2538 case FILE_TYPE_UNKNOWN: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2539 default: |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2540 buf->st_mode = _S_IFCHR; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2541 } |
23622
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
2542 } |
0dc79ede9c53
(stat): GetFileInformationByHandle can legitimately fail, so don't
Andrew Innes <andrewi@gnu.org>
parents:
23559
diff
changeset
|
2543 CloseHandle (fh); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2544 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2545 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2546 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2547 /* Don't bother to make this information more accurate. */ |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2548 buf->st_mode = (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? |
45815
42467cc62b56
(init_environment): Remove EMACSLOCKDIR.
Jason Rumney <jasonr@gnu.org>
parents:
45812
diff
changeset
|
2549 _S_IFDIR : _S_IFREG; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2550 buf->st_nlink = 1; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2551 fake_inode = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2552 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2553 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2554 #if 0 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2555 /* Not sure if there is any point in this. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2556 if (!NILP (Vw32_generate_fake_inodes)) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2557 fake_inode = generate_inode_val (name); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2558 else if (fake_inode == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2559 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2560 /* For want of something better, try to make everything unique. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2561 static DWORD gen_num = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2562 fake_inode = ++gen_num; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2563 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2564 #endif |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2565 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2566 /* 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
|
2567 if (sizeof (buf->st_ino) == 2) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2568 buf->st_ino = fake_inode ^ (fake_inode >> 16); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2569 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
2570 buf->st_ino = fake_inode; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2571 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2572 /* consider files to belong to current user */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2573 buf->st_uid = the_passwd.pw_uid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2574 buf->st_gid = the_passwd.pw_gid; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2575 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15615
diff
changeset
|
2576 /* 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
|
2577 buf->st_dev = volume_info.serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2578 buf->st_rdev = volume_info.serialnum; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2579 |
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 buf->st_size = wfd.nFileSizeLow; |
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 /* Convert timestamps to Unix format. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2584 buf->st_mtime = convert_time (wfd.ftLastWriteTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2585 buf->st_atime = convert_time (wfd.ftLastAccessTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2586 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
|
2587 buf->st_ctime = convert_time (wfd.ftCreationTime); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2588 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
|
2589 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2590 /* determine rwx permissions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2591 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2592 permission = _S_IREAD; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2593 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2594 permission = _S_IREAD | _S_IWRITE; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2595 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2596 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2597 permission |= _S_IEXEC; |
22363 | 2598 else if (is_exec (name)) |
2599 permission |= _S_IEXEC; | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2600 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2601 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
|
2602 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2603 return 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2604 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2605 |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2606 /* 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
|
2607 file timestamps. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2608 int |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2609 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
|
2610 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2611 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
|
2612 BY_HANDLE_FILE_INFORMATION info; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2613 DWORD fake_inode; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2614 int permission; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2615 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2616 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
|
2617 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2618 case FILE_TYPE_DISK: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2619 buf->st_mode = _S_IFREG; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2620 if (!GetFileInformationByHandle (fh, &info)) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2621 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2622 errno = EACCES; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2623 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2624 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2625 break; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2626 case FILE_TYPE_PIPE: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2627 buf->st_mode = _S_IFIFO; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2628 goto non_disk; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2629 case FILE_TYPE_CHAR: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2630 case FILE_TYPE_UNKNOWN: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2631 default: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2632 buf->st_mode = _S_IFCHR; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2633 non_disk: |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2634 memset (&info, 0, sizeof (info)); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2635 info.dwFileAttributes = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2636 info.ftCreationTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2637 info.ftLastAccessTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2638 info.ftLastWriteTime = utc_base_ft; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2639 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2640 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2641 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
|
2642 buf->st_mode = _S_IFDIR; |
44927
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2643 |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2644 buf->st_nlink = info.nNumberOfLinks; |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2645 /* Might as well use file index to fake inode values, but this |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2646 is not guaranteed to be unique unless we keep a handle open |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2647 all the time (even then there are situations where it is |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2648 not unique). Reputedly, there are at most 48 bits of info |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2649 (on NTFS, presumably less on FAT). */ |
1f6fdc21ea67
(stat, fstat): Use file index information to generate
Jason Rumney <jasonr@gnu.org>
parents:
44437
diff
changeset
|
2650 fake_inode = info.nFileIndexLow ^ info.nFileIndexHigh; |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2651 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2652 /* 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
|
2653 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
|
2654 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
|
2655 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2656 buf->st_ino = fake_inode; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2657 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2658 /* 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
|
2659 buf->st_uid = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2660 buf->st_gid = 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2661 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2662 buf->st_dev = info.dwVolumeSerialNumber; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2663 buf->st_rdev = info.dwVolumeSerialNumber; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2664 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2665 buf->st_size = info.nFileSizeLow; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2666 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2667 /* Convert timestamps to Unix format. */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2668 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
|
2669 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
|
2670 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
|
2671 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
|
2672 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
|
2673 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2674 /* determine rwx permissions */ |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2675 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
|
2676 permission = _S_IREAD; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2677 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2678 permission = _S_IREAD | _S_IWRITE; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2679 |
21737
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2680 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
|
2681 permission |= _S_IEXEC; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2682 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2683 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2684 #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
|
2685 char * p = strrchr (name, '.'); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2686 if (p != NULL && |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2687 (stricmp (p, ".exe") == 0 || |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2688 stricmp (p, ".com") == 0 || |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2689 stricmp (p, ".bat") == 0 || |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2690 stricmp (p, ".cmd") == 0)) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2691 permission |= _S_IEXEC; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2692 #endif |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2693 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2694 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2695 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
|
2696 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2697 return 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2698 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2699 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2700 int |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2701 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
|
2702 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2703 struct utimbuf deftime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2704 HANDLE fh; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2705 FILETIME mtime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2706 FILETIME atime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2707 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2708 if (times == NULL) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2709 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2710 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
|
2711 times = &deftime; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2712 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2713 |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2714 /* 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
|
2715 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
|
2716 0, OPEN_EXISTING, 0, NULL); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2717 if (fh) |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2718 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2719 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
|
2720 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
|
2721 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
|
2722 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2723 CloseHandle (fh); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2724 errno = EACCES; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2725 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2726 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2727 CloseHandle (fh); |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2728 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2729 else |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2730 { |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2731 errno = EINVAL; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2732 return -1; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2733 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2734 return 0; |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2735 } |
d0b03ce6dcf5
(fstat, utime): New functions; these are provided in
Geoff Voelker <voelker@cs.washington.edu>
parents:
21605
diff
changeset
|
2736 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2737 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2738 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2739 /* 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
|
2740 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
|
2741 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2742 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
|
2743 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
|
2744 otherwise provide the minimum necessary functionality |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2745 (eg. gethostname). */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2746 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2747 /* function pointers for relevant socket functions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2748 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
|
2749 void (PASCAL *pfn_WSASetLastError) (int iError); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2750 int (PASCAL *pfn_WSAGetLastError) (void); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
2751 int (PASCAL *pfn_WSAEventSelect) (SOCKET s, HANDLE hEventObject, long lNetworkEvents); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
2752 HANDLE (PASCAL *pfn_WSACreateEvent) (void); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
2753 int (PASCAL *pfn_WSACloseEvent) (HANDLE hEvent); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2754 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
|
2755 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
|
2756 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
|
2757 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
|
2758 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
|
2759 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
|
2760 int (PASCAL *pfn_closesocket) (SOCKET s); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2761 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
|
2762 int (PASCAL *pfn_WSACleanup) (void); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2763 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2764 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
|
2765 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
|
2766 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
|
2767 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
|
2768 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
|
2769 struct servent * (PASCAL *pfn_getservbyname) (const char * name, const char * proto); |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
2770 int (PASCAL *pfn_getpeername) (SOCKET s, struct sockaddr *addr, int * namelen); |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2771 int (PASCAL *pfn_setsockopt) (SOCKET s, int level, int optname, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2772 const char * optval, int optlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2773 int (PASCAL *pfn_listen) (SOCKET s, int backlog); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2774 int (PASCAL *pfn_getsockname) (SOCKET s, struct sockaddr * name, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2775 int * namelen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2776 SOCKET (PASCAL *pfn_accept) (SOCKET s, struct sockaddr * addr, int * addrlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2777 int (PASCAL *pfn_recvfrom) (SOCKET s, char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2778 struct sockaddr * from, int * fromlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2779 int (PASCAL *pfn_sendto) (SOCKET s, const char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2780 const struct sockaddr * to, int tolen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2781 |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2782 /* 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
|
2783 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
|
2784 #ifndef HANDLE_FLAG_INHERIT |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2785 #define HANDLE_FLAG_INHERIT 1 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2786 #endif |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2787 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2788 HANDLE winsock_lib; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2789 static int winsock_inuse; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2790 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2791 BOOL |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2792 term_winsock (void) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2793 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2794 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
|
2795 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2796 /* 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
|
2797 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
|
2798 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
|
2799 if (pfn_WSACleanup () == 0 || |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2800 pfn_WSAGetLastError () == WSAENETDOWN) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2801 { |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2802 if (FreeLibrary (winsock_lib)) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2803 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2804 return TRUE; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2805 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2806 } |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2807 return FALSE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2808 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2809 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2810 BOOL |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2811 init_winsock (int load_now) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2812 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2813 WSADATA winsockData; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2814 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2815 if (winsock_lib != NULL) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2816 return TRUE; |
15342
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2817 |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2818 pfn_SetHandleInformation = NULL; |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2819 pfn_SetHandleInformation |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2820 = (void *) GetProcAddress (GetModuleHandle ("kernel32.dll"), |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2821 "SetHandleInformation"); |
e64bd8310edc
(init_winsock): Dynamically link to SetHandleInformation.
Richard M. Stallman <rms@gnu.org>
parents:
15326
diff
changeset
|
2822 |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
2823 winsock_lib = LoadLibrary ("Ws2_32.dll"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2824 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2825 if (winsock_lib != NULL) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2826 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2827 /* dynamically link to socket functions */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2828 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2829 #define LOAD_PROC(fn) \ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2830 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
|
2831 goto fail; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2832 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2833 LOAD_PROC( WSAStartup ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2834 LOAD_PROC( WSASetLastError ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2835 LOAD_PROC( WSAGetLastError ); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
2836 LOAD_PROC( WSAEventSelect ); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
2837 LOAD_PROC( WSACreateEvent ); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
2838 LOAD_PROC( WSACloseEvent ); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2839 LOAD_PROC( socket ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2840 LOAD_PROC( bind ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2841 LOAD_PROC( connect ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2842 LOAD_PROC( ioctlsocket ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2843 LOAD_PROC( recv ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2844 LOAD_PROC( send ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2845 LOAD_PROC( closesocket ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2846 LOAD_PROC( shutdown ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2847 LOAD_PROC( htons ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2848 LOAD_PROC( ntohs ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2849 LOAD_PROC( inet_addr ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2850 LOAD_PROC( gethostname ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2851 LOAD_PROC( gethostbyname ); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2852 LOAD_PROC( getservbyname ); |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
2853 LOAD_PROC( getpeername ); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2854 LOAD_PROC( WSACleanup ); |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2855 LOAD_PROC( setsockopt ); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2856 LOAD_PROC( listen ); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2857 LOAD_PROC( getsockname ); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2858 LOAD_PROC( accept ); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2859 LOAD_PROC( recvfrom ); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
2860 LOAD_PROC( sendto ); |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2861 #undef LOAD_PROC |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2862 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2863 /* specify version 1.1 of winsock */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2864 if (pfn_WSAStartup (0x101, &winsockData) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2865 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2866 if (winsockData.wVersion != 0x101) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2867 goto fail; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2868 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2869 if (!load_now) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2870 { |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2871 /* 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
|
2872 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
|
2873 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
|
2874 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
|
2875 connection to be established. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2876 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2877 pfn_WSACleanup (); |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2878 FreeLibrary (winsock_lib); |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2879 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2880 } |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2881 winsock_inuse = 0; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2882 return TRUE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2883 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2884 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2885 fail: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2886 FreeLibrary (winsock_lib); |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2887 winsock_lib = NULL; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2888 } |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2889 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2890 return FALSE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2891 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2892 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2893 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2894 int h_errno = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2895 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2896 /* 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
|
2897 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
|
2898 are already in <sys/socket.h> */ |
74947 | 2899 static void |
2900 set_errno () | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2901 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2902 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2903 h_errno = EINVAL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2904 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2905 h_errno = pfn_WSAGetLastError (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2906 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2907 switch (h_errno) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2908 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2909 case WSAEACCES: h_errno = EACCES; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2910 case WSAEBADF: h_errno = EBADF; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2911 case WSAEFAULT: h_errno = EFAULT; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2912 case WSAEINTR: h_errno = EINTR; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2913 case WSAEINVAL: h_errno = EINVAL; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2914 case WSAEMFILE: h_errno = EMFILE; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2915 case WSAENAMETOOLONG: h_errno = ENAMETOOLONG; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2916 case WSAENOTEMPTY: h_errno = ENOTEMPTY; break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2917 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2918 errno = h_errno; |
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 |
74947 | 2921 static void |
2922 check_errno () | |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2923 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
2924 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
|
2925 pfn_WSASetLastError (0); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2926 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
2927 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2928 /* Extend strerror to handle the winsock-specific error codes. */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2929 struct { |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2930 int errnum; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2931 char * msg; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2932 } _wsa_errlist[] = { |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2933 WSAEINTR , "Interrupted function call", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2934 WSAEBADF , "Bad file descriptor", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2935 WSAEACCES , "Permission denied", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2936 WSAEFAULT , "Bad address", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2937 WSAEINVAL , "Invalid argument", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2938 WSAEMFILE , "Too many open files", |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2939 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2940 WSAEWOULDBLOCK , "Resource temporarily unavailable", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2941 WSAEINPROGRESS , "Operation now in progress", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2942 WSAEALREADY , "Operation already in progress", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2943 WSAENOTSOCK , "Socket operation on non-socket", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2944 WSAEDESTADDRREQ , "Destination address required", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2945 WSAEMSGSIZE , "Message too long", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2946 WSAEPROTOTYPE , "Protocol wrong type for socket", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2947 WSAENOPROTOOPT , "Bad protocol option", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2948 WSAEPROTONOSUPPORT , "Protocol not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2949 WSAESOCKTNOSUPPORT , "Socket type not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2950 WSAEOPNOTSUPP , "Operation not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2951 WSAEPFNOSUPPORT , "Protocol family not supported", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2952 WSAEAFNOSUPPORT , "Address family not supported by protocol family", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2953 WSAEADDRINUSE , "Address already in use", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2954 WSAEADDRNOTAVAIL , "Cannot assign requested address", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2955 WSAENETDOWN , "Network is down", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2956 WSAENETUNREACH , "Network is unreachable", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2957 WSAENETRESET , "Network dropped connection on reset", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2958 WSAECONNABORTED , "Software caused connection abort", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2959 WSAECONNRESET , "Connection reset by peer", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2960 WSAENOBUFS , "No buffer space available", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2961 WSAEISCONN , "Socket is already connected", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2962 WSAENOTCONN , "Socket is not connected", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2963 WSAESHUTDOWN , "Cannot send after socket shutdown", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2964 WSAETOOMANYREFS , "Too many references", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2965 WSAETIMEDOUT , "Connection timed out", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2966 WSAECONNREFUSED , "Connection refused", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2967 WSAELOOP , "Network loop", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2968 WSAENAMETOOLONG , "Name is too long", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2969 WSAEHOSTDOWN , "Host is down", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2970 WSAEHOSTUNREACH , "No route to host", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2971 WSAENOTEMPTY , "Buffer not empty", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2972 WSAEPROCLIM , "Too many processes", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2973 WSAEUSERS , "Too many users", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2974 WSAEDQUOT , "Double quote in host name", /* really not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2975 WSAESTALE , "Data is stale", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2976 WSAEREMOTE , "Remote error", /* not sure */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2977 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2978 WSASYSNOTREADY , "Network subsystem is unavailable", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2979 WSAVERNOTSUPPORTED , "WINSOCK.DLL version out of range", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2980 WSANOTINITIALISED , "Winsock not initialized successfully", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2981 WSAEDISCON , "Graceful shutdown in progress", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2982 #ifdef WSAENOMORE |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2983 WSAENOMORE , "No more operations allowed", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2984 WSAECANCELLED , "Operation cancelled", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2985 WSAEINVALIDPROCTABLE , "Invalid procedure table from service provider", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2986 WSAEINVALIDPROVIDER , "Invalid service provider version number", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2987 WSAEPROVIDERFAILEDINIT , "Unable to initialize a service provider", |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
2988 WSASYSCALLFAILURE , "System call failure", |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2989 WSASERVICE_NOT_FOUND , "Service not found", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2990 WSATYPE_NOT_FOUND , "Class type not found", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2991 WSA_E_NO_MORE , "No more resources available", /* really not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2992 WSA_E_CANCELLED , "Operation already cancelled", /* really not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2993 WSAEREFUSED , "Operation refused", /* not sure */ |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2994 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
2995 |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2996 WSAHOST_NOT_FOUND , "Host not found", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2997 WSATRY_AGAIN , "Authoritative host not found during name lookup", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2998 WSANO_RECOVERY , "Non-recoverable error during name lookup", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
2999 WSANO_DATA , "Valid name, no data record of requested type", |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3000 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3001 -1, NULL |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3002 }; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3003 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3004 char * |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3005 sys_strerror(int error_no) |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3006 { |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3007 int i; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3008 static char unknown_msg[40]; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3009 |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
3010 if (error_no >= 0 && error_no < sys_nerr) |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
3011 return sys_errlist[error_no]; |
24857
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3012 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3013 for (i = 0; _wsa_errlist[i].errnum >= 0; i++) |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3014 if (_wsa_errlist[i].errnum == error_no) |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3015 return _wsa_errlist[i].msg; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3016 |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3017 sprintf(unknown_msg, "Unidentified error: %d", error_no); |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3018 return unknown_msg; |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3019 } |
031247d14ba1
(sys_strerror): New function.
Andrew Innes <andrewi@gnu.org>
parents:
24229
diff
changeset
|
3020 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3021 /* [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
|
3022 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
|
3023 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
|
3024 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3025 //#define SOCK_REPLACE_HANDLE |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3026 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3027 #ifdef SOCK_REPLACE_HANDLE |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3028 #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
|
3029 #else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3030 #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
|
3031 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3032 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3033 int socket_to_fd (SOCKET s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3034 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3035 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3036 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
|
3037 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3038 SOCKET s; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3039 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3040 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3041 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3042 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3043 return INVALID_SOCKET; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3044 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3045 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3046 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3047 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3048 /* call the real socket function */ |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3049 s = pfn_socket (af, type, protocol); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3050 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3051 if (s != INVALID_SOCKET) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3052 return socket_to_fd (s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3053 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3054 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3055 return -1; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3056 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3057 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3058 /* Convert a SOCKET to a file descriptor. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3059 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3060 socket_to_fd (SOCKET s) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3061 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3062 int fd; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3063 child_process * cp; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3064 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3065 /* Although under NT 3.5 _open_osfhandle will accept a socket |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3066 handle, if opened with SO_OPENTYPE == SO_SYNCHRONOUS_NONALERT, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3067 that does not work under NT 3.1. However, we can get the same |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3068 effect by using a backdoor function to replace an existing |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3069 descriptor handle with the one we want. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3070 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3071 /* allocate a file descriptor (with appropriate flags) */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3072 fd = _open ("NUL:", _O_RDWR); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3073 if (fd >= 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3074 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3075 #ifdef SOCK_REPLACE_HANDLE |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3076 /* now replace handle to NUL with our socket handle */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3077 CloseHandle ((HANDLE) _get_osfhandle (fd)); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3078 _free_osfhnd (fd); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3079 _set_osfhnd (fd, s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3080 /* setmode (fd, _O_BINARY); */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3081 #else |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3082 /* Make a non-inheritable copy of the socket handle. Note |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3083 that it is possible that sockets aren't actually kernel |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3084 handles, which appears to be the case on Windows 9x when |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3085 the MS Proxy winsock client is installed. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3086 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3087 /* Apparently there is a bug in NT 3.51 with some service |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3088 packs, which prevents using DuplicateHandle to make a |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3089 socket handle non-inheritable (causes WSACleanup to |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3090 hang). The work-around is to use SetHandleInformation |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3091 instead if it is available and implemented. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3092 if (pfn_SetHandleInformation) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3093 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3094 pfn_SetHandleInformation ((HANDLE) s, HANDLE_FLAG_INHERIT, 0); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3095 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3096 else |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3097 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3098 HANDLE parent = GetCurrentProcess (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3099 HANDLE new_s = INVALID_HANDLE_VALUE; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3100 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3101 if (DuplicateHandle (parent, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3102 (HANDLE) s, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3103 parent, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3104 &new_s, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3105 0, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3106 FALSE, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3107 DUPLICATE_SAME_ACCESS)) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
3108 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3109 /* It is possible that DuplicateHandle succeeds even |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3110 though the socket wasn't really a kernel handle, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3111 because a real handle has the same value. So |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3112 test whether the new handle really is a socket. */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3113 long nonblocking = 0; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3114 if (pfn_ioctlsocket ((SOCKET) new_s, FIONBIO, &nonblocking) == 0) |
30060
15f8d649a7a8
(init_environment): Install code from 20.7 for providing
Andrew Innes <andrewi@gnu.org>
parents:
28932
diff
changeset
|
3115 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3116 pfn_closesocket (s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3117 s = (SOCKET) new_s; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3118 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3119 else |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3120 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3121 CloseHandle (new_s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3122 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3123 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3124 } |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3125 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3126 fd_info[fd].hnd = (HANDLE) s; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3127 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3128 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3129 /* set our own internal flags */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3130 fd_info[fd].flags = FILE_SOCKET | FILE_BINARY | FILE_READ | FILE_WRITE; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3131 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3132 cp = new_child (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3133 if (cp) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3134 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3135 cp->fd = fd; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3136 cp->status = STATUS_READ_ACKNOWLEDGED; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3137 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3138 /* attach child_process to fd_info */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3139 if (fd_info[ fd ].cp != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3140 { |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3141 DebPrint (("sys_socket: fd_info[%d] apparently in use!\n", fd)); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3142 abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3143 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3144 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3145 fd_info[ fd ].cp = cp; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3146 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3147 /* success! */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3148 winsock_inuse++; /* count open sockets */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3149 return fd; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3150 } |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3151 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3152 /* clean up */ |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3153 _close (fd); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3154 } |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3155 pfn_closesocket (s); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3156 h_errno = EMFILE; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3157 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3158 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3159 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3160 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3161 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3162 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
|
3163 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3164 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3165 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3166 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3167 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3168 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3169 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3170 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3171 if (fd_info[s].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3172 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3173 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
|
3174 if (rc == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3175 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3176 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3177 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3178 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3179 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3180 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3181 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3182 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3183 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3184 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
|
3185 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3186 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3187 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3188 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3189 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3190 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3191 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3192 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3193 if (fd_info[s].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3194 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3195 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
|
3196 if (rc == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3197 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3198 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3199 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3200 h_errno = ENOTSOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3201 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3202 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3203 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3204 u_short |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3205 sys_htons (u_short hostshort) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3206 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3207 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3208 pfn_htons (hostshort) : hostshort; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3209 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3210 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3211 u_short |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3212 sys_ntohs (u_short netshort) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3213 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3214 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3215 pfn_ntohs (netshort) : netshort; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3216 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3217 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3218 unsigned long |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3219 sys_inet_addr (const char * cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3220 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3221 return (winsock_lib != NULL) ? |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3222 pfn_inet_addr (cp) : INADDR_NONE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3223 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3224 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3225 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3226 sys_gethostname (char * name, int namelen) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3227 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3228 if (winsock_lib != NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3229 return pfn_gethostname (name, namelen); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3230 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3231 if (namelen > MAX_COMPUTERNAME_LENGTH) |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
3232 return !GetComputerName (name, (DWORD *)&namelen); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3233 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3234 h_errno = EFAULT; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3235 return SOCKET_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3236 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3237 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3238 struct hostent * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3239 sys_gethostbyname(const char * name) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3240 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3241 struct hostent * host; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3242 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3243 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3244 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3245 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3246 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3247 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3248 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3249 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3250 host = pfn_gethostbyname (name); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3251 if (!host) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3252 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3253 return host; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3254 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3255 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3256 struct servent * |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3257 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
|
3258 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3259 struct servent * serv; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3260 |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3261 if (winsock_lib == NULL) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3262 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3263 h_errno = ENETDOWN; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3264 return NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3265 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3266 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3267 check_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3268 serv = pfn_getservbyname (name, proto); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3269 if (!serv) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3270 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3271 return serv; |
9803 | 3272 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3273 |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3274 int |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3275 sys_getpeername (int s, struct sockaddr *addr, int * namelen) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3276 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3277 if (winsock_lib == NULL) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3278 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3279 h_errno = ENETDOWN; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3280 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3281 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3282 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3283 check_errno (); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3284 if (fd_info[s].flags & FILE_SOCKET) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3285 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3286 int rc = pfn_getpeername (SOCK_HANDLE (s), addr, namelen); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3287 if (rc == SOCKET_ERROR) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3288 set_errno (); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3289 return rc; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3290 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3291 h_errno = ENOTSOCK; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3292 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3293 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3294 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3295 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3296 int |
18725
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3297 sys_shutdown (int s, int how) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3298 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3299 if (winsock_lib == NULL) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3300 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3301 h_errno = ENETDOWN; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3302 return SOCKET_ERROR; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3303 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3304 |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3305 check_errno (); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3306 if (fd_info[s].flags & FILE_SOCKET) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3307 { |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3308 int rc = pfn_shutdown (SOCK_HANDLE (s), how); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3309 if (rc == SOCKET_ERROR) |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3310 set_errno (); |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3311 return rc; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3312 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3313 h_errno = ENOTSOCK; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3314 return SOCKET_ERROR; |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3315 } |
07145cb40453
(sys_shutdown): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16892
diff
changeset
|
3316 |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3317 int |
63038
ac1cd1222417
(sys_setsockopt): Change arg 4 to `const void *'. In the
Eli Zaretskii <eliz@gnu.org>
parents:
63020
diff
changeset
|
3318 sys_setsockopt (int s, int level, int optname, const void * optval, int optlen) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3319 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3320 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3321 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3322 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3323 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3324 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3325 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3326 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3327 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3328 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3329 int rc = pfn_setsockopt (SOCK_HANDLE (s), level, optname, |
63038
ac1cd1222417
(sys_setsockopt): Change arg 4 to `const void *'. In the
Eli Zaretskii <eliz@gnu.org>
parents:
63020
diff
changeset
|
3330 (const char *)optval, optlen); |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3331 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3332 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3333 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3334 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3335 h_errno = ENOTSOCK; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3336 return SOCKET_ERROR; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3337 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3338 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3339 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3340 sys_listen (int s, int backlog) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3341 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3342 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3343 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3344 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3345 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3346 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3347 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3348 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3349 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3350 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3351 int rc = pfn_listen (SOCK_HANDLE (s), backlog); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3352 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3353 set_errno (); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
3354 else |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3355 fd_info[s].flags |= FILE_LISTEN; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3356 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3357 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3358 h_errno = ENOTSOCK; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3359 return SOCKET_ERROR; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3360 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3361 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3362 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3363 sys_getsockname (int s, struct sockaddr * name, int * namelen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3364 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3365 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3366 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3367 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3368 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3369 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3370 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3371 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3372 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3373 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3374 int rc = pfn_getsockname (SOCK_HANDLE (s), name, namelen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3375 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3376 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3377 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3378 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3379 h_errno = ENOTSOCK; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3380 return SOCKET_ERROR; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3381 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3382 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3383 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3384 sys_accept (int s, struct sockaddr * addr, int * addrlen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3385 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3386 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3387 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3388 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3389 return -1; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3390 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3391 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3392 check_errno (); |
71889
2385a5c8186c
Fix high cpu load for server sockets.
Kim F. Storm <storm@cua.dk>
parents:
70740
diff
changeset
|
3393 if (fd_info[s].flags & FILE_LISTEN) |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3394 { |
44437
81e8a128e49f
(sys_accept): Don't hide variable `s'.
Juanma Barranquero <lekktu@gmail.com>
parents:
44042
diff
changeset
|
3395 SOCKET t = pfn_accept (SOCK_HANDLE (s), addr, addrlen); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3396 int fd = -1; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3397 if (t == INVALID_SOCKET) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3398 set_errno (); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3399 else |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3400 fd = socket_to_fd (t); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3401 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3402 fd_info[s].cp->status = STATUS_READ_ACKNOWLEDGED; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3403 ResetEvent (fd_info[s].cp->char_avail); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3404 return fd; |
44042
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3405 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3406 h_errno = ENOTSOCK; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3407 return -1; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3408 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3409 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3410 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3411 sys_recvfrom (int s, char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3412 struct sockaddr * from, int * fromlen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3413 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3414 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3415 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3416 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3417 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3418 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3419 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3420 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3421 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3422 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3423 int rc = pfn_recvfrom (SOCK_HANDLE (s), buf, len, flags, from, fromlen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3424 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3425 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3426 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3427 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3428 h_errno = ENOTSOCK; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3429 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3430 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3431 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3432 int |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3433 sys_sendto (int s, const char * buf, int len, int flags, |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3434 const struct sockaddr * to, int tolen) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3435 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3436 if (winsock_lib == NULL) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3437 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3438 h_errno = ENETDOWN; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3439 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3440 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3441 |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3442 check_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3443 if (fd_info[s].flags & FILE_SOCKET) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3444 { |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3445 int rc = pfn_sendto (SOCK_HANDLE (s), buf, len, flags, to, tolen); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3446 if (rc == SOCKET_ERROR) |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3447 set_errno (); |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3448 return rc; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3449 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3450 h_errno = ENOTSOCK; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3451 return SOCKET_ERROR; |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3452 } |
6e7772d1632e
(init_winsock): Dynamically load new server and UDP
Jason Rumney <jasonr@gnu.org>
parents:
42469
diff
changeset
|
3453 |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3454 /* Windows does not have an fcntl function. Provide an implementation |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3455 solely for making sockets non-blocking. */ |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3456 int |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3457 fcntl (int s, int cmd, int options) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3458 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3459 if (winsock_lib == NULL) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3460 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3461 h_errno = ENETDOWN; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3462 return -1; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3463 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3464 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3465 check_errno (); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3466 if (fd_info[s].flags & FILE_SOCKET) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3467 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3468 if (cmd == F_SETFL && options == O_NDELAY) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3469 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3470 unsigned long nblock = 1; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3471 int rc = pfn_ioctlsocket (SOCK_HANDLE (s), FIONBIO, &nblock); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3472 if (rc == SOCKET_ERROR) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3473 set_errno(); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3474 /* Keep track of the fact that we set this to non-blocking. */ |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3475 fd_info[s].flags |= FILE_NDELAY; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3476 return rc; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3477 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3478 else |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3479 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3480 h_errno = EINVAL; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3481 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3482 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3483 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3484 h_errno = ENOTSOCK; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3485 return SOCKET_ERROR; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3486 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3487 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3488 #endif /* HAVE_SOCKETS */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3489 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3490 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3491 /* 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
|
3492 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
|
3493 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3494 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3495 sys_close (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3496 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3497 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3498 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3499 if (fd < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3500 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3501 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3502 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3503 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3504 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3505 if (fd < MAXDESC && fd_info[fd].cp) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3506 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3507 child_process * cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3508 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3509 fd_info[fd].cp = NULL; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3510 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3511 if (CHILD_ACTIVE (cp)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3512 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3513 /* 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
|
3514 int i; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3515 for (i = 0; i < MAXDESC; i++) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3516 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3517 if (i == fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3518 continue; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3519 if (fd_info[i].cp == cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3520 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3521 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3522 if (i == MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3523 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3524 #ifdef HAVE_SOCKETS |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3525 if (fd_info[fd].flags & FILE_SOCKET) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3526 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3527 #ifndef SOCK_REPLACE_HANDLE |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3528 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3529 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3530 pfn_shutdown (SOCK_HANDLE (fd), 2); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3531 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
|
3532 #endif |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3533 winsock_inuse--; /* count open sockets */ |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3534 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3535 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3536 delete_child (cp); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3537 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3538 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3539 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3540 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3541 /* 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
|
3542 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
|
3543 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
|
3544 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
|
3545 rc = _close (fd); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3546 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3547 if (rc == 0 && fd < MAXDESC) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3548 fd_info[fd].flags = 0; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3549 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3550 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3551 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3552 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3553 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3554 sys_dup (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3555 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3556 int new_fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3557 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3558 new_fd = _dup (fd); |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3559 if (new_fd >= 0 && new_fd < MAXDESC) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3560 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3561 /* duplicate our internal info as well */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3562 fd_info[new_fd] = fd_info[fd]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3563 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3564 return new_fd; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3565 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3566 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3567 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3568 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3569 sys_dup2 (int src, int dst) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3570 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3571 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3572 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3573 if (dst < 0 || dst >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3574 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3575 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3576 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3577 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3578 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3579 /* 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
|
3580 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
|
3581 sys_close (dst); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3582 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3583 rc = _dup2 (src, dst); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3584 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3585 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3586 /* duplicate our internal info as well */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3587 fd_info[dst] = fd_info[src]; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3588 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3589 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3590 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3591 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3592 /* Unix pipe() has only one arg */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3593 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3594 sys_pipe (int * phandles) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3595 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3596 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3597 unsigned flags; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3598 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3599 /* 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
|
3600 replace the relevant handle with an inheritable one. Also put |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3601 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
|
3602 if required. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3603 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
|
3604 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3605 if (rc == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3606 { |
52353
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3607 /* Protect against overflow, since Windows can open more handles than |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3608 our fd_info array has room for. */ |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3609 if (phandles[0] >= MAXDESC || phandles[1] >= MAXDESC) |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3610 { |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3611 _close (phandles[0]); |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3612 _close (phandles[1]); |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3613 rc = -1; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3614 } |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3615 else |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3616 { |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3617 flags = FILE_PIPE | FILE_READ | FILE_BINARY; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3618 fd_info[phandles[0]].flags = flags; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3619 |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3620 flags = FILE_PIPE | FILE_WRITE | FILE_BINARY; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3621 fd_info[phandles[1]].flags = flags; |
373b8dc17c8b
(sys_pipe): Protect against file descriptor overflow.
Jason Rumney <jasonr@gnu.org>
parents:
49600
diff
changeset
|
3622 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3623 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3624 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3625 return rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3626 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3627 |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3628 /* From ntproc.c */ |
55643
ed93b07d7123
(_sys_read_ahead): Use w32_pipe_read_delay.
Jason Rumney <jasonr@gnu.org>
parents:
53123
diff
changeset
|
3629 extern int w32_pipe_read_delay; |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3630 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3631 /* 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
|
3632 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
|
3633 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3634 _sys_read_ahead (int fd) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3635 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3636 child_process * cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3637 int rc; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3638 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3639 if (fd < 0 || fd >= MAXDESC) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3640 return STATUS_READ_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3641 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3642 cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3643 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3644 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
|
3645 return STATUS_READ_ERROR; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3646 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3647 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
|
3648 || (fd_info[fd].flags & FILE_READ) == 0) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3649 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3650 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
|
3651 abort (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3652 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3653 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3654 cp->status = STATUS_READ_IN_PROGRESS; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3655 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3656 if (fd_info[fd].flags & FILE_PIPE) |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3657 { |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3658 rc = _read (fd, &cp->chr, sizeof (char)); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3659 |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3660 /* 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
|
3661 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
|
3662 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
|
3663 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
|
3664 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
|
3665 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
|
3666 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
|
3667 if (rc > 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3668 { |
55643
ed93b07d7123
(_sys_read_ahead): Use w32_pipe_read_delay.
Jason Rumney <jasonr@gnu.org>
parents:
53123
diff
changeset
|
3669 int wait = w32_pipe_read_delay; |
15249
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3670 |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3671 if (wait > 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3672 Sleep (wait); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3673 else if (wait < 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3674 while (++wait <= 0) |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3675 /* 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
|
3676 temporary priority boost to the child process. */ |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3677 Sleep (0); |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3678 } |
53bb2499db2a
(_sys_read_ahead): Handle sleep here.
Karl Heuer <kwzh@gnu.org>
parents:
15237
diff
changeset
|
3679 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3680 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3681 else if (fd_info[fd].flags & FILE_SOCKET) |
45090
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3682 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3683 unsigned long nblock = 0; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3684 /* We always want this to block, so temporarily disable NDELAY. */ |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3685 if (fd_info[fd].flags & FILE_NDELAY) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3686 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3687 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3688 rc = pfn_recv (SOCK_HANDLE (fd), &cp->chr, sizeof (char), 0); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3689 |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3690 if (fd_info[fd].flags & FILE_NDELAY) |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3691 { |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3692 nblock = 1; |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3693 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3694 } |
c9aa2603d1f7
(sys_getpeername, fcntl): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
45007
diff
changeset
|
3695 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3696 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3697 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3698 if (rc == sizeof (char)) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3699 cp->status = STATUS_READ_SUCCEEDED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3700 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3701 cp->status = STATUS_READ_FAILED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3702 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3703 return cp->status; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3704 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3705 |
74947 | 3706 int |
3707 _sys_wait_accept (int fd) | |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3708 { |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3709 HANDLE hEv; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3710 child_process * cp; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3711 int rc; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3712 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3713 if (fd < 0 || fd >= MAXDESC) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3714 return STATUS_READ_ERROR; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3715 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3716 cp = fd_info[fd].cp; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3717 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3718 if (cp == NULL || cp->fd != fd || cp->status != STATUS_READ_READY) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3719 return STATUS_READ_ERROR; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3720 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3721 cp->status = STATUS_READ_FAILED; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3722 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3723 hEv = pfn_WSACreateEvent (); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3724 rc = pfn_WSAEventSelect (SOCK_HANDLE (fd), hEv, FD_ACCEPT); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3725 if (rc != SOCKET_ERROR) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3726 { |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3727 rc = WaitForSingleObject (hEv, INFINITE); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3728 pfn_WSAEventSelect (SOCK_HANDLE (fd), NULL, 0); |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3729 if (rc == WAIT_OBJECT_0) |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3730 cp->status = STATUS_READ_SUCCEEDED; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3731 } |
74786
4f26e07fd85d
(_sys_wait_accept): Fix handle leak.
Kim F. Storm <storm@cua.dk>
parents:
72631
diff
changeset
|
3732 pfn_WSACloseEvent (hEv); |
71899
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3733 |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3734 return cp->status; |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3735 } |
6772d0603863
(pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
Kim F. Storm <storm@cua.dk>
parents:
71889
diff
changeset
|
3736 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3737 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3738 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
|
3739 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3740 int nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3741 int to_read; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3742 DWORD waiting; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3743 char * orig_buffer = buffer; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3744 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3745 if (fd < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3746 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3747 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3748 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3749 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3750 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3751 if (fd < MAXDESC && fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3752 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3753 child_process *cp = fd_info[fd].cp; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3754 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3755 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
|
3756 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3757 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3758 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3759 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3760 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3761 nchars = 0; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3762 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3763 /* re-read CR carried over from last read */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3764 if (fd_info[fd].flags & FILE_LAST_CR) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3765 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3766 if (fd_info[fd].flags & FILE_BINARY) abort (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3767 *buffer++ = 0x0d; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3768 count--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3769 nchars++; |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3770 fd_info[fd].flags &= ~FILE_LAST_CR; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3771 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3772 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3773 /* 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
|
3774 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
|
3775 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
|
3776 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
|
3777 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
|
3778 if (cp) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3779 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3780 int current_status = cp->status; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3781 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3782 switch (current_status) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3783 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3784 case STATUS_READ_FAILED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3785 case STATUS_READ_ERROR: |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3786 /* report normal EOF if nothing in buffer */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3787 if (nchars <= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3788 fd_info[fd].flags |= FILE_AT_EOF; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3789 return nchars; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3790 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3791 case STATUS_READ_READY: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3792 case STATUS_READ_IN_PROGRESS: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3793 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
|
3794 errno = EWOULDBLOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3795 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3796 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3797 case STATUS_READ_SUCCEEDED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3798 /* consume read-ahead char */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3799 *buffer++ = cp->chr; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3800 count--; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3801 nchars++; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3802 cp->status = STATUS_READ_ACKNOWLEDGED; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3803 ResetEvent (cp->char_avail); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3804 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3805 case STATUS_READ_ACKNOWLEDGED: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3806 break; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3807 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3808 default: |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3809 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
|
3810 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3811 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3812 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3813 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3814 if (fd_info[fd].flags & FILE_PIPE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3815 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3816 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
|
3817 to_read = min (waiting, (DWORD) count); |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3818 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3819 if (to_read > 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3820 nchars += _read (fd, buffer, to_read); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3821 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3822 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3823 else /* FILE_SOCKET */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3824 { |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3825 if (winsock_lib == NULL) abort (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3826 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3827 /* 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
|
3828 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONREAD, &waiting); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3829 if (waiting == 0 && nchars == 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3830 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3831 h_errno = errno = EWOULDBLOCK; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3832 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3833 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3834 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3835 if (waiting) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3836 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3837 /* always use binary mode for sockets */ |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3838 int res = pfn_recv (SOCK_HANDLE (fd), buffer, count, 0); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3839 if (res == SOCKET_ERROR) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3840 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3841 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
|
3842 pfn_WSAGetLastError (), SOCK_HANDLE (fd))); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3843 set_errno (); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3844 return -1; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3845 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3846 nchars += res; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3847 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3848 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3849 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3850 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3851 else |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3852 { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3853 int nread = _read (fd, buffer, count); |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3854 if (nread >= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3855 nchars += nread; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3856 else if (nchars == 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3857 nchars = nread; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3858 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3859 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3860 if (nchars <= 0) |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3861 fd_info[fd].flags |= FILE_AT_EOF; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3862 /* Perform text mode translation if required. */ |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3863 else if ((fd_info[fd].flags & FILE_BINARY) == 0) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3864 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3865 nchars = crlf_to_lf (nchars, orig_buffer); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3866 /* If buffer contains only CR, return that. To be absolutely |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3867 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
|
3868 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
|
3869 itself in the buffer. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3870 if (nchars > 1 && orig_buffer[nchars - 1] == 0x0d) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3871 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3872 fd_info[fd].flags |= FILE_LAST_CR; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3873 nchars--; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3874 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3875 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3876 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3877 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3878 nchars = _read (fd, buffer, count); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3879 |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3880 return nchars; |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3881 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3882 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3883 /* 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
|
3884 int |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3885 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
|
3886 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3887 int nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3888 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3889 if (fd < 0) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3890 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3891 errno = EBADF; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3892 return -1; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3893 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3894 |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3895 if (fd < MAXDESC && fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3896 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3897 if ((fd_info[fd].flags & FILE_WRITE) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3898 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3899 errno = EBADF; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3900 return -1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3901 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3902 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3903 /* Perform text mode translation if required. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3904 if ((fd_info[fd].flags & FILE_BINARY) == 0) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3905 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3906 char * tmpbuf = alloca (count * 2); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3907 unsigned char * src = (void *)buffer; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3908 unsigned char * dst = tmpbuf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3909 int nbytes = count; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3910 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3911 while (1) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3912 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3913 unsigned char *next; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3914 /* copy next line or remaining bytes */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3915 next = _memccpy (dst, src, '\n', nbytes); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3916 if (next) |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3917 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3918 /* copied one line ending with '\n' */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3919 int copied = next - dst; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3920 nbytes -= copied; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3921 src += copied; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3922 /* insert '\r' before '\n' */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3923 next[-1] = '\r'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3924 next[0] = '\n'; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3925 dst = next + 1; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3926 count++; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3927 } |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3928 else |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3929 /* copied remaining partial line -> now finished */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3930 break; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3931 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3932 buffer = tmpbuf; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3933 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3934 } |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
3935 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3936 #ifdef HAVE_SOCKETS |
68299
8d40a7886950
(sys_close): If FD is outside [0..MAXDESC) limits, pass it directly to _close.
Eli Zaretskii <eliz@gnu.org>
parents:
65458
diff
changeset
|
3937 if (fd < MAXDESC && fd_info[fd].flags & FILE_SOCKET) |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3938 { |
48545
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3939 unsigned long nblock = 0; |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
3940 if (winsock_lib == NULL) abort (); |
48545
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3941 |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3942 /* TODO: implement select() properly so non-blocking I/O works. */ |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3943 /* For now, make sure the write blocks. */ |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3944 if (fd_info[fd].flags & FILE_NDELAY) |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3945 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3946 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3947 nchars = pfn_send (SOCK_HANDLE (fd), buffer, count, 0); |
48545
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3948 |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3949 /* Set the socket back to non-blocking if it was before, |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3950 for other operations that support it. */ |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3951 if (fd_info[fd].flags & FILE_NDELAY) |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3952 { |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3953 nblock = 1; |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3954 pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock); |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3955 } |
538af265a4a7
(sys_write): Avoid non-blocking mode, which is not fully
Jason Rumney <jasonr@gnu.org>
parents:
48375
diff
changeset
|
3956 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3957 if (nchars == SOCKET_ERROR) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3958 { |
48561 | 3959 DebPrint(("sys_write.send failed with error %d on socket %ld\n", |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3960 pfn_WSAGetLastError (), SOCK_HANDLE (fd))); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3961 set_errno (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3962 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3963 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3964 else |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3965 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3966 nchars = _write (fd, buffer, count); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3967 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3968 return nchars; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3969 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
3970 |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3971 static void |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3972 check_windows_init_file () |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3973 { |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3974 extern int noninteractive, inhibit_window_system; |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3975 |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
3976 /* 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
|
3977 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
|
3978 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
|
3979 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3980 if (!noninteractive && !inhibit_window_system) |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3981 { |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3982 extern Lisp_Object Vwindow_system, Vload_path, Qfile_exists_p; |
23809
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
3983 Lisp_Object objs[2]; |
23559
989c9cb875e3
(check_windows_init_file): Also look in load path specified
Geoff Voelker <voelker@cs.washington.edu>
parents:
23395
diff
changeset
|
3984 Lisp_Object full_load_path; |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3985 Lisp_Object init_file; |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3986 int fd; |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3987 |
23809
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
3988 objs[0] = Vload_path; |
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
3989 objs[1] = decode_env_path (0, (getenv ("EMACSLOADPATH"))); |
2a6ad78388b3
(check_windows_init_file): Use decode_env_path when
Geoff Voelker <voelker@cs.washington.edu>
parents:
23622
diff
changeset
|
3990 full_load_path = Fappend (2, objs); |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3991 init_file = build_string ("term/w32-win"); |
69172
e22243af3267
(check_windows_init_file): Use Fget_load_suffixes instead of Vload_suffixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68651
diff
changeset
|
3992 fd = openp (full_load_path, init_file, Fget_load_suffixes (), NULL, Qnil); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
3993 if (fd < 0) |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
3994 { |
23559
989c9cb875e3
(check_windows_init_file): Also look in load path specified
Geoff Voelker <voelker@cs.washington.edu>
parents:
23395
diff
changeset
|
3995 Lisp_Object load_path_print = Fprin1_to_string (full_load_path, Qnil); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45815
diff
changeset
|
3996 char *init_file_name = SDATA (init_file); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45815
diff
changeset
|
3997 char *load_path = SDATA (load_path_print); |
65458
02e47d7a9bca
(check_windows_init_file): Fix allocation of error buffer.
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
3998 char *buffer = alloca (1024 |
02e47d7a9bca
(check_windows_init_file): Fix allocation of error buffer.
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
3999 + strlen (init_file_name) |
02e47d7a9bca
(check_windows_init_file): Fix allocation of error buffer.
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
4000 + strlen (load_path)); |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4001 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4002 sprintf (buffer, |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4003 "The Emacs Windows initialization file \"%s.el\" " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4004 "could not be found in your Emacs installation. " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4005 "Emacs checked the following directories for this file:\n" |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4006 "\n%s\n\n" |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4007 "When Emacs cannot find this file, it usually means that it " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4008 "was not installed properly, or its distribution file was " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4009 "not unpacked properly.\nSee the README.W32 file in the " |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4010 "top-level Emacs directory for more information.", |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4011 init_file_name, load_path); |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4012 MessageBox (NULL, |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4013 buffer, |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4014 "Emacs Abort Dialog", |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4015 MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL); |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
4016 /* Use the low-level Emacs abort. */ |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
4017 #undef abort |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4018 abort (); |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4019 } |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4020 else |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4021 { |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4022 _close (fd); |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4023 } |
21605
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
4024 } |
60b840947a09
(sys_read): Clear carriage return flag.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21565
diff
changeset
|
4025 } |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4026 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4027 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4028 term_ntproc () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4029 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4030 #ifdef HAVE_SOCKETS |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4031 /* shutdown the socket interface if necessary */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4032 term_winsock (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4033 #endif |
60092
04686828d0da
2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents:
57609
diff
changeset
|
4034 |
04686828d0da
2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
Jason Rumney <jasonr@gnu.org>
parents:
57609
diff
changeset
|
4035 term_w32select (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4036 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4037 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4038 void |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4039 init_ntproc () |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4040 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4041 #ifdef HAVE_SOCKETS |
15357
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4042 /* 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
|
4043 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
|
4044 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
|
4045 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
|
4046 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4047 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
|
4048 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
|
4049 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4050 /* Always initialize this correctly. */ |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4051 winsock_lib = NULL; |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4052 |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4053 if (getenv ("PRELOAD_WINSOCK") != NULL) |
6686192ea2b3
(init_environment): Read PRELOAD_WINSOCK from registry if
Richard M. Stallman <rms@gnu.org>
parents:
15354
diff
changeset
|
4054 init_winsock (TRUE); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4055 #endif |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4056 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4057 /* 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
|
4058 handles with non-inheritable versions. */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4059 { |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4060 HANDLE parent; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4061 HANDLE stdin_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4062 HANDLE stdout_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4063 HANDLE stderr_save = INVALID_HANDLE_VALUE; |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4064 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4065 parent = GetCurrentProcess (); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4066 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4067 /* 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
|
4068 handles will be invalid when running as a gui program. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4069 DuplicateHandle (parent, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4070 GetStdHandle (STD_INPUT_HANDLE), |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4071 parent, |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4072 &stdin_save, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4073 0, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4074 FALSE, |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4075 DUPLICATE_SAME_ACCESS); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4076 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4077 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4078 GetStdHandle (STD_OUTPUT_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4079 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4080 &stdout_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4081 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4082 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4083 DUPLICATE_SAME_ACCESS); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4084 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4085 DuplicateHandle (parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4086 GetStdHandle (STD_ERROR_HANDLE), |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4087 parent, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4088 &stderr_save, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4089 0, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4090 FALSE, |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4091 DUPLICATE_SAME_ACCESS); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4092 |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4093 fclose (stdin); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4094 fclose (stdout); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4095 fclose (stderr); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4096 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4097 if (stdin_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4098 _open_osfhandle ((long) stdin_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4099 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4100 _open ("nul", O_TEXT | O_NOINHERIT | O_RDONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4101 _fdopen (0, "r"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4102 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4103 if (stdout_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4104 _open_osfhandle ((long) stdout_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4105 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4106 _open ("nul", O_TEXT | O_NOINHERIT | O_WRONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4107 _fdopen (1, "w"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4108 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4109 if (stderr_save != INVALID_HANDLE_VALUE) |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4110 _open_osfhandle ((long) stderr_save, O_TEXT); |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4111 else |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4112 _open ("nul", O_TEXT | O_NOINHERIT | O_WRONLY); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4113 _fdopen (2, "w"); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4114 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4115 |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4116 /* unfortunately, atexit depends on implementation of malloc */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4117 /* atexit (term_ntproc); */ |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4118 signal (SIGABRT, term_ntproc); |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4119 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4120 /* determine which drives are fixed, for GetCachedVolumeInformation */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4121 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4122 /* GetDriveType must have trailing backslash. */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4123 char drive[] = "A:\\"; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4124 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4125 /* Loop over all possible drive letters */ |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4126 while (*drive <= 'Z') |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4127 { |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4128 /* Record if this drive letter refers to a fixed drive. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4129 fixed_drives[DRIVE_INDEX (*drive)] = |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4130 (GetDriveType (drive) == DRIVE_FIXED); |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4131 |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4132 (*drive)++; |
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4133 } |
31106
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4134 |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4135 /* Reset the volume info cache. */ |
ad1ae9eb641a
(GetCachedVolumeInformation): Use xmalloc, xfree and xstrdup.
Andrew Innes <andrewi@gnu.org>
parents:
30060
diff
changeset
|
4136 volume_cache = NULL; |
19704
974a890c1d12
Include stddef.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18725
diff
changeset
|
4137 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48888
diff
changeset
|
4138 |
23395
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4139 /* Check to see if Emacs has been installed correctly. */ |
93d7c8a30147
(init_ntproc): Check for Windows init file.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23016
diff
changeset
|
4140 check_windows_init_file (); |
15141
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4141 } |
6565b268b12a
(nt_stat, nt_ctime): Functions deleted.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14912
diff
changeset
|
4142 |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4143 /* |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4144 shutdown_handler ensures that buffers' autosave files are |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4145 up to date when the user logs off, or the system shuts down. |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4146 */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4147 BOOL WINAPI shutdown_handler(DWORD type) |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4148 { |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4149 /* Ctrl-C and Ctrl-Break are already suppressed, so don't handle them. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4150 if (type == CTRL_CLOSE_EVENT /* User closes console window. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4151 || type == CTRL_LOGOFF_EVENT /* User logs off. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4152 || type == CTRL_SHUTDOWN_EVENT) /* User shutsdown. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4153 { |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4154 /* Shut down cleanly, making sure autosave files are up to date. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4155 shut_down_emacs (0, 0, Qnil); |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4156 } |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4157 |
74786
4f26e07fd85d
(_sys_wait_accept): Fix handle leak.
Kim F. Storm <storm@cua.dk>
parents:
72631
diff
changeset
|
4158 /* Allow other handlers to handle this signal. */ |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4159 return FALSE; |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4160 } |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4161 |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4162 /* |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4163 globals_of_w32 is used to initialize those global variables that |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4164 must always be initialized on startup even when the global variable |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4165 initialized is non zero (see the function main in emacs.c). |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4166 */ |
74947 | 4167 void |
4168 globals_of_w32 () | |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4169 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4170 g_b_init_is_windows_9x = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4171 g_b_init_open_process_token = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4172 g_b_init_get_token_information = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4173 g_b_init_lookup_account_sid = 0; |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4174 g_b_init_get_sid_identifier_authority = 0; |
72631
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4175 /* The following sets a handler for shutdown notifications for |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4176 console apps. This actually applies to Emacs in both console and |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4177 GUI modes, since we had to fool windows into thinking emacs is a |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4178 console application to get console mode to work. */ |
acfcb86a7b5e
(shutdown_handler): New function to exit cleanly on shutdown.
Jason Rumney <jasonr@gnu.org>
parents:
72286
diff
changeset
|
4179 SetConsoleCtrlHandler(shutdown_handler, TRUE); |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4180 } |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48561
diff
changeset
|
4181 |
78028
3a8b85706c0c
(_wsa_errlist): Fix typo in error message.
Juanma Barranquero <lekktu@gmail.com>
parents:
76098
diff
changeset
|
4182 /* end of w32.c */ |
52401 | 4183 |
4184 /* arch-tag: 90442dd3-37be-482b-b272-ac752e3049f1 | |
4185 (do not change this comment) */ |