MAJOR: arg: converts uint and sint in sint
This patch removes the 32 bits unsigned integer and the 32 bit signed
integer. It replaces these types by a unique type 64 bit signed.
diff --git a/src/arg.c b/src/arg.c
index e212f6b..93389e1 100644
--- a/src/arg.c
+++ b/src/arg.c
@@ -19,8 +19,7 @@
const char *arg_type_names[ARGT_NBTYPES] = {
[ARGT_STOP] = "end of arguments",
- [ARGT_UINT] = "unsigned integer",
- [ARGT_SINT] = "signed integer",
+ [ARGT_SINT] = "integer",
[ARGT_STR] = "string",
[ARGT_IPV4] = "IPv4 address",
[ARGT_MSK4] = "IPv4 mask",
@@ -125,6 +124,8 @@
/* Note: empty arguments after a comma always exist. */
while (pos < nbarg) {
+ unsigned int uint;
+
beg = in;
while (len && *in != ',') {
in++;
@@ -145,28 +146,10 @@
case ARGT_SINT:
if (in == beg) // empty number
goto empty_err;
- else if (*beg < '0' || *beg > '9') {
- beg++;
- arg->data.sint = read_uint(&beg, in);
- if (beg < in)
- goto parse_err;
- if (*word == '-')
- arg->data.sint = -arg->data.sint;
- else if (*word != '+') // invalid first character
- goto parse_err;
- break;
- }
-
- arg->type = ARGT_UINT;
- /* fall through ARGT_UINT if no sign is present */
-
- case ARGT_UINT:
- if (in == beg) // empty number
- goto empty_err;
-
- arg->data.uint = read_uint(&beg, in);
+ arg->data.sint = read_int64(&beg, in);
if (beg < in)
goto parse_err;
+ arg->type = ARGT_SINT;
break;
case ARGT_FE:
@@ -226,22 +209,23 @@
if (in == beg) // empty time
goto empty_err;
- ptr_err = parse_time_err(word, &arg->data.uint, TIME_UNIT_MS);
+ ptr_err = parse_time_err(word, &uint, TIME_UNIT_MS);
if (ptr_err)
goto parse_err;
-
- arg->type = ARGT_UINT;
+ arg->data.sint = uint;
+ arg->type = ARGT_SINT;
break;
case ARGT_SIZE:
if (in == beg) // empty size
goto empty_err;
- ptr_err = parse_size_err(word, &arg->data.uint);
+ ptr_err = parse_size_err(word, &uint);
if (ptr_err)
goto parse_err;
- arg->type = ARGT_UINT;
+ arg->data.sint = uint;
+ arg->type = ARGT_SINT;
break;
/* FIXME: other types need to be implemented here */