Mercurial > hg > xemacs-beta
annotate netinstall/uninstall.cc @ 4981:4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
-------------------- ChangeLog entries follow: --------------------
modules/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
* postgresql/postgresql.c (CHECK_LIVE_CONNECTION):
* postgresql/postgresql.c (Fpq_connectdb):
* postgresql/postgresql.c (Fpq_connect_start):
* postgresql/postgresql.c (Fpq_lo_import):
* postgresql/postgresql.c (Fpq_lo_export):
* ldap/eldap.c (Fldap_open):
* ldap/eldap.c (Fldap_search_basic):
* ldap/eldap.c (Fldap_add):
* ldap/eldap.c (Fldap_modify):
* ldap/eldap.c (Fldap_delete):
* canna/canna_api.c (Fcanna_initialize):
* canna/canna_api.c (Fcanna_store_yomi):
* canna/canna_api.c (Fcanna_parse):
* canna/canna_api.c (Fcanna_henkan_begin):
EXTERNAL_TO_C_STRING returns its argument instead of storing it
in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar
things happen to related macros. See entry in src/ChangeLog.
More Mule-izing of postgresql.c. Extract out common code
between `pq-connectdb' and `pq-connect-start'. Fix places
that signal an error string using a formatted string to instead
follow the standard and have a fixed reason followed by the
particular error message stored as one of the frobs.
src/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* console-msw.c (write_string_to_mswindows_debugging_output):
* console-msw.c (Fmswindows_message_box):
* console-x.c (x_perhaps_init_unseen_key_defaults):
* console.c:
* database.c (dbm_get):
* database.c (dbm_put):
* database.c (dbm_remove):
* database.c (berkdb_get):
* database.c (berkdb_put):
* database.c (berkdb_remove):
* database.c (Fopen_database):
* device-gtk.c (gtk_init_device):
* device-msw.c (msprinter_init_device_internal):
* device-msw.c (msprinter_default_printer):
* device-msw.c (msprinter_init_device):
* device-msw.c (sync_printer_with_devmode):
* device-msw.c (Fmsprinter_select_settings):
* device-x.c (sanity_check_geometry_resource):
* device-x.c (Dynarr_add_validified_lisp_string):
* device-x.c (x_init_device):
* device-x.c (Fx_put_resource):
* device-x.c (Fx_valid_keysym_name_p):
* device-x.c (Fx_set_font_path):
* dialog-msw.c (push_lisp_string_as_unicode):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-msw.c (handle_file_dialog_box):
* dialog-x.c (dbox_descriptor_to_widget_value):
* editfns.c (Fformat_time_string):
* editfns.c (Fencode_time):
* editfns.c (Fset_time_zone_rule):
* emacs.c (make_argc_argv):
* emacs.c (Fdump_emacs):
* emodules.c (emodules_load):
* eval.c:
* eval.c (maybe_signal_error_1):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (mswindows_wnd_proc):
* fileio.c (report_error_with_errno):
* fileio.c (Fsysnetunam):
* fileio.c (Fdo_auto_save):
* font-mgr.c (extract_fcapi_string):
* font-mgr.c (Ffc_config_app_font_add_file):
* font-mgr.c (Ffc_config_app_font_add_dir):
* font-mgr.c (Ffc_config_filename):
* frame-gtk.c (gtk_set_frame_text_value):
* frame-gtk.c (gtk_create_widgets):
* frame-msw.c (mswindows_init_frame_1):
* frame-msw.c (mswindows_set_title_from_ibyte):
* frame-msw.c (msprinter_init_frame_3):
* frame-x.c (x_set_frame_text_value):
* frame-x.c (x_set_frame_properties):
* frame-x.c (start_drag_internal_1):
* frame-x.c (x_cde_transfer_callback):
* frame-x.c (x_create_widgets):
* glyphs-eimage.c (my_jpeg_output_message):
* glyphs-eimage.c (jpeg_instantiate):
* glyphs-eimage.c (gif_instantiate):
* glyphs-eimage.c (png_instantiate):
* glyphs-eimage.c (tiff_instantiate):
* glyphs-gtk.c (xbm_instantiate_1):
* glyphs-gtk.c (gtk_xbm_instantiate):
* glyphs-gtk.c (gtk_xpm_instantiate):
* glyphs-gtk.c (gtk_xface_instantiate):
* glyphs-gtk.c (cursor_font_instantiate):
* glyphs-gtk.c (gtk_redisplay_widget):
* glyphs-gtk.c (gtk_widget_instantiate_1):
* glyphs-gtk.c (gtk_add_tab_item):
* glyphs-msw.c (mswindows_xpm_instantiate):
* glyphs-msw.c (bmp_instantiate):
* glyphs-msw.c (mswindows_resource_instantiate):
* glyphs-msw.c (xbm_instantiate_1):
* glyphs-msw.c (mswindows_xbm_instantiate):
* glyphs-msw.c (mswindows_xface_instantiate):
* glyphs-msw.c (mswindows_redisplay_widget):
* glyphs-msw.c (mswindows_widget_instantiate):
* glyphs-msw.c (add_tree_item):
* glyphs-msw.c (add_tab_item):
* glyphs-msw.c (mswindows_combo_box_instantiate):
* glyphs-msw.c (mswindows_widget_query_string_geometry):
* glyphs-x.c (x_locate_pixmap_file):
* glyphs-x.c (xbm_instantiate_1):
* glyphs-x.c (x_xbm_instantiate):
* glyphs-x.c (extract_xpm_color_names):
* glyphs-x.c (x_xpm_instantiate):
* glyphs-x.c (x_xface_instantiate):
* glyphs-x.c (autodetect_instantiate):
* glyphs-x.c (safe_XLoadFont):
* glyphs-x.c (cursor_font_instantiate):
* glyphs-x.c (x_redisplay_widget):
* glyphs-x.c (Fchange_subwindow_property):
* glyphs-x.c (x_widget_instantiate):
* glyphs-x.c (x_tab_control_redisplay):
* glyphs.c (pixmap_to_lisp_data):
* gui-x.c (menu_separator_style_and_to_external):
* gui-x.c (add_accel_and_to_external):
* gui-x.c (button_item_to_widget_value):
* hpplay.c (player_error_internal):
* hpplay.c (play_sound_file):
* hpplay.c (play_sound_data):
* intl.c (Fset_current_locale):
* lisp.h:
* menubar-gtk.c (gtk_xemacs_set_accel_keys):
* menubar-msw.c (populate_menu_add_item):
* menubar-msw.c (populate_or_checksum_helper):
* menubar-x.c (menu_item_descriptor_to_widget_value_1):
* nt.c (init_user_info):
* nt.c (get_long_basename):
* nt.c (nt_get_resource):
* nt.c (init_mswindows_environment):
* nt.c (get_cached_volume_information):
* nt.c (mswindows_readdir):
* nt.c (read_unc_volume):
* nt.c (mswindows_stat):
* nt.c (mswindows_getdcwd):
* nt.c (mswindows_executable_type):
* nt.c (Fmswindows_short_file_name):
* ntplay.c (nt_play_sound_file):
* objects-gtk.c:
* objects-gtk.c (gtk_valid_color_name_p):
* objects-gtk.c (gtk_initialize_font_instance):
* objects-gtk.c (gtk_font_list):
* objects-msw.c (font_enum_callback_2):
* objects-msw.c (parse_font_spec):
* objects-x.c (x_parse_nearest_color):
* objects-x.c (x_valid_color_name_p):
* objects-x.c (x_initialize_font_instance):
* objects-x.c (x_font_instance_truename):
* objects-x.c (x_font_list):
* objects-xlike-inc.c (XFUN):
* objects-xlike-inc.c (xft_find_charset_font):
* process-nt.c (mswindows_report_winsock_error):
* process-nt.c (nt_create_process):
* process-nt.c (get_internet_address):
* process-nt.c (nt_open_network_stream):
* process-unix.c:
* process-unix.c (allocate_pty):
* process-unix.c (get_internet_address):
* process-unix.c (unix_canonicalize_host_name):
* process-unix.c (unix_open_network_stream):
* realpath.c:
* select-common.h (lisp_data_to_selection_data):
* select-gtk.c (symbol_to_gtk_atom):
* select-gtk.c (atom_to_symbol):
* select-msw.c (symbol_to_ms_cf):
* select-msw.c (mswindows_register_selection_data_type):
* select-x.c (symbol_to_x_atom):
* select-x.c (x_atom_to_symbol):
* select-x.c (hack_motif_clipboard_selection):
* select-x.c (Fx_store_cutbuffer_internal):
* sound.c (Fplay_sound_file):
* sound.c (Fplay_sound):
* sound.h (sound_perror):
* sysdep.c:
* sysdep.c (qxe_allocating_getcwd):
* sysdep.c (qxe_execve):
* sysdep.c (copy_in_passwd):
* sysdep.c (qxe_getpwnam):
* sysdep.c (qxe_ctime):
* sysdll.c (dll_open):
* sysdll.c (dll_function):
* sysdll.c (dll_variable):
* sysdll.c (search_linked_libs):
* sysdll.c (dll_error):
* sysfile.h:
* sysfile.h (PATHNAME_CONVERT_OUT_TSTR):
* sysfile.h (PATHNAME_CONVERT_OUT_UTF_8):
* sysfile.h (PATHNAME_CONVERT_OUT):
* sysfile.h (LISP_PATHNAME_CONVERT_OUT):
* syswindows.h (ITEXT_TO_TSTR):
* syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR):
* syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT):
* syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN):
* syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR):
* text.h:
* text.h (eicpy_ext_len):
* text.h (enum new_dfc_src_type):
* text.h (EXTERNAL_TO_ITEXT):
* text.h (GET_STRERROR):
* tooltalk.c (check_status):
* tooltalk.c (Fadd_tooltalk_message_arg):
* tooltalk.c (Fadd_tooltalk_pattern_attribute):
* tooltalk.c (Fadd_tooltalk_pattern_arg):
* win32.c (tstr_to_local_file_format):
* win32.c (mswindows_lisp_error_1):
* win32.c (mswindows_report_process_error):
* win32.c (Fmswindows_shell_execute):
* win32.c (mswindows_read_link_1):
Changes involving external/internal format conversion,
mostly code cleanup and renaming.
1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL
that stored its result in a parameter. The new version of
LISP_STRING_TO_EXTERNAL returns its result through the
return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL.
Use the new-style macros throughout the code.
2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL,
in keeping with overall naming rationalization involving
Itext and related types.
Macros involved in previous two:
EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT
EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC
SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT
SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC
C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL
C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC
LISP_STRING_TO_EXTERNAL
LISP_STRING_TO_EXTERNAL_MALLOC
LISP_STRING_TO_TSTR
C_STRING_TO_TSTR -> ITEXT_TO_TSTR
TSTR_TO_C_STRING -> TSTR_TO_ITEXT
The following four still return their values through parameters,
since they have more than one value to return:
C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL
LISP_STRING_TO_SIZED_EXTERNAL
C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC
LISP_STRING_TO_SIZED_EXTERNAL_MALLOC
Sometimes additional casts had to be inserted, since the old
macros played strange games and completely defeated the type system
of the store params.
3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT
occurred with calls to one of the convenience macros listed above,
or to make_extstring().
4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway)
and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT.
4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something
like LISP_STRING_TO_EXTERNAL(..., Qfile_name).
5. Eliminate some temporary variables that are no longer necessary
now that we return a value rather than storing it into a variable.
6. Some Mule-izing in database.c.
7. Error functions:
-- A bit of code cleanup in maybe_signal_error_1.
-- Eliminate report_file_type_error; it's just an alias for
signal_error_2 with params in a different order.
-- Fix some places in the hostname-handling code that directly
inserted externally-retrieved error strings into the
supposed ASCII "reason" param instead of doing the right thing
and sticking text descriptive of what was going on in "reason"
and putting the external message in a frob.
8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one
or two other places.
9. Some code cleanup in copy_in_passwd() in sysdep.c.
10. Fix a real bug due to accidental variable shadowing in
tstr_to_local_file_format() in win32.c.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Fri, 05 Feb 2010 11:02:24 -0600 |
parents | a307f9a2021d |
children |
rev | line source |
---|---|
657 | 1 /* |
2 * Copyright (c) 2000, Red Hat, Inc. | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * A copy of the GNU General Public License can be found at | |
10 * http://www.gnu.org/ | |
11 * | |
12 * Written by DJ Delorie <dj@cygnus.com> | |
13 * | |
14 */ | |
15 | |
16 /* The purpose of this file is to intall all the packages selected in | |
17 the install list (in ini.h). Note that we use a separate thread to | |
18 maintain the progress dialog, so we avoid the complexity of | |
19 handling two tasks in one thread. We also create or update all the | |
20 files in /etc/setup and create the mount points. */ | |
21 | |
22 #include <io.h> | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <ctype.h> | |
26 #ifndef WIN32_NATIVE | |
27 #include <unistd.h> | |
28 #endif | |
29 #include <sys/types.h> | |
30 #include <sys/stat.h> | |
31 #include <errno.h> | |
32 #include <zlib.h> | |
33 | |
34 #include "win32.h" | |
35 #include "commctrl.h" | |
36 | |
37 #include "resource.h" | |
38 #include "ini.h" | |
39 #include "dialog.h" | |
40 #include "concat.h" | |
41 #include "geturl.h" | |
42 #include "mkdir.h" | |
43 #include "state.h" | |
44 #include "tar.h" | |
45 #include "diskfull.h" | |
46 #include "msg.h" | |
47 #include "regedit.h" | |
48 #include "reginfo.h" | |
49 #include "log.h" | |
50 #include "hash.h" | |
707 | 51 #include "desktop.h" |
657 | 52 |
53 #include "port.h" | |
54 | |
55 #define XM_DONE (WM_USER + 101) | |
56 | |
57 static HWND unins_dialog = 0; | |
58 static HWND unins_action = 0; | |
59 static HWND unins_pkgname = 0; | |
60 static HWND unins_filename = 0; | |
61 static HWND unins_pprogress = 0; | |
62 static HWND unins_iprogress = 0; | |
63 static HWND unins_diskfull = 0; | |
64 static HANDLE init_event; | |
65 | |
66 static int package_bytes = 0; | |
67 static int uninstall_started = 0; | |
68 | |
69 extern char * map_filename (char *fn, int type); | |
70 static void start_uninstall (); | |
71 | |
72 char * | |
73 base (char *s); | |
74 | |
75 static BOOL | |
76 dialog_cmd (HWND h, int id, HWND hwndctl, UINT code) | |
77 { | |
78 switch (id) | |
79 { | |
80 case IDCANCEL: | |
81 exit_setup (1); | |
82 case IDOK: | |
83 if (uninstall_started == 0) { | |
84 uninstall_started = 1; | |
85 start_uninstall(); | |
86 } | |
87 else | |
88 exit_setup(0); | |
89 break; | |
90 } | |
91 return FALSE; | |
92 } | |
93 | |
94 static BOOL CALLBACK | |
95 dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam) | |
96 { | |
97 switch (message) | |
98 { | |
99 case WM_INITDIALOG: | |
100 unins_dialog = h; | |
101 unins_action = GetDlgItem (h, IDC_UNINS_ACTION); | |
102 unins_pkgname = GetDlgItem (h, IDC_UNINS_PKG); | |
103 unins_filename = GetDlgItem (h, IDC_UNINS_FILE); | |
104 unins_pprogress = GetDlgItem (h, IDC_UNINS_PPROGRESS); | |
105 unins_iprogress = GetDlgItem (h, IDC_UNINS_IPROGRESS); | |
106 unins_diskfull = GetDlgItem (h, IDC_UNINS_DISKFULL); | |
107 SendMessage (unins_pprogress, PBM_SETRANGE, 0, MAKELPARAM (0, 100)); | |
108 SendMessage (unins_iprogress, PBM_SETRANGE, 0, MAKELPARAM (0, 100)); | |
109 SendMessage (unins_diskfull, PBM_SETRANGE, 0, MAKELPARAM (0, 100)); | |
110 SetWindowText (unins_pkgname, ""); | |
111 SetWindowText (unins_filename, ""); | |
112 SendMessage (unins_pprogress, PBM_SETPOS, (WPARAM) 0, 0); | |
113 SendMessage (unins_iprogress, PBM_SETPOS, (WPARAM) 0, 0); | |
114 SendMessage (unins_diskfull, PBM_SETPOS, (WPARAM) 0, 0); | |
115 return FALSE; | |
116 | |
117 case XM_DONE: | |
118 { | |
119 SetWindowText (GetDlgItem (h, IDOK), "Ok"); | |
120 LONG style = GetWindowLong (GetDlgItem (h, IDCANCEL), | |
121 GWL_STYLE); | |
122 SetWindowLong (GetDlgItem (h, IDCANCEL), | |
123 GWL_STYLE, style & WS_DISABLED); | |
124 } | |
125 return FALSE; | |
126 | |
127 case WM_COMMAND: | |
128 return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd); | |
129 } | |
130 return DefWindowProc (h, message, wParam, lParam); | |
131 } | |
132 | |
133 static DWORD WINAPI uninstall_all (void *); | |
134 | |
135 static void | |
136 start_uninstall () | |
137 { | |
138 DWORD tid; | |
139 HANDLE thread; | |
140 init_event = CreateEvent (0, 0, 0, 0); | |
141 thread = CreateThread (0, 0, uninstall_all, 0, 0, &tid); | |
142 WaitForSingleObject (init_event, 10000); | |
143 CloseHandle (init_event); | |
144 } | |
145 | |
146 static void | |
147 progress (int bytes, int num) | |
148 { | |
149 int perc; | |
150 log (0, "%d bytes", bytes); | |
151 if (package_bytes > 100) | |
152 { | |
153 perc = (bytes * 100) / package_bytes; | |
154 SendMessage (unins_pprogress, PBM_SETPOS, (WPARAM) perc, 0); | |
155 } | |
156 | |
157 if (npackages > 0) | |
158 { | |
159 perc = (num * 100) / npackages; | |
160 SendMessage (unins_iprogress, PBM_SETPOS, (WPARAM) perc, 0); | |
161 } | |
162 } | |
163 | |
164 static int num_installs, num_uninstalls; | |
165 | |
166 static void | |
167 uninstall_one (char *name, int type, int num) | |
168 { | |
169 hash dirs; | |
170 char line[_MAX_PATH]; | |
171 char* fname = (type == TY_GENERIC ? | |
172 concat (root_dir, XEMACS_PACKAGE_DIR, "pkginfo/MANIFEST.", | |
173 name, 0) : | |
174 concat (root_dir, XEMACS_SETUP_DIR, "MANIFEST.", name, 0)); | |
175 | |
176 FILE* lst = fopen (fname, "rb"); | |
177 int pos = 0; | |
178 | |
179 if (lst) | |
180 { | |
181 fseek (lst, 0, SEEK_END); | |
182 package_bytes = ftell (lst); | |
183 fseek (lst, 0, SEEK_SET); | |
184 | |
185 SetWindowText (unins_pkgname, name); | |
186 SetWindowText (unins_action, "Uninstalling..."); | |
187 log (0, "uninstalling %s", name); | |
188 | |
189 while (fgets (line, sizeof (line), lst)) | |
190 { | |
191 progress (pos, num); | |
192 pos += strlen(line); | |
193 if (line[strlen(line)-1] == '\n') | |
194 line[strlen(line)-1] = 0; | |
195 | |
196 dirs.add_subdirs (line); | |
197 | |
198 char *d = map_filename (line, type); | |
199 DWORD dw = GetFileAttributes (d); | |
200 if (dw != 0xffffffff && !(dw & FILE_ATTRIBUTE_DIRECTORY)) | |
201 { | |
202 log (LOG_BABBLE, "unlink %s", d); | |
203 DeleteFile (d); | |
204 } | |
205 } | |
206 fclose (lst); | |
207 remove (fname); | |
208 | |
209 dirs.reverse_sort (); | |
210 char *subdir = 0; | |
211 while ((subdir = dirs.enumerate (subdir)) != 0) | |
212 { | |
213 char *d = map_filename (subdir, type); | |
214 if (RemoveDirectory (d)) | |
215 log (LOG_BABBLE, "rmdir %s", d); | |
216 } | |
217 num_uninstalls ++; | |
218 } | |
219 } | |
220 | |
221 void | |
222 do_uninstall (HINSTANCE h) | |
223 { | |
224 num_installs = 0, num_uninstalls = 0; | |
225 | |
226 next_dialog = 0; // we're done after this | |
227 | |
228 if (!root_dir) | |
229 fatal ("no installation found"); | |
230 | |
231 int rv = DialogBox (h, MAKEINTRESOURCE (IDD_UNINSTALL), 0, dialog_proc); | |
232 if (rv == -1) | |
233 fatal (IDS_DIALOG_FAILED); | |
234 } | |
235 | |
236 static void | |
237 read_installed_db () | |
238 { | |
239 if (!root_dir) | |
240 return; | |
241 | |
242 char line[1000], pkg[1000], inst[1000], src[1000]; | |
243 int instsz, srcsz; | |
244 | |
245 FILE *db = fopen (concat (root_dir, XEMACS_SETUP_DIR, "installed.db", 0), "rt"); | |
246 if (!db) | |
247 return; | |
248 | |
249 while (fgets (line, 1000, db)) | |
250 { | |
251 src[0] = 0; | |
252 srcsz = 0; | |
253 sscanf (line, "%s %s %d %s %d", pkg, inst, &instsz, src, &srcsz); | |
254 | |
255 log (0, "read %s", pkg); | |
256 Package* np = new_package(strdup(pkg)); | |
257 pinfo(*np).install = inst; | |
258 pinfo(*np).install_size = instsz; | |
259 // pick up versoin | |
260 char *v, *d; | |
261 for (v=base (inst); *v; v++) | |
262 if (*v == '-' && isdigit(v[1])) | |
263 { | |
264 v++; | |
265 break; | |
266 } | |
267 if (!v) | |
268 v = inst; | |
269 for (d=v; *d; d++) | |
270 if (strncmp (d, ".tar", 4) == 0 | |
271 || strncmp (d, "-pkg", 4) == 0) | |
272 { | |
273 *d = 0; | |
274 break; | |
275 } | |
276 if (v[0]) | |
277 pinfo(*np).version = strdup (v); | |
278 else | |
279 pinfo(*np).version = "0"; | |
280 // Crude but effective | |
281 if (pkg != 0) | |
282 if (strncmp ("xemacs-i686", pkg, 11) == 0 | |
283 || (strncmp ("xemacs-i586", pkg, 11) == 0)) | |
666 | 284 { |
285 np->type = install_type; | |
286 xemacs_package = np; | |
287 } | |
657 | 288 } |
289 fclose (db); | |
290 } | |
291 | |
292 static DWORD WINAPI | |
293 uninstall_all (void *) | |
294 { | |
295 int i; | |
296 SetEvent (init_event); | |
297 | |
298 int df = diskfull (root_dir); | |
299 SendMessage (unins_diskfull, PBM_SETPOS, (WPARAM) df, 0); | |
300 | |
301 read_installed_db(); | |
302 | |
303 log (0, "There are %d packages\n", npackages); | |
304 for (i=0; i<npackages; i++) | |
305 { | |
306 log (0, "uninstalling %s\n", package[i].name); | |
307 uninstall_one (package[i].name, package[i].type, i); | |
308 } | |
309 | |
310 PostMessage (unins_dialog, XM_DONE, 0, 0); | |
311 | |
666 | 312 remove (concat (root_dir, XEMACS_SETUP_DIR, "installed.db.old", 0)); |
313 remove (concat (root_dir, XEMACS_SETUP_DIR, "installed.db", 0)); | |
657 | 314 |
666 | 315 remove_desktop_setup(); |
657 | 316 remove_xemacs_root(); |
317 remove_uninstall_path(); | |
318 | |
319 if (num_installs == 0) | |
320 { | |
321 // exit_msg = IDS_UNINSTALL_COMPLETE; | |
322 return FALSE; | |
323 } | |
324 | |
325 return FALSE; | |
326 } |