diff --git a/makefiles/linux/config_linux_default.mk b/makefiles/linux/config_linux_default.mk index 03d406a896..8ccc59feac 100644 --- a/makefiles/linux/config_linux_default.mk +++ b/makefiles/linux/config_linux_default.mk @@ -18,7 +18,7 @@ MODULES += drivers/ms5611 # # System commands # -#MODULES += systemcmds/boardinfo +MODULES += systemcmds/param # # General system control diff --git a/src/systemcmds/param/param.c b/src/systemcmds/param/param.c index 7355176554..2c74e4b312 100644 --- a/src/systemcmds/param/param.c +++ b/src/systemcmds/param/param.c @@ -58,15 +58,15 @@ __EXPORT int param_main(int argc, char *argv[]); -static void do_save(const char *param_file_name); -static void do_load(const char *param_file_name); -static void do_import(const char *param_file_name); +static int do_save(const char *param_file_name); +static int do_load(const char *param_file_name); +static int do_import(const char *param_file_name); static void do_show(const char *search_string); static void do_show_print(void *arg, param_t param); -static void do_set(const char *name, const char *val, bool fail_on_not_found); -static void do_compare(const char *name, char *vals[], unsigned comparisons); -static void do_reset(const char *excludes[], int num_excludes); -static void do_reset_nostart(const char *excludes[], int num_excludes); +static int do_set(const char *name, const char *val, bool fail_on_not_found); +static int do_compare(const char *name, char *vals[], unsigned comparisons); +static int do_reset(const char *excludes[], int num_excludes); +static int do_reset_nostart(const char *excludes[], int num_excludes); int param_main(int argc, char *argv[]) @@ -74,34 +74,34 @@ param_main(int argc, char *argv[]) if (argc >= 2) { if (!strcmp(argv[1], "save")) { if (argc >= 3) { - do_save(argv[2]); + return do_save(argv[2]); } else { if (param_save_default()) { warnx("Param export failed."); - exit(1); + return 1; } else { - exit(0); + return 0; } } } if (!strcmp(argv[1], "load")) { if (argc >= 3) { - do_load(argv[2]); + return do_load(argv[2]); } else { - do_load(param_get_default_file()); + return do_load(param_get_default_file()); } } if (!strcmp(argv[1], "import")) { if (argc >= 3) { - do_import(argv[2]); + return do_import(argv[2]); } else { - do_import(param_get_default_file()); + return do_import(param_get_default_file()); } } @@ -114,15 +114,17 @@ param_main(int argc, char *argv[]) } warnx("selected parameter default file %s", param_get_default_file()); - exit(0); + return 0; } if (!strcmp(argv[1], "show")) { if (argc >= 3) { do_show(argv[2]); + return 0; } else { do_show(NULL); + return 0; } } @@ -132,55 +134,59 @@ param_main(int argc, char *argv[]) /* if the fail switch is provided, fails the command if not found */ bool fail = !strcmp(argv[4], "fail"); - do_set(argv[2], argv[3], fail); + return do_set(argv[2], argv[3], fail); } else if (argc >= 4) { - do_set(argv[2], argv[3], false); + return do_set(argv[2], argv[3], false); } else { - errx(1, "not enough arguments.\nTry 'param set PARAM_NAME 3 [fail]'"); + warnx("not enough arguments.\nTry 'param set PARAM_NAME 3 [fail]'"); + return 1; } } if (!strcmp(argv[1], "compare")) { if (argc >= 4) { - do_compare(argv[2], &argv[3], argc - 3); + return do_compare(argv[2], &argv[3], argc - 3); } else { - errx(1, "not enough arguments.\nTry 'param compare PARAM_NAME 3'"); + warnx("not enough arguments.\nTry 'param compare PARAM_NAME 3'"); + return 1; } } if (!strcmp(argv[1], "reset")) { if (argc >= 3) { - do_reset((const char **) &argv[2], argc - 2); + return do_reset((const char **) &argv[2], argc - 2); } else { - do_reset(NULL, 0); + return do_reset(NULL, 0); } } if (!strcmp(argv[1], "reset_nostart")) { if (argc >= 3) { - do_reset_nostart((const char **) &argv[2], argc - 2); + return do_reset_nostart((const char **) &argv[2], argc - 2); } else { - do_reset_nostart(NULL, 0); + return do_reset_nostart(NULL, 0); } } } - errx(1, "expected a command, try 'load', 'import', 'show', 'set', 'compare', 'select' or 'save'"); + warnx("expected a command, try 'load', 'import', 'show', 'set', 'compare', 'select' or 'save'"); + return 1; } -static void +static int do_save(const char *param_file_name) { /* create the file */ int fd = open(param_file_name, O_WRONLY | O_CREAT); if (fd < 0) { - err(1, "opening '%s' failed", param_file_name); + warn("opening '%s' failed", param_file_name); + return 1; } int result = param_export(fd, false); @@ -188,48 +194,53 @@ do_save(const char *param_file_name) if (result < 0) { (void)unlink(param_file_name); - errx(1, "error exporting to '%s'", param_file_name); + warnx("error exporting to '%s'", param_file_name); + return 1; } - exit(0); + return 0; } -static void +static int do_load(const char *param_file_name) { int fd = open(param_file_name, O_RDONLY); if (fd < 0) { - err(1, "open '%s'", param_file_name); + warn("open '%s'", param_file_name); + return 1; } int result = param_load(fd); close(fd); if (result < 0) { - errx(1, "error importing from '%s'", param_file_name); + warnx("error importing from '%s'", param_file_name); + return 1; } - exit(0); + return 0; } -static void +static int do_import(const char *param_file_name) { int fd = open(param_file_name, O_RDONLY); if (fd < 0) { - err(1, "open '%s'", param_file_name); + warn("open '%s'", param_file_name); + return 1; } int result = param_import(fd); close(fd); if (result < 0) { - errx(1, "error importing from '%s'", param_file_name); + warnx("error importing from '%s'", param_file_name); + return 1; } - exit(0); + return 0; } static void @@ -238,8 +249,6 @@ do_show(const char *search_string) printf("Symbols: x = used, + = saved, * = unsaved\n"); param_foreach(do_show_print, (char *)search_string, false, false); printf("\n %u parameters total, %u used.\n", param_count(), param_count_used()); - - exit(0); } static void @@ -267,7 +276,8 @@ do_show_print(void *arg, param_t param) } else if (*ss == '*') { if (*(ss + 1) != '\0') { warnx("* symbol only allowed at end of search string."); - exit(1); + // FIXME - should exit + return; } pp++; @@ -310,7 +320,7 @@ do_show_print(void *arg, param_t param) break; case PARAM_TYPE_STRUCT ... PARAM_TYPE_STRUCT_MAX: - printf("\n", 0 + param_type(param), param_size(param)); + printf("\n", 0 + param_type(param), param_size(param)); return; default: @@ -318,10 +328,10 @@ do_show_print(void *arg, param_t param) return; } - printf("\n", param); + printf("\n", param); } -static void +static int do_set(const char *name, const char *val, bool fail_on_not_found) { int32_t i; @@ -331,7 +341,8 @@ do_set(const char *name, const char *val, bool fail_on_not_found) /* set nothing if parameter cannot be found */ if (param == PARAM_INVALID) { /* param not found - fail silenty in scripts as it prevents booting */ - errx(((fail_on_not_found) ? 1 : 0), "Error: Parameter %s not found.", name); + warnx("Error: Parameter %s not found.", name); + return (fail_on_not_found) ? 1 : 0; } printf("%c %s: ", @@ -386,13 +397,14 @@ do_set(const char *name, const char *val, bool fail_on_not_found) break; default: - errx(1, "\n", 0 + param_type(param)); + warnx("\n", 0 + param_type(param)); + return 1; } - exit(0); + return 0; } -static void +static int do_compare(const char *name, char *vals[], unsigned comparisons) { int32_t i; @@ -402,7 +414,8 @@ do_compare(const char *name, char *vals[], unsigned comparisons) /* set nothing if parameter cannot be found */ if (param == PARAM_INVALID) { /* param not found */ - errx(1, "Error: Parameter %s not found.", name); + warnx("Error: Parameter %s not found.", name); + return 1; } /* @@ -451,7 +464,8 @@ do_compare(const char *name, char *vals[], unsigned comparisons) break; default: - errx(1, "\n", 0 + param_type(param)); + warnx("\n", 0 + param_type(param)); + return 1; } if (ret == 0) { @@ -460,10 +474,10 @@ do_compare(const char *name, char *vals[], unsigned comparisons) param_name(param)); } - exit(ret); + return ret; } -static void +static int do_reset(const char *excludes[], int num_excludes) { if (num_excludes > 0) { @@ -475,17 +489,14 @@ do_reset(const char *excludes[], int num_excludes) if (param_save_default()) { warnx("Param export failed."); - exit(1); - - } else { - exit(0); + return 1; } + return 0; } -static void +static int do_reset_nostart(const char *excludes[], int num_excludes) { - int32_t autostart; int32_t autoconfig; @@ -504,9 +515,8 @@ do_reset_nostart(const char *excludes[], int num_excludes) if (param_save_default()) { warnx("Param export failed."); - exit(1); + return 1; - } else { - exit(0); } + return 0; }