diff --git a/userspace/libwr/include/libwr/util.h b/userspace/libwr/include/libwr/util.h index c56018f594d6ca383c4015db2babfc600f289f57..1c8068c15fe3a6fe72f51819e7f39cbfb0b785e9 100644 --- a/userspace/libwr/include/libwr/util.h +++ b/userspace/libwr/include/libwr/util.h @@ -8,7 +8,10 @@ #include <unistd.h> #include <sys/mman.h> -#define atoidef(str,def) (str)?atoi(str):def +#define atoidef(argc, argv, param_i, def) (argc > (param_i) ? \ + atoi(argv[(param_i)]) : (def)) +#define strtoldef(argc, argv, param_i, def) (argc > (param_i) ? \ + strtol(argv[(param_i)], NULL, 0) : (def)) void shw_udelay_init(void); void shw_udelay(uint32_t microseconds); diff --git a/userspace/tools/rtu_stat.c b/userspace/tools/rtu_stat.c index 5c5cb02687f98513198d4e0e86ce0e3c8ec348a9..92bb44a124f460e3e6b5f1324ea57b3c2524e933 100644 --- a/userspace/tools/rtu_stat.c +++ b/userspace/tools/rtu_stat.c @@ -312,11 +312,11 @@ int main(int argc, char **argv) if(argc>1) { if (strcmp(argv[1], "remove") == 0) { - i=atoidef(argv[2],-1); + i = atoidef(argc, argv, 2, -1); /* interface number 1..18*/ if ((0 < i && i <= 18) && (rtudexp_clear_entries(i - 1, - atoidef(argv[3], 0) + atoidef(argc, argv, 3, 0) ) == 0)) { /* ok */ isok = 1; @@ -330,7 +330,7 @@ int main(int argc, char **argv) if ((argc > 3) && (rtudexp_add_entry(argv[2], atoi(argv[3]) - 1, - atoidef(argv[4], 0) + atoidef(argc, argv, 4, 0) ) == 0)) { /* ok */ isok = 1; @@ -344,10 +344,10 @@ int main(int argc, char **argv) && (rtudexp_vlan_entry(atoi(argv[2]), atoi(argv[3]) - 1, argv[4], - atoidef(argv[5], 0), - atoidef(argv[6], 0), - atoidef(argv[7], 0), - atoidef(argv[8], 0) + atoidef(argc, argv, 5, 0), + atoidef(argc, argv, 6, 0), + atoidef(argc, argv, 7, 0), + atoidef(argc, argv, 8, 0) ) == 0)) { /* ok */ isok = 1;