Fix #8
This commit is contained in:
parent
f8003f67b5
commit
11bf68274d
10 changed files with 138 additions and 138 deletions
|
@ -6,7 +6,7 @@
|
||||||
#include <gargoyle/privledge.h>
|
#include <gargoyle/privledge.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc, char ***argv, struct gargoyle_err *err, gargoyle_flag_type flags);
|
uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_optn *optv, int *argc, char ***argv, struct gargoyle_err *err, gargoyle_flag_type flags);
|
||||||
uint8_t gargoyle_digest_envh(uint16_t optc, struct gargoyle_opt *optv, const char *prefix, uint16_t prefix_sz, char ***envh, struct gargoyle_err *err, gargoyle_flag_type flags);
|
uint8_t gargoyle_digest_envh(uint16_t optc, struct gargoyle_optn *optv, const char *prefix, uint16_t prefix_sz, char ***envh, struct gargoyle_err *err, gargoyle_flag_type flags);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct gargoyle_opt {
|
struct gargoyle_optn {
|
||||||
const char *brand;
|
const char *brand;
|
||||||
uint16_t brand_sz;
|
uint16_t brand_sz;
|
||||||
const char emblem;
|
const char emblem;
|
||||||
|
@ -12,9 +12,9 @@ struct gargoyle_opt {
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GARGOYLE_CS_OPT(brand, val) GARGOYLE_MK_OPT(brand), 0[brand], &val[0], sizeof(val)
|
#define GARGOYLE_CS_OPTN(brand, val) GARGOYLE_MK_OPTN(brand), 0[brand], &val[0], sizeof(val)
|
||||||
#define GARGOYLE_EM_OPT(brand, emblem, val) GARGOYLE_MK_OPT(brand), emblem, &val, sizeof(val)
|
#define GARGOYLE_EM_OPTN(brand, emblem, val) GARGOYLE_MK_OPTN(brand), emblem, &val, sizeof(val)
|
||||||
#define GARGOYLE_EZ_OPT(brand, val) GARGOYLE_MK_OPT(brand), 0[brand], &val, sizeof(val)
|
#define GARGOYLE_EZ_OPTN(brand, val) GARGOYLE_MK_OPTN(brand), 0[brand], &val, sizeof(val)
|
||||||
#define GARGOYLE_MK_OPT(brand) brand, (sizeof(brand) - 1)
|
#define GARGOYLE_MK_OPTN(brand) brand, (sizeof(brand) - 1)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include <gargoyle/codex.h>
|
#include <gargoyle/codex.h>
|
||||||
#include <gargoyle/privledge.h>
|
#include <gargoyle/privledge.h>
|
||||||
|
|
||||||
uint8_t gargoyle_from_bool(struct gargoyle_opt *opt, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags);
|
uint8_t gargoyle_from_bool(struct gargoyle_optn *optn, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags);
|
||||||
uint8_t gargoyle_from_rope(struct gargoyle_opt *opt, const char *brand_val, gargoyle_flag_type flags);
|
uint8_t gargoyle_from_rope(struct gargoyle_optn *optn, const char *brand_val, gargoyle_flag_type flags);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <gargoyle/privledge.h>
|
#include <gargoyle/privledge.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct gargoyle_opt *gargoyle_find_brand(uint16_t optc, struct gargoyle_opt *optv, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags);
|
struct gargoyle_optn *gargoyle_find_brand(uint16_t optc, struct gargoyle_optn *optv, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags);
|
||||||
struct gargoyle_opt *gargoyle_find_emblem(uint16_t optc, struct gargoyle_opt *optv, const char emblem, gargoyle_flag_type flags);
|
struct gargoyle_optn *gargoyle_find_emblem(uint16_t optc, struct gargoyle_optn *optv, const char emblem, gargoyle_flag_type flags);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
|
||||||
uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc, char ***argv, struct gargoyle_err *err, gargoyle_flag_type flags) {
|
uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_optn *optv, int *argc, char ***argv, struct gargoyle_err *err, gargoyle_flag_type flags) {
|
||||||
if(!(flags & GARGOYLE_FLG_GREED)) {
|
if(!(flags & GARGOYLE_FLG_GREED)) {
|
||||||
*argc -= 1;
|
*argc -= 1;
|
||||||
*argv += 1;
|
*argv += 1;
|
||||||
|
@ -28,13 +28,13 @@ uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc
|
||||||
return GARGOYLE_ERR_SUCCESS;
|
return GARGOYLE_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gargoyle_opt *opt = NULL;
|
struct gargoyle_optn *optn = NULL;
|
||||||
|
|
||||||
if(*(arg + 1) == '-') {
|
if(*(arg + 1) == '-') {
|
||||||
const char *brand = arg + 2;
|
const char *brand = arg + 2;
|
||||||
opt = gargoyle_find_brand(optc, optv, brand, NULL, 0, flags);
|
optn = gargoyle_find_brand(optc, optv, brand, NULL, 0, flags);
|
||||||
|
|
||||||
if(!opt) {
|
if(!optn) {
|
||||||
if(flags & GARGOYLE_FLG_STRCT) {
|
if(flags & GARGOYLE_FLG_STRCT) {
|
||||||
char *eql = index(brand, '=');
|
char *eql = index(brand, '=');
|
||||||
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_UNKNOWN_OPTN, "unknown option '--%.*s'", (int) (eql - brand), brand);
|
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_UNKNOWN_OPTN, "unknown option '--%.*s'", (int) (eql - brand), brand);
|
||||||
|
@ -49,28 +49,28 @@ uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc
|
||||||
uint8_t res = 0;
|
uint8_t res = 0;
|
||||||
const char *val = NULL;
|
const char *val = NULL;
|
||||||
|
|
||||||
if(opt->type & GARGOYLE_TYPE_BOOL) {
|
if(optn->type & GARGOYLE_TYPE_BOOL) {
|
||||||
res = gargoyle_from_bool(opt, brand, NULL, 0, flags);
|
res = gargoyle_from_bool(optn, brand, NULL, 0, flags);
|
||||||
} else if(*(brand + opt->brand_sz) == '=') {
|
} else if(*(brand + optn->brand_sz) == '=') {
|
||||||
val = brand + opt->brand_sz + 1;
|
val = brand + optn->brand_sz + 1;
|
||||||
res = gargoyle_from_rope(opt, val, flags);
|
res = gargoyle_from_rope(optn, val, flags);
|
||||||
} else {
|
} else {
|
||||||
if(!*(*argv + 1)) {
|
if(!*(*argv + 1)) {
|
||||||
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_VAL_REQUIRED, "option '--%s' requires a value", opt->brand);
|
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_VAL_REQUIRED, "option '--%s' requires a value", optn->brand);
|
||||||
return err->code;
|
return err->code;
|
||||||
}
|
}
|
||||||
|
|
||||||
*argc -= 1;
|
*argc -= 1;
|
||||||
*argv += 1;
|
*argv += 1;
|
||||||
val = **argv;
|
val = **argv;
|
||||||
res = gargoyle_from_rope(opt, val, flags);
|
res = gargoyle_from_rope(optn, val, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(res) {
|
if(res) {
|
||||||
if(val) {
|
if(val) {
|
||||||
GARGOYLE_MK_ERR(err, res, "invalid value '%s' for option '--%s'", val, opt->brand);
|
GARGOYLE_MK_ERR(err, res, "invalid value '%s' for option '--%s'", val, optn->brand);
|
||||||
} else {
|
} else {
|
||||||
GARGOYLE_MK_ERR(err, res, "invalid value for option '--%s'", opt->brand);
|
GARGOYLE_MK_ERR(err, res, "invalid value for option '--%s'", optn->brand);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err->code;
|
return err->code;
|
||||||
|
@ -79,9 +79,9 @@ uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc
|
||||||
const char *idx = arg + 1;
|
const char *idx = arg + 1;
|
||||||
|
|
||||||
for(; *idx; idx += 1) {
|
for(; *idx; idx += 1) {
|
||||||
opt = gargoyle_find_emblem(optc, optv, *idx, flags);
|
optn = gargoyle_find_emblem(optc, optv, *idx, flags);
|
||||||
|
|
||||||
if(!opt) {
|
if(!optn) {
|
||||||
if(flags & GARGOYLE_FLG_STRCT) {
|
if(flags & GARGOYLE_FLG_STRCT) {
|
||||||
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_UNKNOWN_OPTN, "unknown option '-%c'", *idx);
|
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_UNKNOWN_OPTN, "unknown option '-%c'", *idx);
|
||||||
return err->code;
|
return err->code;
|
||||||
|
@ -94,29 +94,29 @@ uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc
|
||||||
uint8_t res = 0;
|
uint8_t res = 0;
|
||||||
const char *val = NULL;
|
const char *val = NULL;
|
||||||
|
|
||||||
if(opt->type & GARGOYLE_TYPE_BOOL) {
|
if(optn->type & GARGOYLE_TYPE_BOOL) {
|
||||||
res = gargoyle_from_bool(opt, "", NULL, 0, flags);
|
res = gargoyle_from_bool(optn, "", NULL, 0, flags);
|
||||||
} else if(*(idx + 1)) {
|
} else if(*(idx + 1)) {
|
||||||
val = idx + 1;
|
val = idx + 1;
|
||||||
res = gargoyle_from_rope(opt, val, flags);
|
res = gargoyle_from_rope(optn, val, flags);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if(!*(*argv + 1)) {
|
if(!*(*argv + 1)) {
|
||||||
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_VAL_REQUIRED, "option '-%c' requires a value", opt->emblem);
|
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_VAL_REQUIRED, "option '-%c' requires a value", optn->emblem);
|
||||||
return err->code;
|
return err->code;
|
||||||
}
|
}
|
||||||
|
|
||||||
*argc -= 1;
|
*argc -= 1;
|
||||||
*argv += 1;
|
*argv += 1;
|
||||||
val = **argv;
|
val = **argv;
|
||||||
res = gargoyle_from_rope(opt, val, flags);
|
res = gargoyle_from_rope(optn, val, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(res) {
|
if(res) {
|
||||||
if(val) {
|
if(val) {
|
||||||
GARGOYLE_MK_ERR(err, res, "invalid value '%s' for option '-%c'", val, opt->emblem);
|
GARGOYLE_MK_ERR(err, res, "invalid value '%s' for option '-%c'", val, optn->emblem);
|
||||||
} else {
|
} else {
|
||||||
GARGOYLE_MK_ERR(err, res, "invalid value for option '-%c'", opt->emblem);
|
GARGOYLE_MK_ERR(err, res, "invalid value for option '-%c'", optn->emblem);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err->code;
|
return err->code;
|
||||||
|
@ -131,7 +131,7 @@ uint8_t gargoyle_digest_argv(uint16_t optc, struct gargoyle_opt *optv, int *argc
|
||||||
return GARGOYLE_ERR_SUCCESS;
|
return GARGOYLE_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t gargoyle_digest_envh(uint16_t optc, struct gargoyle_opt *optv, const char *prefix, uint16_t prefix_sz, char ***envh, struct gargoyle_err *err, gargoyle_flag_type flags) {
|
uint8_t gargoyle_digest_envh(uint16_t optc, struct gargoyle_optn *optv, const char *prefix, uint16_t prefix_sz, char ***envh, struct gargoyle_err *err, gargoyle_flag_type flags) {
|
||||||
if(flags & GARGOYLE_FLG_BCASE) {
|
if(flags & GARGOYLE_FLG_BCASE) {
|
||||||
flags |= GARGOYLE_FLG_ICASE;
|
flags |= GARGOYLE_FLG_ICASE;
|
||||||
}
|
}
|
||||||
|
@ -146,9 +146,9 @@ uint8_t gargoyle_digest_envh(uint16_t optc, struct gargoyle_opt *optv, const cha
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *brand = var + prefix_sz + 1;
|
const char *brand = var + prefix_sz + 1;
|
||||||
struct gargoyle_opt *opt = gargoyle_find_brand(optc, optv, brand, "NO_", 3, flags);
|
struct gargoyle_optn *optn = gargoyle_find_brand(optc, optv, brand, "NO_", 3, flags);
|
||||||
|
|
||||||
if(!opt) {
|
if(!optn) {
|
||||||
if(flags & GARGOYLE_FLG_STRCT) {
|
if(flags & GARGOYLE_FLG_STRCT) {
|
||||||
char *eql = index(brand, '=');
|
char *eql = index(brand, '=');
|
||||||
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_UNKNOWN_OPTN, "unknown variable '%.*s'", (int) (eql - brand), brand);
|
GARGOYLE_MK_ERR(err, GARGOYLE_ERR_UNKNOWN_OPTN, "unknown variable '%.*s'", (int) (eql - brand), brand);
|
||||||
|
@ -160,14 +160,14 @@ uint8_t gargoyle_digest_envh(uint16_t optc, struct gargoyle_opt *optv, const cha
|
||||||
|
|
||||||
uint8_t res = 0;
|
uint8_t res = 0;
|
||||||
|
|
||||||
if(opt->type & GARGOYLE_TYPE_BOOL) {
|
if(optn->type & GARGOYLE_TYPE_BOOL) {
|
||||||
res = gargoyle_from_bool(opt, brand, "NO_", 3, flags);
|
res = gargoyle_from_bool(optn, brand, "NO_", 3, flags);
|
||||||
} else {
|
} else {
|
||||||
res = gargoyle_from_rope(opt, brand + opt->brand_sz + 1, flags);
|
res = gargoyle_from_rope(optn, brand + optn->brand_sz + 1, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(res) {
|
if(res) {
|
||||||
GARGOYLE_MK_ERR(err, res, "invalid value '%s' for variable '%.*s'", brand + opt->brand_sz + 1, opt->brand_sz, opt->brand);
|
GARGOYLE_MK_ERR(err, res, "invalid value '%s' for variable '%.*s'", brand + optn->brand_sz + 1, optn->brand_sz, optn->brand);
|
||||||
return err->code;
|
return err->code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <gargoyle/twine.h>
|
#include <gargoyle/twine.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
uint8_t gargoyle_from_bool(struct gargoyle_opt *opt, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags) {
|
uint8_t gargoyle_from_bool(struct gargoyle_optn *opt, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags) {
|
||||||
if(!neg) {
|
if(!neg) {
|
||||||
neg = "no-";
|
neg = "no-";
|
||||||
neg_sz = 3;
|
neg_sz = 3;
|
||||||
|
@ -17,7 +17,7 @@ uint8_t gargoyle_from_bool(struct gargoyle_opt *opt, const char *brand, const ch
|
||||||
return GARGOYLE_ERR_SUCCESS;
|
return GARGOYLE_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t gargoyle_from_rope(struct gargoyle_opt *opt, const char *brand_val, gargoyle_flag_type flags) {
|
uint8_t gargoyle_from_rope(struct gargoyle_optn *opt, const char *brand_val, gargoyle_flag_type flags) {
|
||||||
if(opt->type & GARGOYLE_TYPE_UINT) {
|
if(opt->type & GARGOYLE_TYPE_UINT) {
|
||||||
char *end = NULL;
|
char *end = NULL;
|
||||||
uint64_t *val = opt->val;
|
uint64_t *val = opt->val;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include <gargoyle/twine.h>
|
#include <gargoyle/twine.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
struct gargoyle_opt *gargoyle_find_brand(uint16_t optc, struct gargoyle_opt *optv, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags) {
|
struct gargoyle_optn *gargoyle_find_brand(uint16_t optc, struct gargoyle_optn *optv, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags) {
|
||||||
if(!neg) {
|
if(!neg) {
|
||||||
neg = "no-";
|
neg = "no-";
|
||||||
neg_sz = 3;
|
neg_sz = 3;
|
||||||
|
@ -28,7 +28,7 @@ struct gargoyle_opt *gargoyle_find_brand(uint16_t optc, struct gargoyle_opt *opt
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gargoyle_opt *gargoyle_find_emblem(uint16_t optc, struct gargoyle_opt *optv, const char emblem, gargoyle_flag_type flags) {
|
struct gargoyle_optn *gargoyle_find_emblem(uint16_t optc, struct gargoyle_optn *optv, const char emblem, gargoyle_flag_type flags) {
|
||||||
for(; optc; optc -= 1, optv += 1) {
|
for(; optc; optc -= 1, optv += 1) {
|
||||||
if(emblem == optv->emblem) {
|
if(emblem == optv->emblem) {
|
||||||
return optv;
|
return optv;
|
||||||
|
|
|
@ -20,12 +20,12 @@ void gargoyle_test_digest_envh(void) {
|
||||||
uint64_t uint_val = 0;
|
uint64_t uint_val = 0;
|
||||||
int64_t sint_val = 0;
|
int64_t sint_val = 0;
|
||||||
|
|
||||||
struct gargoyle_opt optv[] = {
|
struct gargoyle_optn optv[] = {
|
||||||
{ GARGOYLE_EZ_OPT("uint", uint_val), GARGOYLE_TYPE_UINT },
|
{ GARGOYLE_EZ_OPTN("uint", uint_val), GARGOYLE_TYPE_UINT },
|
||||||
{ GARGOYLE_EZ_OPT("sint", sint_val), GARGOYLE_TYPE_SINT }
|
{ GARGOYLE_EZ_OPTN("sint", sint_val), GARGOYLE_TYPE_SINT }
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_opt);
|
uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_optn);
|
||||||
|
|
||||||
char *dirty_env[] = {
|
char *dirty_env[] = {
|
||||||
"GARGOYLE_*(#&(%&)*=",
|
"GARGOYLE_*(#&(%&)*=",
|
||||||
|
@ -74,7 +74,7 @@ void gargoyle_test_digest_envh(void) {
|
||||||
"GARGOYLE_sint=-2022",
|
"GARGOYLE_sint=-2022",
|
||||||
"GARGOYLE_uint=42",
|
"GARGOYLE_uint=42",
|
||||||
"GARGOYLE_UINT=43",
|
"GARGOYLE_UINT=43",
|
||||||
"GARGOYLE_NOT_AN_OPT=racket",
|
"GARGOYLE_NOT_AN_OPTN=racket",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ int clean_suite_scribe(void) {
|
||||||
void scribe_test_from_bool(void) {
|
void scribe_test_from_bool(void) {
|
||||||
uint8_t foo = 0;
|
uint8_t foo = 0;
|
||||||
|
|
||||||
struct gargoyle_opt opts[] = {
|
struct gargoyle_optn opts[] = {
|
||||||
{ GARGOYLE_EZ_OPT("foo", foo), GARGOYLE_TYPE_BOOL }
|
{ GARGOYLE_EZ_OPTN("foo", foo), GARGOYLE_TYPE_BOOL }
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t res = gargoyle_from_bool(opts, "", NULL, 0, 0);
|
uint8_t res = gargoyle_from_bool(opts, "", NULL, 0, 0);
|
||||||
|
@ -551,11 +551,11 @@ void scribe_test_from_rope(void) {
|
||||||
double dble_val = 0;
|
double dble_val = 0;
|
||||||
char rope_val[10];
|
char rope_val[10];
|
||||||
|
|
||||||
struct gargoyle_opt opts[] = {
|
struct gargoyle_optn opts[] = {
|
||||||
{ GARGOYLE_EZ_OPT("uint", uint_val), GARGOYLE_TYPE_UINT },
|
{ GARGOYLE_EZ_OPTN("uint", uint_val), GARGOYLE_TYPE_UINT },
|
||||||
{ GARGOYLE_EZ_OPT("sint", sint_val), GARGOYLE_TYPE_SINT },
|
{ GARGOYLE_EZ_OPTN("sint", sint_val), GARGOYLE_TYPE_SINT },
|
||||||
{ GARGOYLE_EZ_OPT("dble", dble_val), GARGOYLE_TYPE_DBLE },
|
{ GARGOYLE_EZ_OPTN("dble", dble_val), GARGOYLE_TYPE_DBLE },
|
||||||
{ GARGOYLE_CS_OPT("rope", rope_val), GARGOYLE_TYPE_ROPE }
|
{ GARGOYLE_CS_OPTN("rope", rope_val), GARGOYLE_TYPE_ROPE }
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t res = gargoyle_from_rope(&opts[0], "42", 0);
|
uint8_t res = gargoyle_from_rope(&opts[0], "42", 0);
|
||||||
|
|
164
test/sleuth.c
164
test/sleuth.c
|
@ -11,122 +11,122 @@ int clean_suite_sleuth(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleuth_test_find_brand(void) {
|
void sleuth_test_find_brand(void) {
|
||||||
struct gargoyle_opt optv[] = {
|
struct gargoyle_optn optv[] = {
|
||||||
{ GARGOYLE_MK_OPT("baz"), 0, NULL, 0, GARGOYLE_TYPE_DBLE },
|
{ GARGOYLE_MK_OPTN("baz"), 0, NULL, 0, GARGOYLE_TYPE_DBLE },
|
||||||
{ GARGOYLE_MK_OPT("foo"), 0, NULL, 0, GARGOYLE_TYPE_BOOL },
|
{ GARGOYLE_MK_OPTN("foo"), 0, NULL, 0, GARGOYLE_TYPE_BOOL },
|
||||||
{ GARGOYLE_MK_OPT("bar"), 0, NULL, 0, GARGOYLE_TYPE_UINT }
|
{ GARGOYLE_MK_OPTN("bar"), 0, NULL, 0, GARGOYLE_TYPE_UINT }
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_opt);
|
uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_optn);
|
||||||
|
|
||||||
struct gargoyle_opt *opt = gargoyle_find_brand(optc, optv, "", NULL, 0, 0);
|
struct gargoyle_optn *optn = gargoyle_find_brand(optc, optv, "", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "foo", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "foo", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "no-foo", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "no-foo", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "no-foo", "", 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "no-foo", "", 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "no_foo", NULL, 0, GARGOYLE_FLG_SYMBL);
|
optn = gargoyle_find_brand(optc, optv, "no_foo", NULL, 0, GARGOYLE_FLG_SYMBL);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "no_foo", NULL, 0, GARGOYLE_FLG_ICASE);
|
optn = gargoyle_find_brand(optc, optv, "no_foo", NULL, 0, GARGOYLE_FLG_ICASE);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "no_foo", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "no_foo", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "No-Foo", NULL, 0, GARGOYLE_FLG_SYMBL);
|
optn = gargoyle_find_brand(optc, optv, "No-Foo", NULL, 0, GARGOYLE_FLG_SYMBL);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "No-Foo", NULL, 0, GARGOYLE_FLG_ICASE);
|
optn = gargoyle_find_brand(optc, optv, "No-Foo", NULL, 0, GARGOYLE_FLG_ICASE);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "No-Foo", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "No-Foo", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "NO_FOO", NULL, 0, GARGOYLE_FLG_FLXBL);
|
optn = gargoyle_find_brand(optc, optv, "NO_FOO", NULL, 0, GARGOYLE_FLG_FLXBL);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "bar", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "bar", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "bar", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "bar", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "ba", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "ba", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "baro", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "baro", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "floor", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "floor", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "harrow", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "harrow", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_brand(optc, optv, "$#^*!@&(*(@&", NULL, 0, 0);
|
optn = gargoyle_find_brand(optc, optv, "$#^*!@&(*(@&", NULL, 0, 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleuth_test_find_emblem(void) {
|
void sleuth_test_find_emblem(void) {
|
||||||
struct gargoyle_opt optv[] = {
|
struct gargoyle_optn optv[] = {
|
||||||
{ GARGOYLE_MK_OPT("glu"), 'G', NULL, 0, GARGOYLE_TYPE_UINT },
|
{ GARGOYLE_MK_OPTN("glu"), 'G', NULL, 0, GARGOYLE_TYPE_UINT },
|
||||||
{ GARGOYLE_MK_OPT("foo"), 'f', NULL, 0, GARGOYLE_TYPE_BOOL },
|
{ GARGOYLE_MK_OPTN("foo"), 'f', NULL, 0, GARGOYLE_TYPE_BOOL },
|
||||||
{ GARGOYLE_MK_OPT("bar"), 'b', NULL, 0, GARGOYLE_TYPE_DBLE },
|
{ GARGOYLE_MK_OPTN("bar"), 'b', NULL, 0, GARGOYLE_TYPE_DBLE },
|
||||||
{ GARGOYLE_MK_OPT("blu"), 'B', NULL, 0, GARGOYLE_TYPE_UINT }
|
{ GARGOYLE_MK_OPTN("blu"), 'B', NULL, 0, GARGOYLE_TYPE_UINT }
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_opt);
|
uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_optn);
|
||||||
|
|
||||||
struct gargoyle_opt *opt = gargoyle_find_emblem(optc, optv, 'f', 0);
|
struct gargoyle_optn *optn = gargoyle_find_emblem(optc, optv, 'f', 0);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'f', GARGOYLE_FLG_ECASE);
|
optn = gargoyle_find_emblem(optc, optv, 'f', GARGOYLE_FLG_ECASE);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'F', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'F', 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'F', GARGOYLE_FLG_ECASE);
|
optn = gargoyle_find_emblem(optc, optv, 'F', GARGOYLE_FLG_ECASE);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "foo", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "foo", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'b', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'b', 0);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "bar", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "bar", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'b', GARGOYLE_FLG_ECASE);
|
optn = gargoyle_find_emblem(optc, optv, 'b', GARGOYLE_FLG_ECASE);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "bar", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "bar", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'B', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'B', 0);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "blu", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "blu", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'B', GARGOYLE_FLG_ECASE);
|
optn = gargoyle_find_emblem(optc, optv, 'B', GARGOYLE_FLG_ECASE);
|
||||||
CU_ASSERT_PTR_NOT_NULL(opt);
|
CU_ASSERT_PTR_NOT_NULL(optn);
|
||||||
CU_ASSERT_NSTRING_EQUAL(opt->brand, "bar", opt->brand_sz);
|
CU_ASSERT_NSTRING_EQUAL(optn->brand, "bar", optn->brand_sz);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'g', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'g', 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'o', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'o', 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'P', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'P', 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
|
|
||||||
opt = gargoyle_find_emblem(optc, optv, 'q', 0);
|
optn = gargoyle_find_emblem(optc, optv, 'q', 0);
|
||||||
CU_ASSERT_PTR_NULL(opt);
|
CU_ASSERT_PTR_NULL(optn);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue