comparison netinstall/ini.cc @ 448:3078fd1074e8 r21-2-39

Import from CVS: tag r21-2-39
author cvs
date Mon, 13 Aug 2007 11:38:25 +0200
parents
children
comparison
equal deleted inserted replaced
447:4fc5f13f3bd3 448:3078fd1074e8
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 get and parse the setup.ini file
17 from the mirror site. A few support routines for the bison and
18 flex parsers are provided also. We check to see if this setup.ini
19 is older than the one we used last time, and if so, warn the user. */
20
21 #include "win32.h"
22
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <stdarg.h>
26
27 #include "ini.h"
28 #include "resource.h"
29 #include "concat.h"
30 #include "state.h"
31 #include "geturl.h"
32 #include "dialog.h"
33 #include "msg.h"
34 #include "mkdir.h"
35 #include "log.h"
36 #include "reginfo.h"
37 #include "version.h"
38
39 unsigned int setup_timestamp = 0;
40 char *setup_version = 0;
41
42 extern "C" int yyparse ();
43 /*extern int yydebug;*/
44
45 static char *error_buf = 0;
46 static int error_count = 0;
47
48 void
49 do_ini (HINSTANCE h)
50 {
51 char *ini_file = get_url_to_string (concat (MIRROR_SITE, "/setup.ini", 0));
52 dismiss_url_status_dialog ();
53
54 if (!ini_file)
55 {
56 note (IDS_SETUPINI_MISSING, MIRROR_SITE);
57 next_dialog = IDD_SITE;
58 return;
59 }
60
61 package = 0;
62 npackages = 0;
63 setup_timestamp = 0;
64 setup_version = 0;
65
66 ini_init (ini_file);
67
68 setup_timestamp = 0;
69 /*yydebug = 1;*/
70
71 if (yyparse () || error_count > 0)
72 {
73 if (error_count == 1)
74 MessageBox (0, error_buf, "Parse Error", 0);
75 else
76 MessageBox (0, error_buf, "Parse Errors", 0);
77 }
78 else
79 {
80 /* save known-good setup.ini locally */
81 FILE *inif = fopen ("setup.ini", "wb");
82 if (inif)
83 {
84 fwrite (ini_file, 1, strlen (ini_file), inif);
85 fclose (inif);
86 }
87 }
88
89 if (root_dir)
90 {
91 mkdir_p (1, concat (root_dir, XEMACS_SETUP_DIR, 0));
92
93 unsigned int old_timestamp = 0;
94 FILE *ots = fopen (concat (root_dir, XEMACS_SETUP_DIR, "timestamp", 0), "rt");
95 if (ots)
96 {
97 fscanf (ots, "%u", &old_timestamp);
98 fclose (ots);
99 if (old_timestamp && setup_timestamp
100 && (old_timestamp > setup_timestamp))
101 {
102 int yn = yesno (IDS_OLD_SETUPINI);
103 if (yn == IDNO)
104 exit_setup (1);
105 }
106 }
107 if (setup_timestamp)
108 {
109 FILE *nts = fopen (concat (root_dir, XEMACS_SETUP_DIR, "timestamp", 0), "wt");
110 if (nts)
111 {
112 fprintf (nts, "%u", setup_timestamp);
113 fclose (nts);
114 }
115 }
116 }
117
118 msg ("setup_version is %s, our_version is %s", setup_version? setup_version : "(null)", version);
119 if (setup_version)
120 {
121 char *ini_version = canonicalize_version (setup_version);
122 char *our_version = canonicalize_version (version);
123 if (strcmp (our_version, ini_version) < 0)
124 note (IDS_OLD_SETUP_VERSION, version, setup_version);
125 }
126
127 next_dialog = IDD_CHOOSE;
128 }
129
130 extern "C" int yylineno;
131
132 extern "C" int CDECL yyerror (char *s, ...)
133 {
134 char buf[1000];
135 int len;
136 sprintf (buf, "setup.ini line %d: ", yylineno);
137 va_list args;
138 va_start (args, s);
139 vsprintf (buf + strlen (buf), s, args);
140 OutputDebugString (buf);
141 if (error_buf)
142 {
143 strcat (error_buf, "\n");
144 len = strlen (error_buf) + strlen (buf) + 5;
145 error_buf = (char *) realloc (error_buf, len);
146 strcat (error_buf, buf);
147 }
148 else
149 {
150 len = strlen (buf) + 5;
151 error_buf = (char *) malloc (len);
152 strcpy (error_buf, buf);
153 }
154 error_count++;
155 return 0;
156 }
157
158 extern "C" int CDECL fprintf (FILE *f, const char *s, ...);
159
160 static char stderrbuf[1000];
161
162 int CDECL
163 fprintf (FILE *f, const char *fmt, ...)
164 {
165 char buf[1000];
166 int rv;
167 va_list args;
168 va_start (args, fmt);
169 if (f == stderr)
170 {
171 rv = vsprintf (buf, fmt, args);
172 strcat (stderrbuf, buf);
173 if (char *nl = strchr (stderrbuf, '\n'))
174 {
175 *nl = 0;
176 /*OutputDebugString (stderrbuf);*/
177 MessageBox (0, buf, "XEmacs Setup", 0);
178 stderrbuf[0] = 0;
179 }
180
181 }
182 else
183 {
184 rv = vfprintf (f, fmt, args);
185 }
186 return rv;
187 }