From 315d6e9648ca127538ad6655a042d0353d8beba1 Mon Sep 17 00:00:00 2001 From: wubijie Date: Sat, 1 Jul 2023 14:13:45 +0800 Subject: [PATCH] Command line parameter parsing --- src/drsnoop/drsnoop.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/drsnoop/drsnoop.c b/src/drsnoop/drsnoop.c index 5796a78c..fa9fbf3d 100644 --- a/src/drsnoop/drsnoop.c +++ b/src/drsnoop/drsnoop.c @@ -37,3 +37,44 @@ static const struct argp_option opts[] = { { NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" }, {} }; + +static int pagesize; + +static error_t parse_arg(int key, char *arg, struct argp_state *state) +{ + struct argument *argument = state->input; + + switch (key) { + case 'h': + argp_state_help(state, stderr, ARGP_HELP_STD_HELP); + break; + case 'v': + verbose = true; + break; + case 'd': + errno = 0; + argument->duration = strtol(arg, NULL, 10); + if (errno || argument->duration <= 0) { + warning("Invalid Duration: %s\n", arg); + argp_usage(state); + } + break; + case 'e': + argument->extended = true; + break; + case 'p': + argument->pid = argp_parse_pid(key, arg, state); + break; + case 't': + errno = 0; + argument->tid = strtol(arg, NULL, 10); + if (errno || argument->tid <= 0) { + warning("Invalid TID: %s\n", arg); + argp_usage(state); + } + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} -- Gitee