hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/tools/lib/subcmd/parse-options.c
....@@ -116,6 +116,7 @@
116116 case OPTION_INTEGER:
117117 case OPTION_UINTEGER:
118118 case OPTION_LONG:
119
+ case OPTION_ULONG:
119120 case OPTION_U64:
120121 default:
121122 break;
....@@ -166,6 +167,7 @@
166167 case OPTION_INTEGER:
167168 case OPTION_UINTEGER:
168169 case OPTION_LONG:
170
+ case OPTION_ULONG:
169171 case OPTION_U64:
170172 default:
171173 break;
....@@ -235,6 +237,9 @@
235237 return err;
236238
237239 case OPTION_CALLBACK:
240
+ if (opt->set)
241
+ *(bool *)opt->set = true;
242
+
238243 if (unset)
239244 return (*opt->callback)(opt, NULL, 1) ? (-1) : 0;
240245 if (opt->flags & PARSE_OPT_NOARG)
....@@ -291,6 +296,22 @@
291296 if (get_arg(p, opt, flags, &arg))
292297 return -1;
293298 *(long *)opt->value = strtol(arg, (char **)&s, 10);
299
+ if (*s)
300
+ return opterror(opt, "expects a numerical value", flags);
301
+ return 0;
302
+
303
+ case OPTION_ULONG:
304
+ if (unset) {
305
+ *(unsigned long *)opt->value = 0;
306
+ return 0;
307
+ }
308
+ if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
309
+ *(unsigned long *)opt->value = opt->defval;
310
+ return 0;
311
+ }
312
+ if (get_arg(p, opt, flags, &arg))
313
+ return -1;
314
+ *(unsigned long *)opt->value = strtoul(arg, (char **)&s, 10);
294315 if (*s)
295316 return opterror(opt, "expects a numerical value", flags);
296317 return 0;
....@@ -703,6 +724,7 @@
703724 case OPTION_ARGUMENT:
704725 break;
705726 case OPTION_LONG:
727
+ case OPTION_ULONG:
706728 case OPTION_U64:
707729 case OPTION_INTEGER:
708730 case OPTION_UINTEGER: