PARSER. Field 2 in ARGP. Order of parameters: KEY, ARG, STATE. */
| 45 | Order of parameters: KEY, ARG, STATE. |
| 46 | */ |
| 47 | static error_t parse_opt(int key, char *arg, struct argp_state *state) { |
| 48 | struct arguments *arguments = state->input; |
| 49 | |
| 50 | switch (key) { |
| 51 | case OPTION_TRACE_TYPE_PARAMS: |
| 52 | arguments->trace_type_params = arg; |
| 53 | break; |
| 54 | case OPTION_OUTPUT_PATH: |
| 55 | strncpy(arguments->ofilepath, arg, OFILEPATH_LEN - 1); |
| 56 | arguments->ofilepath[OFILEPATH_LEN - 1] = '\0'; |
| 57 | break; |
| 58 | case OPTION_NUM_REQ: |
| 59 | arguments->n_req = atoi(arg); |
| 60 | break; |
| 61 | case OPTION_VERBOSE: |
| 62 | arguments->verbose = is_true(arg) ? true : false; |
| 63 | break; |
| 64 | case ARGP_KEY_ARG: |
| 65 | if (state->arg_num >= N_ARGS) { |
| 66 | printf("found too many arguments, current %s\n", arg); |
| 67 | argp_usage(state); |
| 68 | exit(1); |
| 69 | } |
| 70 | arguments->args[state->arg_num] = arg; |
| 71 | break; |
| 72 | case ARGP_KEY_END: |
| 73 | if (state->arg_num < N_ARGS) { |
| 74 | printf("not enough arguments found\n"); |
| 75 | argp_usage(state); |
| 76 | exit(1); |
| 77 | } |
| 78 | break; |
| 79 | default: |
| 80 | return ARGP_ERR_UNKNOWN; |
| 81 | } |
| 82 | return 0; |
| 83 | } |
| 84 | |
| 85 | /* |
| 86 | ARGS_DOC. Field 3 in ARGP. |