This commit is contained in:
Nick Chambers 2022-07-07 19:43:06 -05:00
parent f8003f67b5
commit 11bf68274d
10 changed files with 138 additions and 138 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
} }
} }

View File

@ -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;

View File

@ -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;

View File

@ -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
}; };

View File

@ -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);

View File

@ -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);
} }