init: parsing
This commit is contained in:
59
src/parsing.c
Normal file
59
src/parsing.c
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#include "parsing.h"
|
||||||
|
#include "print.h"
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
static struct param parameters[] = {
|
||||||
|
{NULL, "?", OPTION, false},
|
||||||
|
{NULL, "v", OPTION, false},
|
||||||
|
{NULL, "f", OPTION, false},
|
||||||
|
{NULL, "n", OPTION, false},
|
||||||
|
{NULL, "w", ARGUMENT, NULL},
|
||||||
|
{NULL, "W",ARGUMENT, NULL},
|
||||||
|
{"ttl", NULL, ARGUMENT, "116"},
|
||||||
|
{NULL, NULL, NULL, NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct param *get_parameter(struct param parameters[], const char *str)
|
||||||
|
{
|
||||||
|
size_t count = str[0] == '-' + str[1] == '-';
|
||||||
|
for (size_t i = 0; parameters[i].name || parameters[i].alias; i++)
|
||||||
|
{
|
||||||
|
if (count == 2 && !strcmp(parameters[i].name, str + count))
|
||||||
|
return parameters + i;
|
||||||
|
else if (count == 1 && !strcmp(parameters[i].alias, str + count))
|
||||||
|
return parameters + i;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parsing(const char * const *av)
|
||||||
|
{
|
||||||
|
char *host;
|
||||||
|
for (size_t i = 0; av[i]; i++)
|
||||||
|
{
|
||||||
|
struct param *parameter = get_parameter(parameters, av[i]);
|
||||||
|
if (parameter)
|
||||||
|
{
|
||||||
|
if (parameter->type == OPTION)
|
||||||
|
parameter->value = (void*)true;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (av[i] == NULL)
|
||||||
|
{
|
||||||
|
print_err("%s: requirement argument", av[i]);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
parameter->value = (char*) av[++i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
host = (char*) av[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
13
src/parsing.h
Normal file
13
src/parsing.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
OPTION,
|
||||||
|
ARGUMENT,
|
||||||
|
} e_type;
|
||||||
|
|
||||||
|
struct param {
|
||||||
|
const char *name;
|
||||||
|
const char *alias;
|
||||||
|
e_type type;
|
||||||
|
void *value;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user