Linux: changed param to nit use errx or exit

Thread based implementaton can't call errx or exit

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
This commit is contained in:
Mark Charlebois
2015-03-24 07:42:20 -07:00
parent 526b0e68eb
commit 977036faf9
2 changed files with 71 additions and 61 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ MODULES += drivers/ms5611
# #
# System commands # System commands
# #
#MODULES += systemcmds/boardinfo MODULES += systemcmds/param
# #
# General system control # General system control
+70 -60
View File
@@ -58,15 +58,15 @@
__EXPORT int param_main(int argc, char *argv[]); __EXPORT int param_main(int argc, char *argv[]);
static void do_save(const char *param_file_name); static int do_save(const char *param_file_name);
static void do_load(const char *param_file_name); static int do_load(const char *param_file_name);
static void do_import(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(const char *search_string);
static void do_show_print(void *arg, param_t param); 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 int 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 int do_compare(const char *name, char *vals[], unsigned comparisons);
static void do_reset(const char *excludes[], int num_excludes); static int do_reset(const char *excludes[], int num_excludes);
static void do_reset_nostart(const char *excludes[], int num_excludes); static int do_reset_nostart(const char *excludes[], int num_excludes);
int int
param_main(int argc, char *argv[]) param_main(int argc, char *argv[])
@@ -74,34 +74,34 @@ param_main(int argc, char *argv[])
if (argc >= 2) { if (argc >= 2) {
if (!strcmp(argv[1], "save")) { if (!strcmp(argv[1], "save")) {
if (argc >= 3) { if (argc >= 3) {
do_save(argv[2]); return do_save(argv[2]);
} else { } else {
if (param_save_default()) { if (param_save_default()) {
warnx("Param export failed."); warnx("Param export failed.");
exit(1); return 1;
} else { } else {
exit(0); return 0;
} }
} }
} }
if (!strcmp(argv[1], "load")) { if (!strcmp(argv[1], "load")) {
if (argc >= 3) { if (argc >= 3) {
do_load(argv[2]); return do_load(argv[2]);
} else { } else {
do_load(param_get_default_file()); return do_load(param_get_default_file());
} }
} }
if (!strcmp(argv[1], "import")) { if (!strcmp(argv[1], "import")) {
if (argc >= 3) { if (argc >= 3) {
do_import(argv[2]); return do_import(argv[2]);
} else { } 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()); warnx("selected parameter default file %s", param_get_default_file());
exit(0); return 0;
} }
if (!strcmp(argv[1], "show")) { if (!strcmp(argv[1], "show")) {
if (argc >= 3) { if (argc >= 3) {
do_show(argv[2]); do_show(argv[2]);
return 0;
} else { } else {
do_show(NULL); 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 */ /* if the fail switch is provided, fails the command if not found */
bool fail = !strcmp(argv[4], "fail"); 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) { } else if (argc >= 4) {
do_set(argv[2], argv[3], false); return do_set(argv[2], argv[3], false);
} else { } 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 (!strcmp(argv[1], "compare")) {
if (argc >= 4) { if (argc >= 4) {
do_compare(argv[2], &argv[3], argc - 3); return do_compare(argv[2], &argv[3], argc - 3);
} else { } 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 (!strcmp(argv[1], "reset")) {
if (argc >= 3) { if (argc >= 3) {
do_reset((const char **) &argv[2], argc - 2); return do_reset((const char **) &argv[2], argc - 2);
} else { } else {
do_reset(NULL, 0); return do_reset(NULL, 0);
} }
} }
if (!strcmp(argv[1], "reset_nostart")) { if (!strcmp(argv[1], "reset_nostart")) {
if (argc >= 3) { if (argc >= 3) {
do_reset_nostart((const char **) &argv[2], argc - 2); return do_reset_nostart((const char **) &argv[2], argc - 2);
} else { } 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) do_save(const char *param_file_name)
{ {
/* create the file */ /* create the file */
int fd = open(param_file_name, O_WRONLY | O_CREAT); int fd = open(param_file_name, O_WRONLY | O_CREAT);
if (fd < 0) { 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); int result = param_export(fd, false);
@@ -188,48 +194,53 @@ do_save(const char *param_file_name)
if (result < 0) { if (result < 0) {
(void)unlink(param_file_name); (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) do_load(const char *param_file_name)
{ {
int fd = open(param_file_name, O_RDONLY); int fd = open(param_file_name, O_RDONLY);
if (fd < 0) { if (fd < 0) {
err(1, "open '%s'", param_file_name); warn("open '%s'", param_file_name);
return 1;
} }
int result = param_load(fd); int result = param_load(fd);
close(fd); close(fd);
if (result < 0) { 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) do_import(const char *param_file_name)
{ {
int fd = open(param_file_name, O_RDONLY); int fd = open(param_file_name, O_RDONLY);
if (fd < 0) { if (fd < 0) {
err(1, "open '%s'", param_file_name); warn("open '%s'", param_file_name);
return 1;
} }
int result = param_import(fd); int result = param_import(fd);
close(fd); close(fd);
if (result < 0) { 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 void
@@ -238,8 +249,6 @@ do_show(const char *search_string)
printf("Symbols: x = used, + = saved, * = unsaved\n"); printf("Symbols: x = used, + = saved, * = unsaved\n");
param_foreach(do_show_print, (char *)search_string, false, false); param_foreach(do_show_print, (char *)search_string, false, false);
printf("\n %u parameters total, %u used.\n", param_count(), param_count_used()); printf("\n %u parameters total, %u used.\n", param_count(), param_count_used());
exit(0);
} }
static void static void
@@ -267,7 +276,8 @@ do_show_print(void *arg, param_t param)
} else if (*ss == '*') { } else if (*ss == '*') {
if (*(ss + 1) != '\0') { if (*(ss + 1) != '\0') {
warnx("* symbol only allowed at end of search string."); warnx("* symbol only allowed at end of search string.");
exit(1); // FIXME - should exit
return;
} }
pp++; pp++;
@@ -310,7 +320,7 @@ do_show_print(void *arg, param_t param)
break; break;
case PARAM_TYPE_STRUCT ... PARAM_TYPE_STRUCT_MAX: case PARAM_TYPE_STRUCT ... PARAM_TYPE_STRUCT_MAX:
printf("<struct type %d size %u>\n", 0 + param_type(param), param_size(param)); printf("<struct type %d size %lu>\n", 0 + param_type(param), param_size(param));
return; return;
default: default:
@@ -318,10 +328,10 @@ do_show_print(void *arg, param_t param)
return; return;
} }
printf("<error fetching parameter %d>\n", param); printf("<error fetching parameter %lu>\n", param);
} }
static void static int
do_set(const char *name, const char *val, bool fail_on_not_found) do_set(const char *name, const char *val, bool fail_on_not_found)
{ {
int32_t i; 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 */ /* set nothing if parameter cannot be found */
if (param == PARAM_INVALID) { if (param == PARAM_INVALID) {
/* param not found - fail silenty in scripts as it prevents booting */ /* 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: ", printf("%c %s: ",
@@ -386,13 +397,14 @@ do_set(const char *name, const char *val, bool fail_on_not_found)
break; break;
default: default:
errx(1, "<unknown / unsupported type %d>\n", 0 + param_type(param)); warnx("<unknown / unsupported type %d>\n", 0 + param_type(param));
return 1;
} }
exit(0); return 0;
} }
static void static int
do_compare(const char *name, char *vals[], unsigned comparisons) do_compare(const char *name, char *vals[], unsigned comparisons)
{ {
int32_t i; int32_t i;
@@ -402,7 +414,8 @@ do_compare(const char *name, char *vals[], unsigned comparisons)
/* set nothing if parameter cannot be found */ /* set nothing if parameter cannot be found */
if (param == PARAM_INVALID) { if (param == PARAM_INVALID) {
/* param not found */ /* 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; break;
default: default:
errx(1, "<unknown / unsupported type %d>\n", 0 + param_type(param)); warnx("<unknown / unsupported type %d>\n", 0 + param_type(param));
return 1;
} }
if (ret == 0) { if (ret == 0) {
@@ -460,10 +474,10 @@ do_compare(const char *name, char *vals[], unsigned comparisons)
param_name(param)); param_name(param));
} }
exit(ret); return ret;
} }
static void static int
do_reset(const char *excludes[], int num_excludes) do_reset(const char *excludes[], int num_excludes)
{ {
if (num_excludes > 0) { if (num_excludes > 0) {
@@ -475,17 +489,14 @@ do_reset(const char *excludes[], int num_excludes)
if (param_save_default()) { if (param_save_default()) {
warnx("Param export failed."); warnx("Param export failed.");
exit(1); return 1;
} else {
exit(0);
} }
return 0;
} }
static void static int
do_reset_nostart(const char *excludes[], int num_excludes) do_reset_nostart(const char *excludes[], int num_excludes)
{ {
int32_t autostart; int32_t autostart;
int32_t autoconfig; int32_t autoconfig;
@@ -504,9 +515,8 @@ do_reset_nostart(const char *excludes[], int num_excludes)
if (param_save_default()) { if (param_save_default()) {
warnx("Param export failed."); warnx("Param export failed.");
exit(1); return 1;
} else {
exit(0);
} }
return 0;
} }