#include #include #include #include #include #include "args.h" #include "util.h" void args_add(args_t *args, char *name) { if (NULL == args->list) args->list = malloc(sizeof(arg_t) * (args->count + 1)); else args->list = realloc(args->list, sizeof(arg_t) * (args->count + 1)); args->list[args->count].name = name; args->list[args->count++].value = NULL; } void args_add_value(args_t *args, char *value) { if (NULL != args->list && args->list[args->count - 1].value == NULL) { args->list[args->count - 1].value = value; return; } if (NULL == args->list) args->list = malloc(sizeof(arg_t) * (args->count + 1)); else args->list = realloc(args->list, sizeof(arg_t) * (args->count + 1)); args->list[args->count].name = NULL; args->list[args->count++].value = value; } args_t *args_parse(int argc, char *argv[]) { args_t *args = malloc(sizeof(args_t)); bzero(args, sizeof(args_t)); if (argc <= 1) return args; for (int i = 1; i < argc; i++) { if (startswith(argv[i], "--")) args_add(args, argv[i] + 2); else args_add_value(args, argv[i]); } return args; } void args_free(args_t *args) { free(args->list); free(args); } char *args_get_string(args_t *args, char *name) { for (int i = 0; i < args->count; i++) { if (NULL == args->list[i].name) continue; if (eq(args->list[i].name, name)) return args->list[i].value; } return NULL; } bool args_get_bool(args_t *args, char *name) { for (int i = 0; i < args->count; i++) { if (NULL == args->list[i].name) continue; if (eq(args->list[i].name, name)) return true; } return false; } int args_get_int(args_t *args, char *name) { for (int i = 0; i < args->count; i++) { if (NULL == args->list[i].name) continue; if (eq(args->list[i].name, name)) return atoi(args->list[i].value); } return -1; }