summaryrefslogtreecommitdiff
path: root/pjlib/include/pj/string_i.h
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-01-09 17:20:59 +0000
committerBenny Prijono <bennylp@teluu.com>2006-01-09 17:20:59 +0000
commit8757a26cbbabd54c5662bf9b492214fe937dc93a (patch)
treef5c7153e289b0219f4585f279ce07e1a3699efd8 /pjlib/include/pj/string_i.h
parent6207fdc832c448e6ef6359c97c186abcd3395bf5 (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.h68
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)