X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=util%2Fstring-util.c;h=92af937f45ec15eab8ae00d27b287bf6a265134a;hp=a90501ee3e70198e652599e6da841ffe95db8f85;hb=bcb695a716bf28691ac21f6faa56e93fd3210486;hpb=ce44657c9e4919b1e4bbbbbe37dbd72257d40736 diff --git a/util/string-util.c b/util/string-util.c index a90501ee..92af937f 100644 --- a/util/string-util.c +++ b/util/string-util.c @@ -221,3 +221,37 @@ parse_boolean_term (void *ctx, const char *str, errno = err; return -1; } + +int +strcmp_null (const char *s1, const char *s2) +{ + if (s1 && s2) + return strcmp (s1, s2); + else if (! s1 && ! s2) + return 0; + else if (s1) + return 1; /* s1 (non-NULL) is greater than s2 (NULL) */ + else + return -1; /* s1 (NULL) is less than s2 (non-NULL) */ +} + +int +strcase_equal (const void *a, const void *b) +{ + return strcasecmp (a, b) == 0; +} + +unsigned int +strcase_hash (const void *ptr) +{ + const char *s = ptr; + + /* This is the djb2 hash. */ + unsigned int hash = 5381; + while (s && *s) { + hash = ((hash << 5) + hash) + tolower (*s); + s++; + } + + return hash; +}