- if (!arg || !*arg)
- return -1;
- res = strtoul(arg, &ptr, base);
- if (!ptr || ptr == arg || *ptr || res > 0xFF)
- return -1;
- *val = res;
- return 0;
-}
-
-int get_s16(int16_t * val, char *arg, int base)
-{
- long res;
- char *ptr;
-
- if (!arg || !*arg)
- return -1;
- res = strtol(arg, &ptr, base);
- if (!ptr || ptr == arg || *ptr || res > 0x7FFF || res < -0x8000)
- return -1;
- *val = res;
- return 0;
-}
-
-int get_s8(int8_t * val, char *arg, int base)
-{
- long res;
- char *ptr;
-
- if (!arg || !*arg)
- return -1;
- res = strtol(arg, &ptr, base);
- if (!ptr || ptr == arg || *ptr || res > 0x7F || res < -0x80)
- return -1;
- *val = res;
- return 0;
+ if (*arg) {
+ res = strtoul(arg, &ptr, 0);
+//FIXME: "" will be accepted too, is it correct?!
+ if (!*ptr && res <= 0xFFFF) {
+ return res;
+ }
+ }
+ invarg(arg, errmsg); /* does not return */