X-Git-Url: http://git.maemo.org/git/?p=browser-switch;a=blobdiff_plain;f=main.c;h=84b78e01b4892762084c0371e70cc8560f3a2170;hp=e84c2be7fbe8eadf94c6c07e369dcda1c520998a;hb=ca61ab9737a563adac6436de4fe35243b40345ef;hpb=42cb5b0f56e8e61767f6eb403d09c562a1582515 diff --git a/main.c b/main.c index e84c2be..84b78e0 100644 --- a/main.c +++ b/main.c @@ -33,10 +33,7 @@ #include "browser-switchboard.h" #include "launcher.h" #include "dbus-server-bindings.h" - -#define DEFAULT_HOMEDIR "/home/user" -#define CONFIGFILE_LOC "/.config/browser-switchboard" -#define MAXLINE 1024 +#include "configfile.h" struct swb_context ctx; @@ -55,43 +52,31 @@ static void waitforzombies(int signalnum) { } static void read_config(int signalnum) { - char *homedir, *configfile; - size_t len; - char buf[MAXLINE]; - char *key, *value; - char *default_browser = NULL; FILE *fp; regex_t re_ignore, re_config1, re_config2; regmatch_t substrs[3]; + char buf[MAXLINE]; + char *key, *value; + char *default_browser = NULL; + size_t len; set_config_defaults(&ctx); - if (!(homedir = getenv("HOME"))) - homedir = DEFAULT_HOMEDIR; - len = strlen(homedir) + strlen(CONFIGFILE_LOC) + 1; - if (!(configfile = calloc(len, sizeof(char)))) - goto out_noopen; - snprintf(configfile, len, "%s%s", homedir, CONFIGFILE_LOC); - - if (!(fp = fopen(configfile, "r"))) + if (!(fp = open_config_file())) goto out_noopen; /* compile regex matching blank lines or comments */ - if (regcomp(&re_ignore, "^[[:space:]]*(#|$)", REG_EXTENDED|REG_NOSUB)) + if (regcomp(&re_ignore, REGEX_IGNORE, REGEX_IGNORE_FLAGS)) goto out_nore; /* compile regex matching foo = "bar", with arbitrary whitespace at beginning and end of line and surrounding the = */ - if (regcomp(&re_config1, - "^[[:space:]]*([^=[:space:]]+)[[:space:]]*=[[:space:]]*\"(.*)\"[[:space:]]*$", - REG_EXTENDED)) { + if (regcomp(&re_config1, REGEX_CONFIG1, REGEX_CONFIG1_FLAGS)) { regfree(&re_ignore); goto out_nore; } /* compile regex matching foo = bar, with arbitrary whitespace at beginning of line and surrounding the = */ - if (regcomp(&re_config2, - "^[[:space:]]*([^=[:space:]]+)[[:space:]]*=[[:space:]]*(.*)$", - REG_EXTENDED|REG_NEWLINE)) { + if (regcomp(&re_config2, REGEX_CONFIG2, REGEX_CONFIG2_FLAGS)) { regfree(&re_ignore); regfree(&re_config1); goto out_nore; @@ -154,28 +139,31 @@ out_nore: fclose(fp); out_noopen: update_default_browser(&ctx, default_browser); - free(configfile); free(default_browser); return; } int main() { - OssoBrowser *obj; + OssoBrowser *obj_osso_browser, *obj_osso_browser_req; GMainLoop *mainloop; GError *error = NULL; read_config(0); if (ctx.continuous_mode) { + /* Install signal handlers */ struct sigaction act; act.sa_flags = SA_RESTART; + sigemptyset(&(act.sa_mask)); + /* SIGCHLD -- clean up after zombies */ act.sa_handler = waitforzombies; if (sigaction(SIGCHLD, &act, NULL) == -1) { printf("Installing signal handler failed\n"); return 1; } + /* SIGHUP -- reread config file */ act.sa_handler = read_config; if (sigaction(SIGHUP, &act, NULL) == -1) { printf("Installing signal handler failed\n"); @@ -188,6 +176,7 @@ int main() { dbus_g_object_type_install_info(OSSO_BROWSER_TYPE, &dbus_glib_osso_browser_object_info); + /* Get a connection to the D-Bus session bus */ ctx.session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error); if (!ctx.session_bus) { printf("Couldn't get a D-Bus bus connection\n"); @@ -203,11 +192,14 @@ int main() { dbus_request_osso_browser_name(&ctx); - obj = g_object_new(OSSO_BROWSER_TYPE, NULL); + /* Register ourselves to handle the osso_browser D-Bus methods */ + obj_osso_browser = g_object_new(OSSO_BROWSER_TYPE, NULL); + obj_osso_browser_req = g_object_new(OSSO_BROWSER_TYPE, NULL); dbus_g_connection_register_g_object(ctx.session_bus, - "/com/nokia/osso_browser", G_OBJECT(obj)); + "/com/nokia/osso_browser", G_OBJECT(obj_osso_browser)); dbus_g_connection_register_g_object(ctx.session_bus, - "/com/nokia/osso_browser/request", G_OBJECT(obj)); + "/com/nokia/osso_browser/request", + G_OBJECT(obj_osso_browser_req)); mainloop = g_main_loop_new(NULL, FALSE); printf("Starting main loop\n");