annotate netinstall/root.cc @ 4900:0eccfd4850d6

Add tests for the regexp-ranges-treat-control-1-chars badly bug. 2010-01-30 Aidan Kehoe <kehoea@parhasard.net> * automated/regexp-tests.el: Make sure that control-1 characters are no longer treated as second-class citizens in regexp ranges, as in http://mid.gmane.org/18829.34118.709782.704574@parhasard.net .
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 30 Jan 2010 19:23:43 +0000
parents ce0b3f2eff35
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
1 /*
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
2 * Copyright (c) 2000, Red Hat, Inc.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
3 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
7 * (at your option) any later version.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
8 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
9 * A copy of the GNU General Public License can be found at
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
10 * http://www.gnu.org/
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
11 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
12 * Written by DJ Delorie <dj@cygnus.com>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
13 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
14 */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
15
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
16 /* The purpose of this file is to ask the user where they want the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
17 root of the installation to be, and to ask whether the user prefers
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
18 text or binary mounts. */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
19
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
20 #include "win32.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
21 #include <shlobj.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
22 #include <stdio.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
23 #include <stdlib.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
24 #include <ctype.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
25
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
26 #include "dialog.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
27 #include "resource.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
28 #include "state.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
29 #include "msg.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
30 #include "regedit.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
31 #include "reginfo.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
32 #include "concat.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
33 #include "log.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
34
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
35 static int rb[] = { IDC_INSTALL_CYGWIN, IDC_INSTALL_NATIVE, 0 };
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
36 static int su[] = { IDC_ROOT_SYSTEM, IDC_ROOT_USER, 0 };
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
37
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
38 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
39 check_if_enable_next (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
40 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
41 EnableWindow (GetDlgItem (h, IDOK), install_type && root_dir && root_scope);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
42 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
43
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
44 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
45 load_dialog (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
46 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
47 rbset (h, rb, install_type);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
48 rbset (h, su, root_scope);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
49 eset (h, IDC_ROOT_DIR, root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
50 check_if_enable_next (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
51 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
52
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
53 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
54 save_dialog (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
55 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
56 install_type = rbget (h, rb);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
57 root_scope = rbget (h, su);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
58 char* new_root_dir = eget (h, IDC_ROOT_DIR, root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
59
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
60 if (!root_dir || strcmp (new_root_dir, root_dir) != 0)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
61 root_dir_default = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
62
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
63 root_dir = new_root_dir;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
64 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
65
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
66 /*
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
67 * is_admin () determines whether or not the current user is a member of the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
68 * Administrators group. On Windows 9X, the current user is considered an
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
69 * Administrator by definition.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
70 */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
71
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
72 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
73 is_admin ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
74 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
75 // Windows 9X users are considered Administrators by definition
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
76 OSVERSIONINFO verinfo;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
77 verinfo.dwOSVersionInfoSize = sizeof (verinfo);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
78 GetVersionEx (&verinfo);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
79 if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
80 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
81
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
82 // Get the process token for the current process
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
83 HANDLE token;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
84 BOOL status = OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &token);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
85 if (!status)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
86 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
87
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
88 // Get the group token information
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
89 UCHAR token_info[1024];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
90 PTOKEN_GROUPS groups = (PTOKEN_GROUPS) token_info;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
91 DWORD token_info_len = sizeof (token_info);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
92 status = GetTokenInformation (token, TokenGroups, token_info, token_info_len, &token_info_len);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
93 CloseHandle(token);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
94 if (!status)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
95 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
96
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
97 // Create the Administrators group SID
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
98 PSID admin_sid;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
99 SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
100 status = AllocateAndInitializeSid (&authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &admin_sid);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
101 if (!status)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
102 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
103
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
104 // Check to see if the user is a member of the Administrators group
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
105 status = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
106 for (UINT i=0; i<groups->GroupCount; i++) {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
107 if (EqualSid(groups->Groups[i].Sid, admin_sid)) {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
108 status = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
109 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
110 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
111 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
112
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
113 // Destroy the Administrators group SID
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
114 FreeSid (admin_sid);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
115
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
116 // Return whether or not the user is a member of the Administrators group
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
117 return status;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
118 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
119
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
120 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
121 change_default_root (int id)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
122 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
123 int issystem;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
124 char* cygroot = find_cygwin_root (&issystem);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
125 if (id == IDC_INSTALL_CYGWIN && cygroot)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
126 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
127 root_dir = concat (cygroot, XEMACS_CYGWIN_DEFAULT_ROOT, 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
128 install_type = IDC_INSTALL_CYGWIN;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
129 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
130 else if (id == IDC_INSTALL_NATIVE)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
131 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
132 char windir[_MAX_PATH];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
133 GetWindowsDirectory (windir, sizeof (windir));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
134 windir[2] = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
135 root_dir = concat (windir, XEMACS_DEFAULT_ROOT, 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
136 install_type = IDC_INSTALL_NATIVE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
137 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
138 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
139
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
140 static int CALLBACK
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
141 browse_cb (HWND h, UINT m, LPARAM lp, LPARAM data)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
142 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
143 switch (m)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
144 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
145 case BFFM_INITIALIZED:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
146 if (root_dir)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
147 SendMessage (h, BFFM_SETSELECTION, TRUE, (LPARAM)root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
148 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
149 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
150 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
151 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
152
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
153 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
154 browse (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
155 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
156 BROWSEINFO bi;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
157 CHAR name[MAX_PATH];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
158 LPITEMIDLIST pidl;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
159 memset (&bi, 0, sizeof (bi));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
160 bi.hwndOwner = h;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
161 bi.pszDisplayName = name;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
162 bi.lpszTitle = "Select an installation root directory";
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
163 bi.ulFlags = BIF_RETURNONLYFSDIRS;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
164 bi.lpfn = browse_cb;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
165 pidl = SHBrowseForFolder (&bi);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
166 if (pidl)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
167 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
168 if (SHGetPathFromIDList (pidl, name))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
169 eset (h, IDC_ROOT_DIR, name);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
170 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
171 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
172
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
173 #define isslash(c) ((c) == '\\' || (c) == '/')
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
174
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
175 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
176 directory_is_absolute ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
177 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
178 if (isalpha (root_dir[0])
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
179 && root_dir[1] == ':'
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
180 && (root_dir[2] == '\\' || root_dir[2] == '/'))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
181 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
182 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
183 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
184
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
185 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
186 directory_is_rootdir ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
187 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
188 char *c;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
189 for (c = root_dir; *c; c++)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
190 if (isslash (c[0]) && c[1] && !isslash (c[1]))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
191 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
192 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
193 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
194
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
195 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
196 cygwin_without_cygwin ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
197 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
198 int issystem;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
199 if (install_type == IDC_INSTALL_CYGWIN
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
200 && !find_cygwin_root (&issystem))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
201 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
202 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
203 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
204
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
205 static BOOL
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
206 dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
207 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
208 switch (id)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
209 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
210
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
211 case IDC_ROOT_DIR:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
212 case IDC_ROOT_SYSTEM:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
213 case IDC_ROOT_USER:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
214 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
215 check_if_enable_next (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
216 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
217
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
218 case IDC_INSTALL_NATIVE:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
219 case IDC_INSTALL_CYGWIN:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
220 if (root_dir_default)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
221 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
222 change_default_root (id);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
223 eset (h, IDC_ROOT_DIR, root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
224 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
225 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
226 check_if_enable_next (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
227 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
228
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
229 case IDC_ROOT_BROWSE:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
230 browse (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
231 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
232
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
233 case IDOK:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
234 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
235
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
236 if (! directory_is_absolute ())
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
237 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
238 note (IDS_ROOT_ABSOLUTE);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
239 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
240 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
241
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
242 if (directory_is_rootdir ())
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
243 if (IDNO == yesno (IDS_ROOT_SLASH))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
244 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
245
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
246 if (cygwin_without_cygwin ())
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
247 if (IDNO == yesno (IDS_ROOT_NOCYGWIN))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
248 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
249
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 448
diff changeset
250 create_xemacs_root (backslash (root_dir),
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
251 root_scope == IDC_ROOT_SYSTEM ? 1 : 0,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
252 install_type == IDC_INSTALL_NATIVE ? 1 : 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
253
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
254 switch (source)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
255 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
256 case IDC_SOURCE_NETINST:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
257 NEXT (IDD_NET);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
258 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
259 case IDC_SOURCE_CWD:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
260 NEXT (IDD_S_FROM_CWD);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
261 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
262 default:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
263 msg ("source is default? %d\n", source);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
264 NEXT (0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
265 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
266 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
267
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
268 case IDC_BACK:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
269 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
270 NEXT (IDD_LOCAL_DIR);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
271 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
272
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
273 case IDCANCEL:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
274 NEXT (0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
275 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
276 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
277 return FALSE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
278 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
279
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
280 static BOOL CALLBACK
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
281 dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
282 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
283 switch (message)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
284 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
285 case WM_INITDIALOG:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
286 load_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
287 return FALSE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
288 case WM_COMMAND:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
289 return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
290 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
291 return FALSE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
292 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
293
657
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
294 static void
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
295 set_default_root ()
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
296 {
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
297 change_default_root (IDC_INSTALL_NATIVE);
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
298 root_scope = (is_admin()) ? IDC_ROOT_SYSTEM : IDC_ROOT_USER;
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
299 root_dir_default = 1;
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
300 }
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
301
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
302 void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
303 do_root (HINSTANCE h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
304 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
305 int rv = 0;
657
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
306 // init will have read a previous root
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
307 if (!root_dir)
ce0b3f2eff35 [xemacs-hg @ 2001-09-09 04:37:41 by andyp]
andyp
parents: 452
diff changeset
308 set_default_root ();
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
309
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
310 rv = DialogBox (h, MAKEINTRESOURCE (IDD_ROOT), 0, dialog_proc);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
311 if (rv == -1)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
312 fatal (IDS_DIALOG_FAILED);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
313
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
314 log (0, "root: %s %s %s", root_dir,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
315 (install_type == IDC_INSTALL_NATIVE) ? "native" : "cygwin",
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
316 (root_scope == IDC_ROOT_USER) ? "user" : "system");
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
317 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
318