From 05164e62a51a8564f481bbd881a33344504b7e4c Mon Sep 17 00:00:00 2001 From: "bryner%brianryner.com" Date: Thu, 30 Sep 2004 17:35:55 +0000 Subject: [PATCH] Don't crash if there are command-line arguments (bug 261734) by doing ParseConfig before ParseArgs, moving gtk_init to RunWizard, and adding a check in ErrorHandler to log errors to the console if gtk hasn't been initialized yet. r=ajschultz, sr=dveditz. git-svn-id: svn://10.0.0.236/trunk@163029 18797224-902f-48f8-a5cc-f745e15eee43 --- .../installer/unix/wizard/nsXInstaller.cpp | 17 +++++++++-------- .../installer/unix/wizard/nsXInstaller.h | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.cpp b/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.cpp index 9077acfa02a..27e9fa2d78f 100644 --- a/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.cpp +++ b/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.cpp @@ -156,7 +156,7 @@ BAIL: } int -nsXInstaller::RunWizard() +nsXInstaller::RunWizard(int argc, char **argv) { int err = OK; @@ -164,6 +164,7 @@ nsXInstaller::RunWizard() // create the dialog window if (gCtx->opt->mMode != nsXIOptions::MODE_SILENT) { + gtk_init(&argc, &argv); gCtx->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); XI_VERIFY(gCtx->window); @@ -407,15 +408,13 @@ main(int argc, char **argv) goto out; } - if ((err = installer->ParseArgs(argc, argv)) != OK) - goto out; - - gtk_init(&argc, &argv); - if ((err = installer->ParseConfig()) != OK) goto out; - err = installer->RunWizard(); + if ((err = installer->ParseArgs(argc, argv)) != OK) + goto out; + + err = installer->RunWizard(argc, argv); out: XI_IF_DELETE(installer); @@ -447,7 +446,9 @@ ErrorHandler(int aErr, const char* aErrMsg) sprintf(msg, gCtx->Res("FATAL_ERROR"), aErr, gCtx->Res(errStr)); } - if (gCtx->opt->mMode == nsXIOptions::MODE_SILENT) { + // lack of gCtx->window indicates we have not yet run RunWizard + // and gtk_init + if (gCtx->opt->mMode == nsXIOptions::MODE_SILENT || !gCtx->window) { fprintf (stderr, "%s\n", msg); return aErr; } diff --git a/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.h b/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.h index c7621418560..6c3bfc7cac2 100644 --- a/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.h +++ b/mozilla/toolkit/mozapps/installer/unix/wizard/nsXInstaller.h @@ -42,7 +42,7 @@ public: int ParseArgs(int aArgc, char **aArgv); int ParseConfig(); - int RunWizard(); + int RunWizard(int argc, char **argv); int ParseGeneral(nsINIParser *aParser); static gint Kill(GtkWidget *widget, GdkEvent *event, gpointer data);