diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-01-09 17:20:59 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-01-09 17:20:59 +0000 |
commit | 8757a26cbbabd54c5662bf9b492214fe937dc93a (patch) | |
tree | f5c7153e289b0219f4585f279ce07e1a3699efd8 /pjlib/include/pj/string_i.h | |
parent | 6207fdc832c448e6ef6359c97c186abcd3395bf5 (diff) |
Fixed bugs and added tests to handle NULL and zero length strings
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@118 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/include/pj/string_i.h')
-rw-r--r-- | pjlib/include/pj/string_i.h | 68 |
1 files changed, 51 insertions, 17 deletions
diff --git a/pjlib/include/pj/string_i.h b/pjlib/include/pj/string_i.h index 91aebfb0..937b0840 100644 --- a/pjlib/include/pj/string_i.h +++ b/pjlib/include/pj/string_i.h @@ -129,7 +129,7 @@ PJ_IDEF(int) pj_strcmp( const pj_str_t *str1, const pj_str_t *str2) diff = str1->slen - str2->slen; if (diff) { - return (int)diff; + return diff > 0 ? 1 : -1; } else if (str1->ptr && str1->slen) { return pj_native_strncmp(str1->ptr, str2->ptr, str1->slen); } else { @@ -140,21 +140,37 @@ PJ_IDEF(int) pj_strcmp( const pj_str_t *str1, const pj_str_t *str2) PJ_IDEF(int) pj_strncmp( const pj_str_t *str1, const pj_str_t *str2, pj_size_t len) { - return (str1->ptr && str2->ptr) ? - pj_native_strncmp(str1->ptr, str2->ptr, len) : - (str1->ptr == str2->ptr ? 0 : 1); + if (str1->ptr && str2->ptr) + return pj_native_strncmp(str1->ptr, str2->ptr, len); + else if (str2->ptr) + return str2->slen==0 ? 0 : -1; + else if (str1->ptr) + return str1->slen==0 ? 0 : 1; + else + return 0; } PJ_IDEF(int) pj_strncmp2( const pj_str_t *str1, const char *str2, pj_size_t len) { - return (str1->ptr && str2) ? pj_native_strncmp(str1->ptr, str2, len) : - (str1->ptr==str2 ? 0 : 1); + if (len == 0) + return 0; + else if (str1->ptr && str2) + return pj_native_strncmp(str1->ptr, str2, len); + else if (str1->ptr) + return str1->slen==0 ? 0 : 1; + else if (str2) + return *str2=='\0' ? 0 : -1; + else + return 0; } PJ_IDEF(int) pj_strcmp2( const pj_str_t *str1, const char *str2 ) { - return pj_strncmp2( str1, str2, str1->slen); + if (str1->slen == 0) { + return (!str2 || *str2=='\0') ? 0 : -1; + } else + return pj_strncmp2( str1, str2, str1->slen); } PJ_IDEF(int) pj_stricmp( const pj_str_t *str1, const pj_str_t *str2) @@ -207,7 +223,7 @@ PJ_IDEF(int) pj_stricmp_alnum(const pj_str_t *str1, const pj_str_t *str2) register int len = str1->slen; if (len != str2->slen) { - return -1; + return (len < str2->slen) ? -1 : 1; } else if (len == 0) { return 0; } else { @@ -240,25 +256,43 @@ PJ_IDEF(int) pj_stricmp_alnum(const pj_str_t *str1, const pj_str_t *str2) PJ_IDEF(int) pj_stricmp2( const pj_str_t *str1, const char *str2) { - return (str1->ptr && str2) ? - pj_native_strnicmp(str1->ptr, str2, str1->slen) : - (str1->ptr==str2 ? 0 : 1); + if (str1->ptr && str2) + return pj_native_strnicmp(str1->ptr, str2, str1->slen); + else if (str2) + return (*str2=='\0') ? 0 : -1; + else if (str1->ptr) + return (str1->slen==0) ? 0 : 1; + else + return 0; } PJ_IDEF(int) pj_strnicmp( const pj_str_t *str1, const pj_str_t *str2, pj_size_t len) { - return (str1->ptr && str2->ptr) ? - pj_native_strnicmp(str1->ptr, str2->ptr, len) : - (str1->ptr == str2->ptr ? 0 : 1); + if (str1->ptr && str2->ptr) + return pj_native_strnicmp(str1->ptr, str2->ptr, len); + else if (str2->ptr) + return str2->slen==0 ? 0 : -1; + else if (str1->ptr) + return str1->slen==0 ? 0 : 1; + else + return 0; } PJ_IDEF(int) pj_strnicmp2( const pj_str_t *str1, const char *str2, pj_size_t len) { - return (str1->ptr && str2) ? - pj_native_strnicmp(str1->ptr, str2, len) : - (str1->ptr == str2 ? 0 : 1); + if (len == 0) + return 0; + else if (str1->ptr && str2) + return pj_native_strnicmp(str1->ptr, str2, len); + else if (str1->ptr) + return str1->slen==0 ? 0 : 1; + else if (str2) + return *str2=='\0' ? 0 : -1; + else + return 0; + } PJ_IDEF(void) pj_strcat(pj_str_t *dst, const pj_str_t *src) |