mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 03:25:20 +00:00
internal: Simplify STREQ_NULLABLE
Our STREQ_NULLABLE and STRNEQ_NULLABLE macros are too complicated. This was a result of some broken version of gcc. However, that is long gone and therefore we can simplify the macros. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
6de3f11637
commit
486fd7f700
@ -92,9 +92,9 @@
|
|||||||
# define STRSKIP(a, b) (STRPREFIX(a, b) ? (a) + strlen(b) : NULL)
|
# define STRSKIP(a, b) (STRPREFIX(a, b) ? (a) + strlen(b) : NULL)
|
||||||
|
|
||||||
# define STREQ_NULLABLE(a, b) \
|
# define STREQ_NULLABLE(a, b) \
|
||||||
((a) ? (b) && STREQ((a) ? (a) : "", (b) ? (b) : "") : !(b))
|
((a) ? (b) && STREQ((a), (b)) : !(b))
|
||||||
# define STRNEQ_NULLABLE(a, b) \
|
# define STRNEQ_NULLABLE(a, b) \
|
||||||
((a) ? !(b) || STRNEQ((a) ? (a) : "", (b) ? (b) : "") : !!(b))
|
((a) ? !(b) || STRNEQ((a), (b)) : !!(b))
|
||||||
|
|
||||||
# define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0)
|
# define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0)
|
||||||
# define ARRAY_CARDINALITY(Array) (sizeof(Array) / sizeof(*(Array)))
|
# define ARRAY_CARDINALITY(Array) (sizeof(Array) / sizeof(*(Array)))
|
||||||
|
@ -34,6 +34,53 @@
|
|||||||
|
|
||||||
VIR_LOG_INIT("tests.stringtest");
|
VIR_LOG_INIT("tests.stringtest");
|
||||||
|
|
||||||
|
struct testStreqData {
|
||||||
|
const char *a;
|
||||||
|
const char *b;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int testStreq(const void *args)
|
||||||
|
{
|
||||||
|
const struct testStreqData *data = args;
|
||||||
|
int ret = -1;
|
||||||
|
bool equal = true;
|
||||||
|
bool streq_rv, strneq_rv;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if ((size_t) data->a ^ (size_t) data->b)
|
||||||
|
equal = false;
|
||||||
|
if (data->a && data->b) {
|
||||||
|
for (i = 0; data->a[i] != '\0'; i++) {
|
||||||
|
if (data->b[i] == '\0' ||
|
||||||
|
data->a[i] != data->b[i]) {
|
||||||
|
equal = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
streq_rv = STREQ_NULLABLE(data->a, data->b);
|
||||||
|
strneq_rv = STRNEQ_NULLABLE(data->a, data->b);
|
||||||
|
|
||||||
|
if (streq_rv != equal) {
|
||||||
|
virFilePrintf(stderr,
|
||||||
|
"STREQ not working correctly. Expected %d got %d",
|
||||||
|
(int) equal, (int) streq_rv);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strneq_rv == equal) {
|
||||||
|
virFilePrintf(stderr,
|
||||||
|
"STRNEQ not working correctly. Expected %d got %d",
|
||||||
|
(int) equal, (int) strneq_rv);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
cleanup:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
struct testSplitData {
|
struct testSplitData {
|
||||||
const char *string;
|
const char *string;
|
||||||
const char *delim;
|
const char *delim;
|
||||||
@ -651,6 +698,20 @@ mymain(void)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
#define TEST_STREQ(aa, bb) \
|
||||||
|
do { \
|
||||||
|
struct testStreqData streqData = {.a = aa, .b = bb}; \
|
||||||
|
if (virTestRun("Streq", testStreq, &streqData) < 0) \
|
||||||
|
ret = -1; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
TEST_STREQ("hello", "world");
|
||||||
|
TEST_STREQ(NULL, NULL);
|
||||||
|
TEST_STREQ(NULL, "");
|
||||||
|
TEST_STREQ("", NULL);
|
||||||
|
TEST_STREQ("", "");
|
||||||
|
TEST_STREQ("hello", "hello");
|
||||||
|
|
||||||
#define TEST_SPLIT(str, del, max, toks) \
|
#define TEST_SPLIT(str, del, max, toks) \
|
||||||
do { \
|
do { \
|
||||||
struct testSplitData splitData = { \
|
struct testSplitData splitData = { \
|
||||||
|
Loading…
Reference in New Issue
Block a user