aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/win_updater/updater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/win_updater/updater.cpp')
-rw-r--r--linden/indra/win_updater/updater.cpp46
1 files changed, 20 insertions, 26 deletions
diff --git a/linden/indra/win_updater/updater.cpp b/linden/indra/win_updater/updater.cpp
index e41ab00..8f162ec 100644
--- a/linden/indra/win_updater/updater.cpp
+++ b/linden/indra/win_updater/updater.cpp
@@ -4,6 +4,7 @@
4 * 4 *
5 * Copyright (c) 2002-2007, Linden Research, Inc. 5 * Copyright (c) 2002-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code
7 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
8 * to you under the terms of the GNU General Public License, version 2.0 9 * to you under the terms of the GNU General Public License, version 2.0
9 * ("GPL"), unless you have obtained a separate licensing agreement 10 * ("GPL"), unless you have obtained a separate licensing agreement
@@ -26,13 +27,14 @@
26 */ 27 */
27 28
28// 29//
29// Usage: updater -userserver <server> [-name <window_title>] [-program <program_name>] [-silent] 30// Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]
30// 31//
31 32
32#include <windows.h> 33#include <windows.h>
33#include <wininet.h> 34#include <wininet.h>
34 35
35#include <stdio.h> 36#include <stdio.h>
37#include <stdarg.h>
36#include "llpreprocessor.h" 38#include "llpreprocessor.h"
37#include "llfile.h" 39#include "llfile.h"
38 40
@@ -41,7 +43,7 @@
41int gTotalBytesRead = 0; 43int gTotalBytesRead = 0;
42HWND gWindow = NULL; 44HWND gWindow = NULL;
43WCHAR gProgress[256]; 45WCHAR gProgress[256];
44char* gUserServer; 46char* gUpdateURL;
45char* gProgramName; 47char* gProgramName;
46char* gProductName; 48char* gProductName;
47bool gIsSilent; 49bool gIsSilent;
@@ -272,28 +274,20 @@ LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
272} 274}
273 275
274#define win_class_name L"FullScreen" 276#define win_class_name L"FullScreen"
275#define UPDATE_URIBASE L"http://secondlife.com/update.php?userserver="
276 277
277int parse_args(int argc, char **argv) 278int parse_args(int argc, char **argv)
278{ 279{
279 // Check for old-type arguments.
280 if (2 == argc)
281 {
282 gUserServer = argv[1];
283 return 0;
284 }
285
286 int j; 280 int j;
287 281
288 for (j = 1; j < argc; j++) 282 for (j = 1; j < argc; j++)
289 { 283 {
290 if ((!strcmp(argv[j], "-userserver")) && (++j < argc)) 284 if ((!strcmp(argv[j], "-name")) && (++j < argc))
291 { 285 {
292 gUserServer = argv[j]; 286 gProductName = argv[j];
293 } 287 }
294 else if ((!strcmp(argv[j], "-name")) && (++j < argc)) 288 else if ((!strcmp(argv[j], "-url")) && (++j < argc))
295 { 289 {
296 gProductName = argv[j]; 290 gUpdateURL = argv[j];
297 } 291 }
298 else if ((!strcmp(argv[j], "-program")) && (++j < argc)) 292 else if ((!strcmp(argv[j], "-program")) && (++j < argc))
299 { 293 {
@@ -306,7 +300,7 @@ int parse_args(int argc, char **argv)
306 } 300 }
307 301
308 // If nothing was set, let the caller know. 302 // If nothing was set, let the caller know.
309 if (!gUserServer && !gProductName && !gProgramName && !gIsSilent) 303 if (!gProductName && !gProgramName && !gIsSilent && !gUpdateURL)
310 { 304 {
311 return 1; 305 return 1;
312 } 306 }
@@ -357,7 +351,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
357 } 351 }
358 } 352 }
359 353
360 gUserServer = NULL; 354 gUpdateURL = NULL;
361 gProgramName = NULL; 355 gProgramName = NULL;
362 gProductName = NULL; 356 gProductName = NULL;
363 gIsSilent = false; 357 gIsSilent = false;
@@ -391,7 +385,6 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
391 DEVMODE dev_mode = { 0 }; 385 DEVMODE dev_mode = { 0 };
392 char update_exec_path[MAX_PATH]; /* Flawfinder: ignore */ 386 char update_exec_path[MAX_PATH]; /* Flawfinder: ignore */
393 char *ptr; 387 char *ptr;
394 WCHAR update_uri[4096];
395 388
396 const int WINDOW_WIDTH = 250; 389 const int WINDOW_WIDTH = 250;
397 const int WINDOW_HEIGHT = 100; 390 const int WINDOW_HEIGHT = 100;
@@ -426,15 +419,15 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
426 if (parse_args_result) 419 if (parse_args_result)
427 { 420 {
428 MessageBox(gWindow, 421 MessageBox(gWindow,
429 L"Usage: updater -userserver <server> [-name <window_title>] [-program <program_name>] [-silent]", 422 L"Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]",
430 L"Usage", MB_OK); 423 L"Usage", MB_OK);
431 return parse_args_result; 424 return parse_args_result;
432 } 425 }
433 426
434 // Did we get a userserver to work with? 427 // Did we get a userserver to work with?
435 if (!gUserServer) 428 if (!gUpdateURL)
436 { 429 {
437 MessageBox(gWindow, L"Please specify the IP address of the userserver on the command line", 430 MessageBox(gWindow, L"Please specify the download url from the command line",
438 L"Error", MB_OK); 431 L"Error", MB_OK);
439 return 1; 432 return 1;
440 } 433 }
@@ -458,10 +451,9 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
458 *(ptr + 2) = 'x'; 451 *(ptr + 2) = 'x';
459 *(ptr + 3) = 'e'; 452 *(ptr + 3) = 'e';
460 *(ptr + 4) = 0; 453 *(ptr + 4) = 0;
461 wcscpy(update_uri, UPDATE_URIBASE); /* Flawfinder: ignore */ 454
462 WCHAR wcmdline[2048]; 455 WCHAR update_uri[4096];
463 mbstowcs(wcmdline, gUserServer, 2048); 456 mbstowcs(update_uri, gUpdateURL, 4096);
464 wcscat(update_uri, wcmdline); /* Flawfinder: ignore */
465 457
466 int success; 458 int success;
467 int cancelled; 459 int cancelled;
@@ -507,11 +499,13 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
507 char params[2048]; /* Flawfinder: ignore */ 499 char params[2048]; /* Flawfinder: ignore */
508 if (gIsSilent && gProgramName) 500 if (gIsSilent && gProgramName)
509 { 501 {
510 snprintf(params, sizeof(params), "/S /P=\"%s\"", gProgramName); /* Flawfinder: ignore */ 502 _snprintf(params, sizeof(params), "/S /P=\"%s\"", gProgramName); /* Flawfinder: ignore */
503 params[2047] = '\0';
511 } 504 }
512 else if (gProgramName) 505 else if (gProgramName)
513 { 506 {
514 snprintf(params, sizeof(params), "/P=\"%s\"", gProgramName); /* Flawfinder: ignore */ 507 _snprintf(params, sizeof(params), "/P=\"%s\"", gProgramName); /* Flawfinder: ignore */
508 params[2047] = '\0';
515 } 509 }
516 else if (gIsSilent) 510 else if (gIsSilent)
517 { 511 {