added a primitive dictionary file loader. needs more work

This commit is contained in:
hyung-hwan 2017-12-13 08:21:13 +00:00
parent f9970ef086
commit 61483e294a
6 changed files with 731 additions and 1010 deletions

View File

@ -170,6 +170,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
#define QSE_STRTONUM(value,nptr,endptr,base) do {\
int __ston_f = 0, __ston_v; \
const qse_char_t* __ston_ptr = nptr; \
int __ston_base = base; \
for (;;) { \
qse_char_t __ston_c = *__ston_ptr; \
if (__ston_c == QSE_T(' ') || \
@ -178,8 +179,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
else if (__ston_c == QSE_T('+')) { __ston_ptr++; } \
break; \
} \
for (value = 0; (__ston_v = QSE_CHARTONUM(*__ston_ptr, base)) < base; __ston_ptr++) { \
value = value * base + __ston_v; \
if (base == 0) { \
if (*__ston_ptr == QSE_T('0')) { \
if (*(__ston_ptr + 1) == QSE_T('x') || *(__ston_ptr + 1) == QSE_T('X')) { __ston_base = 16; __ston_ptr += 2; } \
else { __ston_base = 8; __ston_ptr++; } \
} \
else __ston_base = 10; \
} \
for (value = 0; (__ston_v = QSE_CHARTONUM(*__ston_ptr, __ston_base)) < __ston_base; __ston_ptr++) { \
value = value * __ston_base + __ston_v; \
} \
if (endptr) *((const qse_char_t**)endptr) = __ston_ptr; \
if (__ston_f > 0) value *= -1; \
@ -190,7 +198,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
int __ston_f = 0, __ston_v; \
const qse_char_t* __ston_ptr = nptr; \
const qse_char_t* __ston_end = __ston_ptr + len; \
value = 0; \
int __ston_base = base; \
while (__ston_ptr < __ston_end) { \
qse_char_t __ston_c = *__ston_ptr; \
if (__ston_c == QSE_T(' ') || __ston_c == QSE_T('\t')) { \
@ -200,9 +208,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
else if (__ston_c == QSE_T('+')) { __ston_ptr++; } \
break; \
} \
for (value = 0; __ston_ptr < __ston_end && \
(__ston_v = QSE_CHARTONUM(*__ston_ptr, base)) != base; __ston_ptr++) { \
value = value * base + __ston_v; \
if (base == 0) { \
if (__ston_ptr < __ston_end && *__ston_ptr == QSE_T('0')) { \
if ((__ston_ptr < __ston_end - 1) && (*(__ston_ptr + 1) == QSE_T('x') || *(__ston_ptr + 1) == QSE_T('X'))) { __ston_base = 16; __ston_ptr += 2; } \
else { __ston_base = 8; __ston_ptr++; } \
} \
else __ston_base = 10; \
} \
for (value = 0; __ston_ptr < __ston_end && (__ston_v = QSE_CHARTONUM(*__ston_ptr, __ston_base)) != __ston_base; __ston_ptr++) { \
value = value * __ston_base + __ston_v; \
} \
if (endptr) *((const qse_char_t**)endptr) = __ston_ptr; \
if (__ston_f > 0) value *= -1; \
@ -218,6 +232,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
#define QSE_MBSTONUM(value,nptr,endptr,base) do {\
int __ston_f = 0, __ston_v; \
const qse_mchar_t* __ston_ptr = nptr; \
int __ston_base = base; \
for (;;) { \
qse_mchar_t __ston_c = *__ston_ptr; \
if (__ston_c == QSE_MT(' ') || \
@ -226,8 +241,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
else if (__ston_c == QSE_MT('+')) { __ston_ptr++; } \
break; \
} \
for (value = 0; (__ston_v = QSE_MCHARTONUM(*__ston_ptr, base)) < base; __ston_ptr++) { \
value = value * base + __ston_v; \
if (base == 0) { \
if (*__ston_ptr == QSE_MT('0')) { \
if (*(__ston_ptr + 1) == QSE_MT('x') || *(__ston_ptr + 1) == QSE_MT('X')) { __ston_base = 16; __ston_ptr += 2; } \
else { __ston_base = 8; __ston_ptr++; } \
} \
else __ston_base = 10; \
} \
for (value = 0; (__ston_v = QSE_MCHARTONUM(*__ston_ptr, __ston_base)) < __ston_base; __ston_ptr++) { \
value = value * __ston_base + __ston_v; \
} \
if (endptr) *((const qse_mchar_t**)endptr) = __ston_ptr; \
if (__ston_f > 0) value *= -1; \
@ -238,7 +260,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
int __ston_f = 0, __ston_v; \
const qse_mchar_t* __ston_ptr = nptr; \
const qse_mchar_t* __ston_end = __ston_ptr + len; \
value = 0; \
int __ston_base = base; \
while (__ston_ptr < __ston_end) { \
qse_mchar_t __ston_c = *__ston_ptr; \
if (__ston_c == QSE_MT(' ') || __ston_c == QSE_MT('\t')) { \
@ -248,9 +270,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
else if (__ston_c == QSE_MT('+')) { __ston_ptr++; } \
break; \
} \
for (value = 0; __ston_ptr < __ston_end && \
(__ston_v = QSE_MCHARTONUM(*__ston_ptr, base)) != base; __ston_ptr++) { \
value = value * base + __ston_v; \
if (base == 0) { \
if (__ston_ptr < __ston_end && *__ston_ptr == QSE_MT('0')) { \
if ((__ston_ptr < __ston_end - 1) && (*(__ston_ptr + 1) == QSE_MT('x') || *(__ston_ptr + 1) == QSE_MT('X'))) { __ston_base = 16; __ston_ptr += 2; } \
else { __ston_base = 8; __ston_ptr++; } \
} \
else __ston_base = 10; \
} \
for (value = 0; __ston_ptr < __ston_end && (__ston_v = QSE_MCHARTONUM(*__ston_ptr, __ston_base)) != __ston_base; __ston_ptr++) { \
value = value * __ston_base + __ston_v; \
} \
if (endptr) *((const qse_mchar_t**)endptr) = __ston_ptr; \
if (__ston_f > 0) value *= -1; \
@ -266,6 +294,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
#define QSE_WCSTONUM(value,nptr,endptr,base) do {\
int __ston_f = 0, __ston_v; \
const qse_wchar_t* __ston_ptr = nptr; \
int __ston_base = base; \
for (;;) { \
qse_wchar_t __ston_c = *__ston_ptr; \
if (__ston_c == QSE_WT(' ') || \
@ -274,8 +303,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
else if (__ston_c == QSE_WT('+')) { __ston_ptr++; } \
break; \
} \
for (value = 0; (__ston_v = QSE_WCHARTONUM(*__ston_ptr, base)) < base; __ston_ptr++) { \
value = value * base + __ston_v; \
if (base == 0) { \
if (*__ston_ptr == QSE_WT('0')) { \
if (*(__ston_ptr + 1) == QSE_WT('x') || *(__ston_ptr + 1) == QSE_WT('X')) { __ston_base = 16; __ston_ptr += 2; } \
else { __ston_base = 8; __ston_ptr++; } \
} \
else __ston_base = 10; \
} \
for (value = 0; (__ston_v = QSE_WCHARTONUM(*__ston_ptr, __ston_base)) < __ston_base; __ston_ptr++) { \
value = value * __ston_base + __ston_v; \
} \
if (endptr) *((const qse_wchar_t**)endptr) = __ston_ptr; \
if (__ston_f > 0) value *= -1; \
@ -286,7 +322,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
int __ston_f = 0, __ston_v; \
const qse_wchar_t* __ston_ptr = nptr; \
const qse_wchar_t* __ston_end = __ston_ptr + len; \
value = 0; \
int __ston_base = base; \
while (__ston_ptr < __ston_end) { \
qse_wchar_t __ston_c = *__ston_ptr; \
if (__ston_c == QSE_WT(' ') || __ston_c == QSE_WT('\t')) { \
@ -296,9 +332,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) (
else if (__ston_c == QSE_WT('+')) { __ston_ptr++; } \
break; \
} \
for (value = 0; __ston_ptr < __ston_end && \
(__ston_v = QSE_WCHARTONUM(*__ston_ptr, base)) != base; __ston_ptr++) { \
value = value * base + __ston_v; \
if (base == 0) { \
if (__ston_ptr < __ston_end && *__ston_ptr == QSE_WT('0')) { \
if ((__ston_ptr < __ston_end - 1) && (*(__ston_ptr + 1) == QSE_WT('x') || *(__ston_ptr + 1) == QSE_WT('X'))) { __ston_base = 16; __ston_ptr += 2; } \
else { __ston_base = 8; __ston_ptr++; } \
} \
else __ston_base = 10; \
} \
for (value = 0; __ston_ptr < __ston_end && (__ston_v = QSE_WCHARTONUM(*__ston_ptr, __ston_base)) != __ston_base; __ston_ptr++) { \
value = value * __ston_base + __ston_v; \
} \
if (endptr) *((const qse_wchar_t**)endptr) = __ston_ptr; \
if (__ston_f > 0) value *= -1; \

View File

@ -30,6 +30,33 @@
#include <qse/types.h>
#include <qse/macros.h>
enum qse_raddic_opt_t
{
QSE_RADDIC_TRAIT
};
typedef enum qse_raddic_opt_t qse_raddic_opt_t;
enum qse_raddic_trait_t
{
QSE_RADDIC_ALLOW_CONST_WITHOUT_ATTR = (1 << 0)
};
typedef enum qse_raddic_trait_t qse_raddic_trait_t;
enum qse_raddic_errnum_t
{
QSE_RADDIC_ENOERR,
QSE_RADDIC_EOTHER,
QSE_RADDIC_ENOIMPL,
QSE_RADDIC_ESYSERR,
QSE_RADDIC_EINTERN,
QSE_RADDIC_ENOMEM,
QSE_RADDIC_EINVAL,
QSE_RADDIC_ENOENT,
QSE_RADDIC_EEXIST,
QSE_RADDIC_ESYNERR
};
typedef enum qse_raddic_errnum_t qse_raddic_errnum_t;
#define QSE_RADDIC_ATTR_TYPE_STRING 0
#define QSE_RADDIC_ATTR_TYPE_INTEGER 1
#define QSE_RADDIC_ATTR_TYPE_IPADDR 2
@ -66,7 +93,7 @@ typedef struct qse_raddic_attr_flags_t qse_raddic_attr_flags_t;
typedef struct qse_raddic_attr_t qse_raddic_attr_t;
struct qse_raddic_attr_t
{
int attr;
qse_uint32_t attr;
int type;
int vendor;
qse_raddic_attr_flags_t flags;
@ -77,7 +104,7 @@ struct qse_raddic_attr_t
typedef struct qse_raddic_const_t qse_raddic_const_t;
struct qse_raddic_const_t
{
int attr; /* vendor + attribute-value */
qse_uint32_t attr; /* vendor + attribute-value */
int value;
qse_raddic_const_t* nextc;
qse_char_t name[1];
@ -96,9 +123,9 @@ struct qse_raddic_vendor_t
typedef struct qse_raddic_t qse_raddic_t;
#define QSE_RADDIC_ATTR_MAKE(vendor,value) ((((vendor) & 0xFFFF) << 8) | (value))
#define QSE_RADDIC_ATTR_VENDOR(attr) (((attr) >> 8) & 0xFFFF)
#define QSE_RADDIC_ATTR_VALUE(attr) ((attr) & 0xFF)
#define QSE_RADDIC_ATTR_MAKE(vendor,value) ((((vendor) & 0xFFFFu) << 16) | (value))
#define QSE_RADDIC_ATTR_VENDOR(attr) (((attr) >> 16) & 0xFFFFu)
#define QSE_RADDIC_ATTR_VALUE(attr) ((attr) & 0xFFFFu)
#if defined(__cplusplus)
extern "C" {
@ -113,6 +140,47 @@ QSE_EXPORT void qse_raddic_close (
qse_raddic_t* dic
);
QSE_EXPORT int qse_raddic_getopt (
qse_raddic_t* raddic,
qse_raddic_opt_t id,
void* value
);
QSE_EXPORT int qse_raddic_setopt (
qse_raddic_t* raddic,
qse_raddic_opt_t id,
const void* value
);
QSE_EXPORT qse_raddic_errnum_t qse_raddic_geterrnum (
qse_raddic_t* dic
);
QSE_EXPORT const qse_char_t* qse_raddic_geterrmsg (
qse_raddic_t* dic
);
QSE_EXPORT void qse_raddic_seterrnum (
qse_raddic_t* dic,
qse_raddic_errnum_t errnum
);
QSE_EXPORT void qse_raddic_seterrfmt (
qse_raddic_t* dic,
qse_raddic_errnum_t errnum,
const qse_char_t* fmt,
...
);
QSE_EXPORT void qse_raddic_clear (
qse_raddic_t* dic
);
QSE_EXPORT int qse_raddic_load (
qse_raddic_t* dic,
const qse_char_t* path
);
QSE_EXPORT qse_raddic_vendor_t* qse_raddic_findvendorbyname (
qse_raddic_t* dic,
const qse_char_t* name
@ -149,7 +217,7 @@ QSE_EXPORT qse_raddic_attr_t* qse_raddic_findattrbyname (
QSE_EXPORT qse_raddic_attr_t* qse_raddic_findattrbyvalue (
qse_raddic_t* dic,
int attr
qse_uint32_t attr
);
QSE_EXPORT qse_raddic_attr_t* qse_raddic_addattr (
@ -172,16 +240,15 @@ QSE_EXPORT int qse_raddic_deleteattrbyvalue (
);
QSE_EXPORT qse_raddic_const_t* qse_raddic_findconstbyname (
qse_raddic_t* dic,
int attr,
qse_uint32_t attr,
const qse_char_t* name
);
QSE_EXPORT qse_raddic_const_t* qse_raddic_findconstbyvalue (
qse_raddic_t* dic,
int attr,
qse_uint32_t attr,
int value
);
@ -194,13 +261,13 @@ QSE_EXPORT qse_raddic_const_t* qse_raddic_addconst (
QSE_EXPORT int qse_raddic_deleteconstbyname (
qse_raddic_t* dic,
int attr,
qse_uint32_t attr,
const qse_char_t* name
);
QSE_EXPORT int qse_raddic_deleteconstbyvalue (
qse_raddic_t* dic,
int attr,
qse_uint32_t attr,
int value
);

View File

@ -340,9 +340,15 @@ int qse_htl_init (qse_htl_t* ht, qse_mmgr_t* mmgr, int keysize)
}
void qse_htl_fini (qse_htl_t* ht)
{
qse_htl_clear (ht);
QSE_MMGR_FREE (ht->mmgr, ht->buckets);
}
void qse_htl_clear (qse_htl_t* ht)
{
int i;
qse_htl_node_t *node, *next;
qse_htl_node_t* node, * next;
/*
* Walk over the buckets, freeing them all.
@ -363,9 +369,10 @@ void qse_htl_fini (qse_htl_t* ht)
}
}
QSE_MMGR_FREE (ht->mmgr, ht->buckets);
QSE_MEMSET (ht->buckets, 0, sizeof(*ht->buckets) * ht->num_buckets);
ht->buckets[0] = &ht->null;
ht->num_elements = 0;
}
/* ------------------------------------------------------------------------- */
/*

File diff suppressed because it is too large Load Diff

View File

@ -34,7 +34,7 @@ static qse_size_t hash_item (qse_htl_t* htl, const void* data)
{
item_t* item = (item_t*)data;
//return item->a + 123445;
return qse_genhash (&item->a, QSE_SIZEOF(item->a));
return qse_genhash32 (&item->a, QSE_SIZEOF(item->a));
}
static int comp_item (qse_htl_t* htl, const void* data1, const void* data2)
@ -135,6 +135,7 @@ static int test2 ()
item_t x;
qse_htl_t* htl;
qse_htl_node_t* np;
int count = 0;
htl = qse_htl_open (QSE_MMGR_GETDFL(), 0, QSE_SIZEOF(x));
if (htl == QSE_NULL)
@ -148,6 +149,7 @@ static int test2 ()
qse_htl_setcopier (htl, copy_item);
qse_htl_setfreeer (htl, free_item);
again:
for (x.a = 9; x.a < 20; x.a++)
{
x.x = x.a * 10;
@ -195,6 +197,15 @@ static int test2 ()
qse_printf (QSE_T("total %lu items\n"), (unsigned long)qse_htl_getsize(htl));
qse_htl_walk (htl, walk2, QSE_NULL);
qse_htl_clear (htl);
if (count == 0)
{
count++;
qse_printf (QSE_T("<<<TRAYING AGAIN ....>>>\n"));
goto again;
}
qse_htl_close (htl);
return 0;
}

View File

@ -2,6 +2,7 @@
#include <qse/cmn/str.h>
#include <qse/rad/raddic.h>
#include <qse/si/sio.h>
#include <string.h>
#define R(f) \
do { \
@ -9,7 +10,7 @@
if (f() == -1) return -1; \
} while (0)
#define FAIL(msg) qse_printf(QSE_T("FAILURE in %hs line %d - %hs\n"), __func__, __LINE__, msg)
#define FAIL(msg) qse_printf(QSE_T("FAILURE in %hs line %d - %s\n"), __func__, __LINE__, msg)
#define _assert(test,msg) do { if (!(test)) { FAIL(msg); return -1; } } while(0)
#define _verify(test) do { int r=test(); tests_run++; if(r) return r; } while(0)
@ -17,33 +18,32 @@ static int test1 ()
{
qse_raddic_t* dic;
qse_raddic_vendor_t* vendor, * v;
qse_raddic_attr_t* attr, * a;
int i;
dic = qse_raddic_open (QSE_MMGR_GETDFL(), 0);
_assert (dic != QSE_NULL, "unable to create a radius dictionary");
_assert (dic != QSE_NULL, QSE_T("unable to create a radius dictionary"));
vendor = qse_raddic_addvendor (dic, QSE_T("abiyo.net"), 12365);
_assert (vendor != QSE_NULL, "unable to add the first vendor");
_assert (vendor->vendorpec == 12365, "the vendor value is not 12365");
_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo.net")) == 0, "the vendor name is not abiyo.net");
_assert (vendor != QSE_NULL, QSE_T("unable to add the first vendor"));
_assert (vendor->vendorpec == 12365, QSE_T("the vendor value is not 12365"));
_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo.net")) == 0, QSE_T("the vendor name is not abiyo.net"));
vendor = qse_raddic_addvendor (dic, QSE_T("abiyo.net"), 99999);
_assert (vendor == QSE_NULL, "a duplicate name must not be allowed");
_assert (vendor == QSE_NULL, QSE_T("a duplicate name must not be allowed"));
vendor = qse_raddic_addvendor (dic, QSE_T("abiyo-aliased.net"), 12365);
_assert (vendor != QSE_NULL, "unable to add a duplicate id");
_assert (vendor != QSE_NULL, QSE_T("unable to add a duplicate id"));
vendor = qse_raddic_findvendorbyname (dic, QSE_T("Abiyo.Net"));
_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, "unable to find a vendor named Abiyo.Net");
_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, QSE_T("unable to find a vendor named Abiyo.Net"));
vendor = qse_raddic_findvendorbyvalue (dic, 12365);
_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, "unable to find a vendor of value 12365");
_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, "unable to find a vendor of value 12365");
_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, QSE_T("unable to find a vendor of value 12365"));
_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, QSE_T("unable to find a vendor of value 12365"));
vendor = qse_raddic_findvendorbyname (dic, QSE_T("Abiyo-aliased.Net"));
_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, "unable to find a vendor named Abiyo-aliased.Net");
_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, "unable to find a vendor of value 12365");
_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, QSE_T("unable to find a vendor named Abiyo-aliased.Net"));
_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, QSE_T("unable to find a vendor of value 12365"));
#define COUNT1 600
#define COUNT2 700
@ -53,9 +53,9 @@ static int test1 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
vendor = qse_raddic_addvendor (dic, tmp, i);
_assert (vendor != QSE_NULL, "unable to add a vendor");
_assert (vendor->vendorpec == i, "wrong vendor value");
_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name");
_assert (vendor != QSE_NULL, QSE_T("unable to add a vendor"));
_assert (vendor->vendorpec == i, QSE_T("wrong vendor value"));
_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name"));
}
for (i = 1; i < COUNT1; i++)
@ -63,9 +63,9 @@ static int test1 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
vendor = qse_raddic_findvendorbyname (dic, tmp);
_assert (vendor != QSE_NULL, "unable to find a vendor");
_assert (vendor->vendorpec == i, "wrong vendor value");
_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name");
_assert (vendor != QSE_NULL, QSE_T("unable to find a vendor"));
_assert (vendor->vendorpec == i, QSE_T("wrong vendor value"));
_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name"));
}
for (i = 1; i < COUNT1; i++)
@ -73,9 +73,9 @@ static int test1 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
vendor = qse_raddic_findvendorbyvalue (dic, i);
_assert (vendor != QSE_NULL, "unable to find a vendor");
_assert (vendor->vendorpec == i, "wrong vendor value");
_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name");
_assert (vendor != QSE_NULL, QSE_T("unable to find a vendor"));
_assert (vendor->vendorpec == i, QSE_T("wrong vendor value"));
_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name"));
}
for (i = COUNT1; i < COUNT2; i++)
@ -84,12 +84,12 @@ static int test1 ()
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
vendor = qse_raddic_addvendor (dic, tmp, COUNT1);
// insert different items with the same value
_assert (vendor != QSE_NULL, "unable to add a vendor");
_assert (vendor->vendorpec == COUNT1, "wrong vendor value");
_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name");
_assert (vendor != QSE_NULL, QSE_T("unable to add a vendor"));
_assert (vendor->vendorpec == COUNT1, QSE_T("wrong vendor value"));
_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name"));
v = qse_raddic_findvendorbyvalue (dic, COUNT1);
_assert (vendor == v, "unable to find a last added vendor by value");
_assert (vendor == v, QSE_T("unable to find a last added vendor by value"));
}
for (i = COUNT1; i < COUNT2 - 1; i++)
@ -100,24 +100,24 @@ static int test1 ()
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
n = qse_raddic_deletevendorbyname (dic, tmp);
_assert (n == 0, "unable to delete a vendor");
_assert (n == 0, QSE_T("unable to delete a vendor"));
v = qse_raddic_findvendorbyname (dic, tmp);
_assert (v == QSE_NULL, "vendor found errorenously");
_assert (v == QSE_NULL, QSE_T("vendor found errorenously"));
if (i == COUNT2 - 1)
{
v = qse_raddic_findvendorbyvalue (dic, COUNT1);
_assert (v == QSE_NULL, "vendor of COUNT1 found errorenously");
_assert (v == QSE_NULL, QSE_T("vendor of COUNT1 found errorenously"));
}
else
{
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i + 1);
v = qse_raddic_findvendorbyname (dic, tmp);
_assert (v != QSE_NULL && v->vendorpec == COUNT1 && qse_strcasecmp(tmp, v->name) == 0, "unable to find an expected vendor");
_assert (v != QSE_NULL && v->vendorpec == COUNT1 && qse_strcasecmp(tmp, v->name) == 0, QSE_T("unable to find an expected vendor"));
v = qse_raddic_findvendorbyvalue (dic, COUNT1);
_assert (v != QSE_NULL && v->vendorpec == COUNT1, "unable to find the vendor of COUNT1");
_assert (v != QSE_NULL && v->vendorpec == COUNT1, QSE_T("unable to find the vendor of COUNT1"));
}
}
@ -128,7 +128,7 @@ static int test1 ()
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
n = qse_raddic_deletevendorbyname (dic, tmp);
_assert (n == 0, "unable to delete a vendor");
_assert (n == 0, QSE_T("unable to delete a vendor"));
}
for (i = 1; i < COUNT1; i++)
@ -136,31 +136,31 @@ static int test1 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i);
v = qse_raddic_addvendor (dic, tmp, i);
_assert (v != QSE_NULL && v->vendorpec == i, "unable to add a vendor");
_assert (v != QSE_NULL && v->vendorpec == i, QSE_T("unable to add a vendor"));
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testx-%d"), i);
v = qse_raddic_addvendor (dic, tmp, i);
_assert (v != QSE_NULL && v->vendorpec == i, "unable to add a vendor");
_assert (v != QSE_NULL && v->vendorpec == i, QSE_T("unable to add a vendor"));
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testy-%d"), i);
v = qse_raddic_addvendor (dic, tmp, i);
_assert (v != QSE_NULL && v->vendorpec == i, "unable to add a vendor");
_assert (v != QSE_NULL && v->vendorpec == i, QSE_T("unable to add a vendor"));
}
for (i = 1; i < COUNT1; i++)
{
int n;
n = qse_raddic_deletevendorbyvalue (dic, i);
_assert (n == 0, "unable to delete a vendor by value");
_assert (n == 0, QSE_T("unable to delete a vendor by value"));
n = qse_raddic_deletevendorbyvalue (dic, i);
_assert (n == 0, "unable to delete a vendor by value");
_assert (n == 0, QSE_T("unable to delete a vendor by value"));
n = qse_raddic_deletevendorbyvalue (dic, i);
_assert (n == 0, "unable to delete a vendor by value");
_assert (n == 0, QSE_T("unable to delete a vendor by value"));
n = qse_raddic_deletevendorbyvalue (dic, i);
_assert (n <= -1, "erroreneously successful vendor deletion by value");
_assert (n <= -1, QSE_T("erroreneously successful vendor deletion by value"));
}
qse_raddic_close (dic);
@ -177,7 +177,7 @@ static int test2 ()
int i, j;
dic = qse_raddic_open (QSE_MMGR_GETDFL(), 0);
_assert (dic != QSE_NULL, "unable to create a radius dictionary");
_assert (dic != QSE_NULL, QSE_T("unable to create a radius dictionary"));
memset (&f, 0, QSE_SIZEOF(f));
@ -188,9 +188,9 @@ static int test2 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d-%d"), j, i);
attr = qse_raddic_addattr (dic, tmp, j, QSE_RADDIC_ATTR_TYPE_STRING, i, &f);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
}
}
@ -201,14 +201,14 @@ static int test2 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d-%d"), j, i);
attr = qse_raddic_findattrbyname (dic, tmp);
_assert (attr != QSE_NULL, "unable to find an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to find an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
attr = qse_raddic_findattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i));
_assert (attr != QSE_NULL, "unable to find an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to find an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
}
}
@ -219,15 +219,15 @@ static int test2 ()
qse_char_t tmp[64];
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testx-%d-%d"), j, i);
attr = qse_raddic_addattr (dic, tmp, j, QSE_RADDIC_ATTR_TYPE_STRING, i, &f);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testy-%d-%d"), j, i);
attr = qse_raddic_addattr (dic, tmp, j, QSE_RADDIC_ATTR_TYPE_STRING, i, &f);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
}
}
@ -241,34 +241,34 @@ static int test2 ()
qse_strxfmt(tmpy, QSE_COUNTOF(tmpy), QSE_T("testy-%d-%d"), j, i);
attr = qse_raddic_findattrbyname (dic, tmp);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
attr = qse_raddic_findattrbyname (dic, tmpx);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmpx) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmpx) == 0, QSE_T("wrong attr name"));
attr = qse_raddic_findattrbyname (dic, tmpy);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name"));
attr = qse_raddic_findattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i));
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name"));
_assert (attr->nexta != QSE_NULL, "unable to find an old attribute");
_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->nexta->name, tmpx) == 0, "wrong attr name");
_assert (attr->nexta != QSE_NULL, QSE_T("unable to find an old attribute"));
_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->nexta->name, tmpx) == 0, QSE_T("wrong attr name"));
_assert (attr->nexta->nexta != QSE_NULL, "unable to find an old attribute");
_assert (attr->nexta->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->nexta->nexta->name, tmp) == 0, "wrong attr name");
_assert (attr->nexta->nexta != QSE_NULL, QSE_T("unable to find an old attribute"));
_assert (attr->nexta->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->nexta->nexta->name, tmp) == 0, QSE_T("wrong attr name"));
_assert (attr->nexta->nexta->nexta == QSE_NULL, "wrong attribute chian");
_assert (attr->nexta->nexta->nexta == QSE_NULL, QSE_T("wrong attribute chian"));
}
}
@ -281,7 +281,7 @@ static int test2 ()
qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testx-%d-%d"), j, i);
n = qse_raddic_deleteattrbyname (dic, tmp);
_assert (n == 0, "erroreneous attribute deletion failure by name");
_assert (n == 0, QSE_T("erroreneous attribute deletion failure by name"));
}
}
@ -295,28 +295,28 @@ static int test2 ()
qse_strxfmt(tmpy, QSE_COUNTOF(tmpy), QSE_T("testy-%d-%d"), j, i);
attr = qse_raddic_findattrbyname (dic, tmp);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name"));
attr = qse_raddic_findattrbyname (dic, tmpx);
_assert (attr == QSE_NULL, "errorneous search success");
_assert (attr == QSE_NULL, QSE_T("errorneous search success"));
attr = qse_raddic_findattrbyname (dic, tmpy);
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name"));
attr = qse_raddic_findattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i));
_assert (attr != QSE_NULL, "unable to add an attribute");
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name");
_assert (attr != QSE_NULL, QSE_T("unable to add an attribute"));
_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name"));
_assert (attr->nexta != QSE_NULL, "unable to find an old attribute");
_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value");
_assert (qse_strcasecmp(attr->nexta->name, tmp) == 0, "wrong attr name");
_assert (attr->nexta != QSE_NULL, QSE_T("unable to find an old attribute"));
_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value"));
_assert (qse_strcasecmp(attr->nexta->name, tmp) == 0, QSE_T("wrong attr name"));
_assert (attr->nexta->nexta == QSE_NULL, "wrong attribute chian");
_assert (attr->nexta->nexta == QSE_NULL, QSE_T("wrong attribute chian"));
}
}
@ -324,13 +324,13 @@ static int test2 ()
{
int n;
n = qse_raddic_deleteattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(0, 0));
_assert (n == 0, "errorneous deletion failure by value");
_assert (n == 0, QSE_T("errorneous deletion failure by value"));
n = qse_raddic_deleteattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(0, 0));
_assert (n == 0, "errorneous deletion failure by value");
_assert (n == 0, QSE_T("errorneous deletion failure by value"));
n = qse_raddic_deleteattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(0, 0));
_assert (n <= -1, "errorneous deletion success by value");
_assert (n <= -1, QSE_T("errorneous deletion success by value"));
}
@ -342,9 +342,9 @@ static int test2 ()
qse_strxfmt(attrstr, QSE_COUNTOF(attrstr), QSE_T("test-%d-%d"), j, i);
qse_strxfmt(constr, QSE_COUNTOF(constr), QSE_T("const-%d-%d"), j, i);
con = qse_raddic_addconst (dic, constr, attrstr, 10);
_assert (con != QSE_NULL, "unable to add an constant");
_assert (con->value == 10, "wrong constant value");
_assert (qse_strcasecmp(con->name, constr) == 0, "wrong constant name");
_assert (con != QSE_NULL, QSE_T("unable to add an constant"));
_assert (con->value == 10, QSE_T("wrong constant value"));
_assert (qse_strcasecmp(con->name, constr) == 0, QSE_T("wrong constant name"));
}
}
@ -356,14 +356,14 @@ static int test2 ()
qse_strxfmt(constr, QSE_COUNTOF(constr), QSE_T("const-%d-%d"), j, i);
con = qse_raddic_findconstbyname (dic, QSE_RADDIC_ATTR_MAKE(j, i), constr);
_assert (con != QSE_NULL, "unable to find an constant");
_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong constant value");
_assert (con->value == 10, "wrong constant value");
_assert (con != QSE_NULL, QSE_T("unable to find an constant"));
_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong constant value"));
_assert (con->value == 10, QSE_T("wrong constant value"));
con = qse_raddic_findconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i), 10);
_assert (con != QSE_NULL, "unable to find an constant");
_assert (con->value == 10, "wrong constant value");
_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong constant value");
_assert (con != QSE_NULL, QSE_T("unable to find an constant"));
_assert (con->value == 10, QSE_T("wrong constant value"));
_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong constant value"));
}
}
@ -371,30 +371,50 @@ static int test2 ()
{
int n;
n = qse_raddic_deleteconstbyname (dic, QSE_RADDIC_ATTR_MAKE(1,1), QSE_T("const-1-1"));
_assert (n == 0, "errorneous constant deletion failure");
_assert (n == 0, QSE_T("errorneous constant deletion failure"));
n = qse_raddic_deleteconstbyname (dic, QSE_RADDIC_ATTR_MAKE(1,1), QSE_T("const-1-1"));
_assert (n <= -1, "errorneous constant deletion success");
_assert (n <= -1, QSE_T("errorneous constant deletion success"));
n = qse_raddic_deleteconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(2,2), 20);
_assert (n <= -1, "errorneous constant deletion success");
_assert (n <= -1, QSE_T("errorneous constant deletion success"));
n = qse_raddic_deleteconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(2,2), 10);
_assert (n == 0, "errorneous constant deletion success");
_assert (n == 0, QSE_T("errorneous constant deletion success"));
n = qse_raddic_deleteconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(2,2), 10);
_assert (n <= -1, "errorneous constant deletion success");
_assert (n <= -1, QSE_T("errorneous constant deletion success"));
}
qse_raddic_close (dic);
return 0;
}
static int test3 ()
{
qse_raddic_t* dic;
int n, trait;
dic = qse_raddic_open (QSE_MMGR_GETDFL(), 0);
_assert (dic != QSE_NULL, QSE_T("unable to create a radius dictionary"));
trait = QSE_RADDIC_ALLOW_CONST_WITHOUT_ATTR;
n = qse_raddic_setopt (dic, QSE_RADDIC_TRAIT, &trait);
_assert (n == 0, QSE_T("cannot set trait"));
n = qse_raddic_load (dic, QSE_T("dictionary"));
_assert (n == 0, qse_raddic_geterrmsg(dic));
qse_raddic_close (dic);
return 0;
}
int main ()
{
qse_open_stdsios ();
R (test1);
R (test2);
R (test3);
qse_close_stdsios ();
return 0;
}