gargoyle/src/gargoyle.c

47 lines
975 B
C
Raw Normal View History

2022-06-19 01:13:10 +00:00
#include <gargoyle.h>
#include <stddef.h>
2022-06-19 01:13:10 +00:00
2022-06-19 09:02:11 +00:00
uint8_t gargoyle_digest_args(uint16_t optc, struct gargoyle_opt *optv, int *argc, char ***argv, uint8_t flags) {
if(!(flags & GARGOYLE_DIGEST_ALL)) {
*argc -= 1;
*argv += 1;
}
while(1) {
2022-06-19 01:13:10 +00:00
const char *arg = **argv;
if(!arg || *arg != '-' || !*(arg + 1)) {
return GARGOYLE_ERR_SUCCESS;
2022-06-19 01:13:10 +00:00
} else if(*arg == '-' && *(arg + 1) == '-' && !*(arg + 2)) {
*argc -= 1;
*argv += 1;
return GARGOYLE_ERR_SUCCESS;
}
struct gargoyle_opt *opt = NULL;
if(*(arg + 1) == '-') {
opt = gargoyle_find_brand(optc, optv, arg + 2);
if(!opt) {
return GARGOYLE_ERR_UNKNOWN_OPT;
}
} else {
const char *idx = arg + 1;
for(; *idx; idx += 1) {
opt = gargoyle_find_emblem(optc, optv, *idx);
if(!opt) {
return GARGOYLE_ERR_UNKNOWN_OPT;
}
}
2022-06-19 01:13:10 +00:00
}
*argc -= 1;
*argv += 1;
}
return GARGOYLE_ERR_SUCCESS;
2022-06-19 01:13:10 +00:00
}