Mercurial > hg > xemacs-beta
comparison netinstall/download.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 | ce0b3f2eff35 |
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 download all the files we need to | |
17 do the installation. */ | |
18 | |
19 #include <stdio.h> | |
20 #include <sys/types.h> | |
21 #include <sys/stat.h> | |
22 | |
23 #include "win32.h" | |
24 | |
25 #include "resource.h" | |
26 #include "msg.h" | |
27 #include "ini.h" | |
28 #include "dialog.h" | |
29 #include "concat.h" | |
30 #include "geturl.h" | |
31 #include "state.h" | |
32 #include "mkdir.h" | |
33 #include "log.h" | |
34 | |
35 #define pi (package[i].info[package[i].trust]) | |
36 | |
37 static int | |
38 download_one (char *name, int expected_size) | |
39 { | |
40 char *local = name; | |
41 | |
42 struct stat s; | |
43 if (stat (local, &s) >= 0) | |
44 if (s.st_size == expected_size) | |
45 return 0; | |
46 | |
47 mkdir_p (0, local); | |
48 | |
49 if (get_url_to_file (concat (MIRROR_SITE, "/", name, 0), | |
50 concat (local, ".tmp", 0), | |
51 expected_size)) | |
52 { | |
53 note (IDS_DOWNLOAD_FAILED, name); | |
54 return 1; | |
55 } | |
56 else | |
57 { | |
58 stat (concat (local, ".tmp", 0), &s); | |
59 if (s.st_size == expected_size) | |
60 { | |
61 log (0, "Downloaded %s", local); | |
62 rename (concat (local, ".tmp", 0), local); | |
63 } | |
64 else | |
65 { | |
66 log (0, "Download %s wrong size (%d actual vs %d expected)", | |
67 local, s.st_size, expected_size); | |
68 note (IDS_DOWNLOAD_SHORT, local, s.st_size, expected_size); | |
69 return 1; | |
70 } | |
71 } | |
72 | |
73 return 0; | |
74 } | |
75 | |
76 void | |
77 do_download (HINSTANCE h) | |
78 { | |
79 int i; | |
80 int errors = 0; | |
81 | |
82 for (i=0; i<npackages; i++) | |
83 if (package[i].action == ACTION_NEW || package[i].action == ACTION_UPGRADE) | |
84 { | |
85 int e = download_one (pi.install, pi.install_size); | |
86 if (package[i].srcaction == SRCACTION_YES && pi.source) | |
87 e += download_one (pi.source, pi.source_size); | |
88 errors += e; | |
89 if (e) | |
90 package[i].action = ACTION_ERROR; | |
91 } | |
92 | |
93 dismiss_url_status_dialog (); | |
94 | |
95 if (errors) | |
96 { | |
97 if (yesno (IDS_DOWNLOAD_INCOMPLETE) == IDYES) | |
98 { | |
99 next_dialog = IDD_SITE; | |
100 return; | |
101 } | |
102 } | |
103 | |
104 if (source == IDC_SOURCE_DOWNLOAD) | |
105 { | |
106 if (errors) | |
107 exit_msg = IDS_DOWNLOAD_INCOMPLETE; | |
108 else | |
109 exit_msg = IDS_DOWNLOAD_COMPLETE; | |
110 next_dialog = 0; | |
111 } | |
112 else | |
113 next_dialog = IDD_S_INSTALL; | |
114 } |