summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmanuele Giaquinta <exg@irssi.org>2007-05-24 00:25:36 +0000
committerexg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564>2007-05-24 00:25:36 +0000
commit841cd8d0cf7767eae63300bbf5f98ebe65b02a71 (patch)
tree5f80b018fee2d85498d174c663b03cef8043311c /src
parentafa4292466c6de093d0cdf359a91160886933507 (diff)
downloadirssi-841cd8d0cf7767eae63300bbf5f98ebe65b02a71.zip
Cleanup option handling.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4510 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src')
-rw-r--r--src/core/core.c69
-rw-r--r--src/core/core.h3
-rw-r--r--src/core/session.c5
-rw-r--r--src/core/session.h1
-rw-r--r--src/fe-common/core/fe-common-core.c5
-rw-r--r--src/fe-common/core/fe-common-core.h1
-rw-r--r--src/fe-text/irssi.c9
7 files changed, 53 insertions, 40 deletions
diff --git a/src/core/core.c b/src/core/core.c
index b2088220..2240ce29 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -154,45 +154,34 @@ static void sig_init_finished(void)
g_slist_free(dialog_text_queue);
}
-void core_init_paths(int argc, char *argv[])
+static char *fix_path(const char *str)
+{
+ char *new_str = convert_home(str);
+ if (!g_path_is_absolute(new_str)) {
+ char *tmp_str = new_str;
+ new_str = g_strdup_printf("%s/%s", g_get_current_dir(), tmp_str);
+ g_free(tmp_str);
+ }
+ return new_str;
+}
+
+void core_register_options(void)
{
static struct poptOption options[] = {
- { "config", 0, POPT_ARG_STRING, NULL, 0, "Configuration file location (~/.irssi/config)", "PATH" },
- { "home", 0, POPT_ARG_STRING, NULL, 0, "Irssi home dir location (~/.irssi)", "PATH" },
+ { "config", 0, POPT_ARG_STRING, &irssi_config_file, 0, "Configuration file location (~/.irssi/config)", "PATH" },
+ { "home", 0, POPT_ARG_STRING, &irssi_dir, 0, "Irssi home dir location (~/.irssi)", "PATH" },
{ NULL, '\0', 0, NULL }
};
- const char *home;
- char *str;
- int n, len;
-
- for (n = 1; n < argc; n++) {
- if (strncmp(argv[n], "--home=", 7) == 0) {
- g_free_not_null(irssi_dir);
- irssi_dir = convert_home(argv[n]+7);
- len = strlen(irssi_dir);
- if (irssi_dir[len-1] == G_DIR_SEPARATOR)
- irssi_dir[len-1] = '\0';
- } else if (strncmp(argv[n], "--config=", 9) == 0) {
- g_free_not_null(irssi_config_file);
- irssi_config_file = convert_home(argv[n]+9);
- }
- }
-
- if (irssi_dir != NULL && !g_path_is_absolute(irssi_dir)) {
- str = irssi_dir;
- irssi_dir = g_strdup_printf("%s/%s", g_get_current_dir(), str);
- g_free(str);
- }
-
- if (irssi_config_file != NULL &&
- !g_path_is_absolute(irssi_config_file)) {
- str = irssi_config_file;
- irssi_config_file =
- g_strdup_printf("%s/%s", g_get_current_dir(), str);
- g_free(str);
- }
args_register(options);
+ session_register_options();
+}
+
+void core_preinit(const char *path)
+{
+ const char *home;
+ char *str;
+ int len;
if (irssi_dir == NULL) {
home = g_get_home_dir();
@@ -200,11 +189,23 @@ void core_init_paths(int argc, char *argv[])
home = ".";
irssi_dir = g_strdup_printf(IRSSI_DIR_FULL, home);
+ } else {
+ str = irssi_dir;
+ irssi_dir = fix_path(str);
+ g_free(str);
+ len = strlen(irssi_dir);
+ if (irssi_dir[len-1] == G_DIR_SEPARATOR)
+ irssi_dir[len-1] = '\0';
}
if (irssi_config_file == NULL)
irssi_config_file = g_strdup_printf("%s/"IRSSI_HOME_CONFIG, irssi_dir);
+ else {
+ str = irssi_config_file;
+ irssi_config_file = fix_path(str);
+ g_free(str);
+ }
- session_set_binary(argv[0]);
+ session_set_binary(path);
}
static void sig_irssi_init_finished(void)
diff --git a/src/core/core.h b/src/core/core.h
index ceff244b..982dbaad 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -16,8 +16,9 @@ extern int irssi_init_finished; /* TRUE after "irssi init finished" signal is se
extern int reload_config; /* TRUE after received SIGHUP. */
extern time_t client_start_time;
-void core_init_paths(int argc, char *argv[]);
+void core_preinit(const char *path);
+void core_register_options(void);
void core_init(void);
void core_deinit(void);
diff --git a/src/core/session.c b/src/core/session.c
index d118e8f1..4b0773fc 100644
--- a/src/core/session.c
+++ b/src/core/session.c
@@ -332,7 +332,7 @@ static void sig_init_finished(void)
session_file = NULL;
}
-void session_init(void)
+void session_register_options(void)
{
static struct poptOption options[] = {
{ "session", 0, POPT_ARG_STRING, &session_file, 0, "Used by /UPGRADE command", "PATH" },
@@ -341,7 +341,10 @@ void session_init(void)
session_file = NULL;
args_register(options);
+}
+void session_init(void)
+{
command_bind("upgrade", NULL, (SIGNAL_FUNC) cmd_upgrade);
signal_add("session save", (SIGNAL_FUNC) sig_session_save);
diff --git a/src/core/session.h b/src/core/session.h
index 000ec56e..a3c8d67c 100644
--- a/src/core/session.h
+++ b/src/core/session.h
@@ -6,6 +6,7 @@ extern char *irssi_binary;
void session_set_binary(const char *path);
void session_upgrade(void);
+void session_register_options(void);
void session_init(void);
void session_deinit(void);
diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c
index bf7a658b..688f40df 100644
--- a/src/fe-common/core/fe-common-core.c
+++ b/src/fe-common/core/fe-common-core.c
@@ -131,7 +131,7 @@ static void sig_channel_destroyed(CHANNEL_REC *channel)
MODULE_DATA_UNSET(channel);
}
-void fe_common_core_init(void)
+void fe_common_core_register_options(void)
{
static struct poptOption version_options[] = {
{ NULL, '\0', POPT_ARG_CALLBACK, (void *)&print_version, '\0', NULL },
@@ -158,7 +158,10 @@ void fe_common_core_init(void)
cmdline_nick = NULL;
cmdline_hostname = NULL;
args_register(options);
+}
+void fe_common_core_init(void)
+{
settings_add_bool("lookandfeel", "timestamps", TRUE);
settings_add_level("lookandfeel", "timestamp_level", "ALL");
settings_add_time("lookandfeel", "timestamp_timeout", "0");
diff --git a/src/fe-common/core/fe-common-core.h b/src/fe-common/core/fe-common-core.h
index 1c12047b..7f3078de 100644
--- a/src/fe-common/core/fe-common-core.h
+++ b/src/fe-common/core/fe-common-core.h
@@ -1,6 +1,7 @@
#ifndef __FE_COMMON_CORE_H
#define __FE_COMMON_CORE_H
+void fe_common_core_register_options(void);
void fe_common_core_init(void);
void fe_common_core_deinit(void);
void fe_common_core_finish_init(void);
diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c
index 5e359073..f14cc630 100644
--- a/src/fe-text/irssi.c
+++ b/src/fe-text/irssi.c
@@ -332,6 +332,11 @@ int main(int argc, char **argv)
{ NULL, '\0', 0, NULL }
};
+ core_register_options();
+ fe_common_core_register_options();
+ args_register(options);
+ args_execute(argc, argv);
+
#ifdef USE_GC
g_mem_set_vtable(&gc_mem_table);
#endif
@@ -340,7 +345,7 @@ int main(int argc, char **argv)
dummy = FALSE;
quitting = FALSE;
- core_init_paths(argc, argv);
+ core_preinit(argv[0]);
check_files();
@@ -363,8 +368,6 @@ int main(int argc, char **argv)
setlocale(LC_ALL, "");
textui_init();
- args_register(options);
- args_execute(argc, argv);
if (!dummy && !term_init()) {
fprintf(stderr, "Can't initialize screen handling, quitting.\n");