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 }