From 2e4aedd0fbbd40806b808b66832cc3a8c971eeeb Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 17 Apr 2013 15:33:07 -0500 Subject: [PATCH] FS-5319 --resolve --- src/include/switch_types.h | 7 +++++++ src/switch.c | 16 ++++++++++++++++ src/switch_core.c | 7 +++++++ src/switch_xml.c | 2 +- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 07b5b6da47..1666d0a4f1 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -493,6 +493,13 @@ struct switch_directories { typedef struct switch_directories switch_directories; SWITCH_DECLARE_DATA extern switch_directories SWITCH_GLOBAL_dirs; +struct switch_filenames { + char *conf_name; +}; + +typedef struct switch_filenames switch_filenames; +SWITCH_DECLARE_DATA extern switch_filenames SWITCH_GLOBAL_filenames; + #define SWITCH_MAX_STACKS 16 #define SWITCH_THREAD_STACKSIZE 240 * 1024 #define SWITCH_SYSTEM_THREAD_STACKSIZE 8192 * 1024 diff --git a/src/switch.c b/src/switch.c index 68f6af341d..dbe9cadf02 100644 --- a/src/switch.c +++ b/src/switch.c @@ -366,6 +366,7 @@ static const char usage[] = "\t-c -- output to a console and stay in the foreground\n" "\n\tOptions to control locations of files:\n" "\t-base [basedir] -- alternate prefix directory\n" + "\t-cfgname [filename] -- alternate filename for FreeSWITCH main configuration file\n" "\t-conf [confdir] -- alternate directory for FreeSWITCH configuration files\n" "\t-log [logdir] -- alternate directory for logfiles\n" "\t-run [rundir] -- alternate directory for runtime files\n" @@ -857,6 +858,21 @@ int main(int argc, char *argv[]) strcpy(SWITCH_GLOBAL_dirs.sounds_dir, local_argv[x]); } + else if (!strcmp(local_argv[x], "-cfgname")) { + x++; + if (switch_strlen_zero(local_argv[x]) || is_option(local_argv[x])) { + fprintf(stderr, "When using -cfgname you must specify a filename\n"); + return 255; + } + + SWITCH_GLOBAL_filenames.conf_name = (char *) malloc(strlen(local_argv[x]) + 1); + if (!SWITCH_GLOBAL_filenames.conf_name) { + fprintf(stderr, "Allocation error\n"); + return 255; + } + strcpy(SWITCH_GLOBAL_filenames.conf_name, local_argv[x]); + } + /* Unknown option (always last!) */ else { fprintf(stderr, "Unknown option '%s', see '%s -help' for a list of valid options\n", diff --git a/src/switch_core.c b/src/switch_core.c index 64ad73c685..dfe43e8fcf 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -53,6 +53,7 @@ SWITCH_DECLARE_DATA switch_directories SWITCH_GLOBAL_dirs = { 0 }; +SWITCH_DECLARE_DATA switch_filenames SWITCH_GLOBAL_filenames = { 0 }; /* The main runtime obj we keep this hidden for ourselves */ struct switch_runtime runtime = { 0 }; @@ -728,6 +729,10 @@ SWITCH_DECLARE(void) switch_core_set_globals(void) #endif } + if (!SWITCH_GLOBAL_filenames.conf_name && (SWITCH_GLOBAL_filenames.conf_name = (char *) malloc(BUFSIZE))) { + switch_snprintf(SWITCH_GLOBAL_filenames.conf_name, BUFSIZE, "%s", "freeswitch.xml"); + } + /* Do this last because it being empty is part of the above logic */ if (!SWITCH_GLOBAL_dirs.base_dir && (SWITCH_GLOBAL_dirs.base_dir = (char *) malloc(BUFSIZE))) { switch_snprintf(SWITCH_GLOBAL_dirs.base_dir, BUFSIZE, "%s", base_dir); @@ -746,6 +751,8 @@ SWITCH_DECLARE(void) switch_core_set_globals(void) switch_assert(SWITCH_GLOBAL_dirs.recordings_dir); switch_assert(SWITCH_GLOBAL_dirs.sounds_dir); switch_assert(SWITCH_GLOBAL_dirs.temp_dir); + + switch_assert(SWITCH_GLOBAL_filenames.conf_name); } diff --git a/src/switch_xml.c b/src/switch_xml.c index 7c47ebebec..f707ebae37 100644 --- a/src/switch_xml.c +++ b/src/switch_xml.c @@ -2167,7 +2167,7 @@ SWITCH_DECLARE_NONSTD(switch_xml_t) __switch_xml_open_root(uint8_t reload, const } } - switch_snprintf(path_buf, sizeof(path_buf), "%s%s%s", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR, "freeswitch.xml"); + switch_snprintf(path_buf, sizeof(path_buf), "%s%s%s", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR, SWITCH_GLOBAL_filenames.conf_name); if ((new_main = switch_xml_parse_file(path_buf))) { *err = switch_xml_error(new_main); switch_copy_string(not_so_threadsafe_error_buffer, *err, sizeof(not_so_threadsafe_error_buffer));