summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2017-09-09 00:24:04 +0300
committerVadim Yanitskiy <axilirator@gmail.com>2017-09-09 00:40:43 +0300
commitae31c37d2b4033fb2335060e4f7942ad5ad9549a (patch)
tree4418ed492447c41f79210959da63b14d71a8a0b9 /src
parent903e2515f5d92b152804ae4afbe67499d0a90d61 (diff)
mobile/main.c: clean up config file selection logic
The 903e2515 introduced the following problems: - The home variable is allocated dynamically by talloc, but not being freed. There is no need for dynamical memory allocation, as the getenv() returns a pointer to a value in the environment or NULL. - In case of custom configuration file, a pointer to a part of stack (not heap) is passed to talloc_free(). This may cause unexpected behaviour of segfault. Let's fix both of them. Change-Id: I79cc3b954c3018b7e780f6351c3030c3062470b5
Diffstat (limited to 'src')
-rw-r--r--src/host/layer23/src/mobile/main.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/host/layer23/src/mobile/main.c b/src/host/layer23/src/mobile/main.c
index 4a2e4ec6..bc665574 100644
--- a/src/host/layer23/src/mobile/main.c
+++ b/src/host/layer23/src/mobile/main.c
@@ -38,7 +38,6 @@
#include <getopt.h>
#include <stdlib.h>
#include <stdio.h>
-#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
@@ -52,8 +51,7 @@ struct log_target *stderr_target;
void *l23_ctx = NULL;
struct llist_head ms_list;
static char *gsmtap_ip = 0;
-static const char *config_file = ".osmocom/bb/mobile.cfg";
-bool use_default_cfg = true;
+static const char *custom_cfg_file = NULL;
struct gsmtap_inst *gsmtap_inst = NULL;
static char *vty_ip = "127.0.0.1";
unsigned short vty_port = 4247;
@@ -138,8 +136,7 @@ static void handle_options(int argc, char **argv)
vty_ip = optarg;
break;
case 'c':
- config_file = optarg;
- use_default_cfg = false;
+ custom_cfg_file = optarg;
break;
case 'v':
vty_port = atoi(optarg);
@@ -208,9 +205,9 @@ void sighandler(int sigset)
int main(int argc, char **argv)
{
+ char *config_file;
int quit = 0;
int rc;
- char const * home;
printf("%s\n", openbsc_copyright);
@@ -240,9 +237,18 @@ int main(int argc, char **argv)
gsmtap_source_add_sink(gsmtap_inst);
}
- if (use_default_cfg) {
- home = talloc_strdup(l23_ctx, getenv("HOME"));
- config_file = talloc_asprintf_append(home, "/%s", config_file);
+ if (custom_cfg_file) {
+ /* Use full path provided by user */
+ config_file = talloc_strdup(l23_ctx, custom_cfg_file);
+ } else {
+ /* Obtain the user's home directory path */
+ const char *home_dir = getenv("HOME");
+ if (!home_dir)
+ home_dir = "~";
+
+ /* Concatenate it with default config path */
+ config_file = talloc_asprintf(l23_ctx, "%s/%s",
+ home_dir, ".osmocom/bb/mobile.cfg");
}
/* save the config file directory name */