| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 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 |
static int |
|---|
| 36 |
download_one (char *name, int expected_size) |
|---|
| 37 |
{ |
|---|
| 38 |
char *local = name; |
|---|
| 39 |
|
|---|
| 40 |
struct stat s; |
|---|
| 41 |
if (stat (local, &s) >= 0) |
|---|
| 42 |
if (s.st_size == expected_size) |
|---|
| 43 |
return 0; |
|---|
| 44 |
|
|---|
| 45 |
mkdir_p (0, local); |
|---|
| 46 |
|
|---|
| 47 |
if (get_url_to_file (concat (MIRROR_SITE, "/", name, 0), |
|---|
| 48 |
concat (local, ".tmp", 0), |
|---|
| 49 |
expected_size)) |
|---|
| 50 |
{ |
|---|
| 51 |
note (IDS_DOWNLOAD_FAILED, name); |
|---|
| 52 |
return 1; |
|---|
| 53 |
} |
|---|
| 54 |
else |
|---|
| 55 |
{ |
|---|
| 56 |
stat (concat (local, ".tmp", 0), &s); |
|---|
| 57 |
if (s.st_size == expected_size) |
|---|
| 58 |
{ |
|---|
| 59 |
log (0, "Downloaded %s", local); |
|---|
| 60 |
rename (concat (local, ".tmp", 0), local); |
|---|
| 61 |
} |
|---|
| 62 |
else |
|---|
| 63 |
{ |
|---|
| 64 |
log (0, "Download %s wrong size (%d actual vs %d expected)", |
|---|
| 65 |
local, s.st_size, expected_size); |
|---|
| 66 |
note (IDS_DOWNLOAD_SHORT, local, s.st_size, expected_size); |
|---|
| 67 |
return 1; |
|---|
| 68 |
} |
|---|
| 69 |
} |
|---|
| 70 |
|
|---|
| 71 |
return 0; |
|---|
| 72 |
} |
|---|
| 73 |
|
|---|
| 74 |
void |
|---|
| 75 |
do_download (HINSTANCE h) |
|---|
| 76 |
{ |
|---|
| 77 |
int i; |
|---|
| 78 |
int errors = 0; |
|---|
| 79 |
|
|---|
| 80 |
for (i=0; i<npackages; i++) |
|---|
| 81 |
if (package[i].action == ACTION_NEW || package[i].action == ACTION_UPGRADE) |
|---|
| 82 |
{ |
|---|
| 83 |
int e = download_one (pi.install, pi.install_size); |
|---|
| 84 |
if (package[i].srcaction == SRCACTION_YES && pi.source) |
|---|
| 85 |
e += download_one (pi.source, pi.source_size); |
|---|
| 86 |
errors += e; |
|---|
| 87 |
if (e) |
|---|
| 88 |
package[i].action = ACTION_ERROR; |
|---|
| 89 |
} |
|---|
| 90 |
|
|---|
| 91 |
dismiss_url_status_dialog (); |
|---|
| 92 |
|
|---|
| 93 |
if (errors) |
|---|
| 94 |
{ |
|---|
| 95 |
if (yesno (IDS_DOWNLOAD_INCOMPLETE) == IDYES) |
|---|
| 96 |
{ |
|---|
| 97 |
next_dialog = IDD_SITE; |
|---|
| 98 |
return; |
|---|
| 99 |
} |
|---|
| 100 |
} |
|---|
| 101 |
|
|---|
| 102 |
if (source == IDC_SOURCE_DOWNLOAD) |
|---|
| 103 |
{ |
|---|
| 104 |
if (errors) |
|---|
| 105 |
exit_msg = IDS_DOWNLOAD_INCOMPLETE; |
|---|
| 106 |
else |
|---|
| 107 |
exit_msg = IDS_DOWNLOAD_COMPLETE; |
|---|
| 108 |
next_dialog = 0; |
|---|
| 109 |
} |
|---|
| 110 |
else |
|---|
| 111 |
next_dialog = IDD_S_INSTALL; |
|---|
| 112 |
} |
|---|