diff options
author | Inga Stotland <inga.stotland@intel.com> | 2018-08-29 11:25:55 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2018-08-31 17:25:25 +0300 |
commit | 25741fa67deb13dd21b176444a8ee954e1ac2486 (patch) | |
tree | 142c511fcd4d51c8056674a3c03d4904a15e43d0 /tools/meshctl.c | |
parent | c704a72ce2873bc3b272ab3edb3a78e8a11c672e (diff) | |
download | bluez-25741fa67deb13dd21b176444a8ee954e1ac2486.tar.gz |
tools/meshctl: Fix default directory for JSON files
This fixes the name of default directory that contains sample JSON files.
README file is updated to describe the default location.
Diffstat (limited to 'tools/meshctl.c')
-rw-r--r-- | tools/meshctl.c | 63 |
1 files changed, 42 insertions, 21 deletions
diff --git a/tools/meshctl.c b/tools/meshctl.c index 3e1484f61..cbf62ce70 100644 --- a/tools/meshctl.c +++ b/tools/meshctl.c @@ -1873,7 +1873,7 @@ static const struct bt_shell_menu main_menu = { { } }, }; -static const char *mesh_config_dir; +static const char *config_dir; static const struct option options[] = { { "config", required_argument, 0, 'c' }, @@ -1881,7 +1881,7 @@ static const struct option options[] = { }; static const char **optargs[] = { - &mesh_config_dir + &config_dir }; static const char *help[] = { @@ -1907,38 +1907,57 @@ int main(int argc, char *argv[]) int status; int len; int extra; + char *mesh_dir = NULL; bt_shell_init(argc, argv, &opt); bt_shell_set_menu(&main_menu); bt_shell_set_prompt(PROMPT_OFF); - if (!mesh_config_dir) { - bt_shell_printf("Local config directory not provided.\n"); - mesh_config_dir = ""; + if (!config_dir) { + char *home; + + home = getenv("XDG_CONFIG_HOME"); + if (home) { + mesh_dir = g_strdup_printf("%s/meshctl", home); + } + + if (!mesh_dir) { + home = getenv("HOME"); + if (home) + mesh_dir = g_strdup_printf("%s/.config/meshctl", + home); + } + + if (!mesh_dir) { + g_printerr("Configuration directory not found\n"); + goto fail; + } + } else { - bt_shell_printf("Reading prov_db.json and local_node.json from" - " %s\n", mesh_config_dir); + mesh_dir = g_strdup_printf("%s", config_dir); } - len = strlen(mesh_config_dir); - if (len && mesh_config_dir[len - 1] != '/') { + + g_print("Reading prov_db.json and local_node.json from %s directory\n", + mesh_dir); + + len = strlen(mesh_dir); + + if (len && mesh_dir[len - 1] != '/') extra = 1; - bt_shell_printf("mesh_config_dir[%d] %s\n", len, - &mesh_config_dir[len - 1]); - } else { + else extra = 0; - } + mesh_local_config_filename = g_malloc(len + strlen("local_node.json") + 2); if (!mesh_local_config_filename) goto fail; mesh_prov_db_filename = g_malloc(len + strlen("prov_db.json") + 2); - if (!mesh_prov_db_filename) { + if (!mesh_prov_db_filename) goto fail; - } - sprintf(mesh_local_config_filename, "%s", mesh_config_dir); + sprintf(mesh_local_config_filename, "%s", mesh_dir); if (extra) sprintf(mesh_local_config_filename + len , "%c", '/'); @@ -1946,7 +1965,6 @@ int main(int argc, char *argv[]) sprintf(mesh_local_config_filename + len + extra, "%s", "local_node.json"); len = len + extra + strlen("local_node.json"); - sprintf(mesh_local_config_filename + len, "%c", '\0'); if (!prov_db_read_local_node(mesh_local_config_filename, true)) { g_printerr("Failed to parse local node configuration file %s\n", @@ -1954,14 +1972,15 @@ int main(int argc, char *argv[]) goto fail; } - sprintf(mesh_prov_db_filename, "%s", mesh_config_dir); - len = strlen(mesh_config_dir); + sprintf(mesh_prov_db_filename, "%s", mesh_dir); + len = strlen(mesh_dir); + + g_free(mesh_dir); + if (extra) sprintf(mesh_prov_db_filename + len , "%c", '/'); sprintf(mesh_prov_db_filename + len + extra, "%s", "prov_db.json"); - sprintf(mesh_prov_db_filename + len + extra + strlen("prov_db.json"), - "%c", '\0'); if (!prov_db_read(mesh_prov_db_filename)) { g_printerr("Failed to parse provisioning database file %s\n", @@ -2006,5 +2025,7 @@ int main(int argc, char *argv[]) fail: bt_shell_cleanup(); + g_free(mesh_dir); + return EXIT_FAILURE; } |