Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Mon, 22 Aug 2016 18:03:18 UTC Commit: 095d88958296200ee890dc2b45e0123f1559705b https://github.com/geany/geany/commit/095d88958296200ee890dc2b45e0123f155970...
Log Message: ----------- VTE: Fix crash when trying to change VTE directory at startup
2150302fe6e88f88e5eba78502b478be2b78c662 introduced a bug, because configuration_load_session_files() calls VTE code if vte_info.have_vte is non-FALSE, before vte_init() has been called. So, it relied in the implicit 0-initialization of the vte_info global, which the above commit changed carelessly.
So, instead of altering vte_info.have_vte early, add a specific flag for whether VTE is disabled on the command line.
Also, explicitly initialize vte_info to suggest to the reader the default values does matter.
Modified Paths: -------------- src/keyfile.c src/libmain.c src/vte.c src/vte.h
Modified: src/keyfile.c 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -859,7 +859,7 @@ static void load_dialog_prefs(GKeyFile *config) /* VTE */ #ifdef HAVE_VTE vte_info.load_vte = utils_get_setting_boolean(config, "VTE", "load_vte", TRUE); - if (vte_info.load_vte && vte_info.have_vte /* not disabled on the cmdline */) + if (vte_info.load_vte && vte_info.load_vte_cmdline /* not disabled on the cmdline */) { StashGroup *group; struct passwd *pw = getpwuid(getuid());
Modified: src/libmain.c 6 lines changed, 2 insertions(+), 4 deletions(-) =================================================================== @@ -877,14 +877,12 @@ static void load_session_project_file(void) static void load_settings(void) { #ifdef HAVE_VTE - /* initially assume we'll have VTE unless it's disabled by cmdline, to allow configuration - * loading to be notified about disabled VTE on the cmdline */ - vte_info.have_vte = !no_vte; + vte_info.load_vte_cmdline = !no_vte; #endif configuration_load(); /* let cmdline options overwrite configuration settings */ #ifdef HAVE_VTE - vte_info.have_vte = (no_vte) ? FALSE : vte_info.load_vte; + vte_info.have_vte = vte_info.load_vte && vte_info.load_vte_cmdline; #endif if (no_msgwin) ui_prefs.msgwindow_visible = FALSE;
Modified: src/vte.c 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -56,7 +56,7 @@ #include <errno.h>
-VteInfo vte_info; +VteInfo vte_info = { FALSE, FALSE, FALSE, NULL, NULL }; VteConfig *vc;
static pid_t pid = 0;
Modified: src/vte.h 5 lines changed, 3 insertions(+), 2 deletions(-) =================================================================== @@ -31,8 +31,9 @@ G_BEGIN_DECLS
typedef struct { - gboolean load_vte; /* this is the preference, NOT the current instance VTE state */ - gboolean have_vte; /* use this field to check if the current instance has VTE */ + gboolean load_vte; /* this is the preference, NOT the current instance VTE state */ + gboolean load_vte_cmdline; /* this is the command line option */ + gboolean have_vte; /* use this field to check if the current instance has VTE */ gchar *lib_vte; gchar *dir; } VteInfo;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).