You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2007/01/11 11:50:06 UTC

svn commit: r495184 - /webservices/axis2/trunk/c/util/src/string.c

Author: samisa
Date: Thu Jan 11 02:50:05 2007
New Revision: 495184

URL: http://svn.apache.org/viewvc?view=rev&rev=495184
Log:
Updated logic to improve performance dropping toupper

Modified:
    webservices/axis2/trunk/c/util/src/string.c

Modified: webservices/axis2/trunk/c/util/src/string.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/src/string.c?view=diff&rev=495184&r1=495183&r2=495184
==============================================================================
--- webservices/axis2/trunk/c/util/src/string.c (original)
+++ webservices/axis2/trunk/c/util/src/string.c Thu Jan 11 02:50:05 2007
@@ -1,473 +1,468 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <axis2_string.h>
-#include <stdlib.h>
-#include <axis2_utils.h>
-#include <axis2_utils_defines.h>
-#include <stdarg.h> /* NULL */
-
-/** this is used to cache lengths in axis2_strcat */
-#define MAX_SAVED_LENGTHS  6
-
-AXIS2_EXTERN void* AXIS2_CALL
-axis2_strdup(const void *ptr, const axis2_env_t *env)
-{
-    AXIS2_ENV_CHECK(env, NULL);
-    if (ptr)
-    {
-        int len = axis2_strlen(ptr);
-        axis2_char_t * str = (axis2_char_t *) AXIS2_MALLOC(env->allocator,
-                sizeof(axis2_char_t) * (len + 1));
-        if (!str)
-        {
-            AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-            return NULL;
-        }
-        memcpy(str, ptr, len + 1);
-        return (void *) str;
-    }
-    else
-    {
-        return NULL;
-    }
-}
-
-AXIS2_EXTERN void * AXIS2_CALL
-axis2_strmemdup(const void *ptr,
-        size_t n,
-        const axis2_env_t *env)
-{
-    axis2_char_t *str;
-
-    AXIS2_ENV_CHECK(env, NULL);
-    AXIS2_PARAM_CHECK(env->error, ptr, NULL);
-
-    str = (axis2_char_t *) AXIS2_MALLOC(env->allocator,
-            sizeof(axis2_char_t) * (n + 1));
-    if (!str)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-        return NULL;
-    }
-    memcpy(str, ptr, n);
-    str[n] = '\0';
-
-    return (void *) str;
-}
-
-AXIS2_EXTERN void * AXIS2_CALL
-axis2_memchr(
-    const void *ptr,
-    int c,
-    size_t n)
-{
-    const axis2_char_t *cp;
-
-    for (cp = ptr; n > 0; n--, cp++)
-    {
-        if (*cp == c)
-            return (char *) cp; /* Casting away the const here */
-    }
-
-    return NULL;
-}
-
-AXIS2_EXTERN void* AXIS2_CALL
-axis2_strndup(
-    const void *ptr,
-    int n,
-    const axis2_env_t *env)
-{
-    const axis2_char_t *end;
-    axis2_char_t *str;
-
-    AXIS2_ENV_CHECK(env, NULL);
-    AXIS2_PARAM_CHECK(env->error, ptr, NULL);
-
-    end = axis2_memchr(ptr, '\0', n);
-    if (end)
-        n = end - (axis2_char_t *) ptr;
-    str = (axis2_char_t *) AXIS2_MALLOC(env->allocator,
-            sizeof(axis2_char_t) * (n + 1));
-    if (!str)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-        return NULL;
-    }
-    memcpy(str, ptr, n);
-    str[n] = '\0';
-
-    return (void *) str;
-}
-
-AXIS2_EXTERN axis2_char_t * AXIS2_CALL
-axis2_strcat(
-    const axis2_env_t *env, ...)
-{
-    axis2_char_t *cp, *argp, *str;
-    size_t saved_lengths[MAX_SAVED_LENGTHS];
-    int nargs = 0;
-    int str_len = 0;
-
-    /* Pass one --- find length of required string */
-
-    size_t len = 0;
-    va_list adummy;
-
-    va_start(adummy, env);
-
-    while ((cp = va_arg(adummy, axis2_char_t *)))
-    {
-        size_t cplen = strlen(cp);
-        if (nargs < MAX_SAVED_LENGTHS)
-        {
-            saved_lengths[nargs++] = cplen;
-        }
-        len += cplen;
-    }
-
-    va_end(adummy);
-
-    /* Allocate the required string */
-    str_len = sizeof(axis2_char_t) * (len + 1);
-    str = (axis2_char_t *) AXIS2_MALLOC(env->allocator, str_len);
-    if (!str)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-        return NULL;
-    }
-    cp = str;
-
-    /* Pass two --- copy the argument strings into the result space */
-
-    va_start(adummy, env);
-
-    nargs = 0;
-    while ((argp = va_arg(adummy, axis2_char_t *)))
-    {
-        if (nargs < MAX_SAVED_LENGTHS)
-        {
-            len = saved_lengths[nargs++];
-        }
-        else
-        {
-            len = strlen(argp);
-        }
-
-        memcpy(cp, argp, len);
-        cp += len;
-    }
-
-    va_end(adummy);
-
-    /* Return the result string */
-
-    *cp = '\0';
-    return str;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_stracat(const axis2_char_t *s1, const axis2_char_t *s2, const axis2_env_t *env)
-{
-    axis2_char_t *ret = NULL;
-    int alloc_len = -1;
-
-    if (NULL == s1 && NULL == s2)
-    {
-        return NULL;
-    }
-    if (NULL == s1)
-    {
-        return (axis2_char_t*)AXIS2_STRDUP(s2, env);
-    }
-    if (NULL == s2)
-    {
-        return (axis2_char_t*)AXIS2_STRDUP(s1, env);
-    }
-    alloc_len = axis2_strlen(s1) + axis2_strlen(s2) + 1;
-    ret = (axis2_char_t*)AXIS2_MALLOC(env->allocator,
-            alloc_len * sizeof(axis2_char_t));
-    memcpy(ret, s1, axis2_strlen(s1)*sizeof(axis2_char_t));
-    memcpy((ret + axis2_strlen(s1)*sizeof(axis2_char_t)), s2,
-            axis2_strlen(s2)*sizeof(axis2_char_t));
-    ret[alloc_len*sizeof(axis2_char_t) - sizeof(axis2_char_t)] = '\0';
-    return ret;
-}
-
-AXIS2_EXTERN int AXIS2_CALL
-axis2_strcmp(const axis2_char_t * s1, const axis2_char_t * s2)
-{
-    if (s1 && s2)
-        return strcmp(s1, s2);
-    else
-        return -1;
-}
-
-
-AXIS2_EXTERN int AXIS2_CALL
-axis2_strncmp(const axis2_char_t * s1, const axis2_char_t * s2, int n)
-{
-    if (s1 && s2)
-        return strncmp(s1, s2, n);
-    else
-        return -1;
-}
-
-
-AXIS2_EXTERN axis2_ssize_t AXIS2_CALL
-axis2_strlen(const axis2_char_t * s)
-{
-    if (s)
-        return strlen(s);
-    else
-        return -1;
-}
-
-
-AXIS2_EXTERN int AXIS2_CALL
-axis2_strcasecmp(const axis2_char_t *s1, const axis2_char_t *s2)
-{
-    while (toupper(*s1) == toupper(*s2++))
-        if (*s1++ == '\0')
-            return(0);
-    return(toupper(*s1) - toupper(*--s2));
-}
-
-
-AXIS2_EXTERN int AXIS2_CALL
-axis2_strncasecmp(const axis2_char_t *s1, const axis2_char_t *s2, const int n)
-{
-    axis2_char_t *str1 = (axis2_char_t *)s1, *str2 = (axis2_char_t *)s2;
-    int i = (int)n;
-
-    while (--i >= 0 && toupper(*str1) == toupper(*str2++))
-        if (toupper(*str1++) == '\0')
-            return(0);
-    return(i < 0 ? 0 : toupper(*str1) - toupper(*--str2));
-}
-
-AXIS2_EXTERN axis2_char_t * AXIS2_CALL
-axis2_strstr(const axis2_char_t *heystack,
-        const axis2_char_t *needle)
-{
-    return strstr(heystack, needle);
-}
-
-
-AXIS2_EXTERN axis2_char_t * AXIS2_CALL
-axis2_rindex(const axis2_char_t *_s, axis2_char_t _ch)
-{
-    int i, ilen = axis2_strlen(_s);
-    if (ilen < 1)
-        return NULL;
-    for (i = ilen - 1;i >= 0;i--)
-    {
-        if (_s[i] == _ch)
-            return (axis2_char_t *)(_s + i);
-    }
-    return NULL;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_replace(const axis2_env_t *env,
-        axis2_char_t *str,
-        int s1,
-        int s2)
-{
-    axis2_char_t *newstr = NULL;
-    axis2_char_t *index = NULL;
-    if (!str)
-        return NULL;
-
-    newstr = AXIS2_STRDUP(str, env);
-
-    index = strchr(newstr, s1);
-    while (index)
-    {
-        newstr[index - newstr] = s2;
-        index = strchr(newstr, s1);
-    }
-    return newstr;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_strltrim(
-    const axis2_env_t *env,
-    const axis2_char_t *_s,
-    const axis2_char_t *_trim)
-{
-    axis2_char_t *_p = NULL;
-    axis2_char_t *ret = NULL;
-
-    if (!_s)
-        return NULL;
-    _p = (axis2_char_t *) _s;
-    if (!_trim)
-        _trim = " \t\r\n";
-
-    while (*_p)
-    {
-        if (!strchr(_trim, *_p))
-        {
-            ret = (axis2_char_t *) AXIS2_STRDUP(_p, env);
-            break;
-        }
-        ++_p;
-    }
-    return ret;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_strrtrim(
-    const axis2_env_t *env,
-    const axis2_char_t *_s,
-    const axis2_char_t *_trim)
-{
-    axis2_char_t *__tail;
-    axis2_char_t *ret = NULL;
-
-    if (!_s)
-        return NULL;
-    __tail = ((axis2_char_t *) _s) + axis2_strlen(_s);
-    if (!_trim)
-        _trim = " \t\n\r";
-    while (_s < __tail--)
-    {
-        if (!strchr(_trim, *__tail))
-        {
-            ret = (axis2_char_t *) AXIS2_STRDUP(_s, env);
-            break;
-        }
-        *__tail = 0;
-    }
-    return ret;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_strtrim(
-    const axis2_env_t *env,
-    const axis2_char_t *_s,
-    const axis2_char_t *_trim)
-{
-    axis2_char_t *_p = NULL;
-    axis2_char_t *_q = NULL;
-
-    _p = axis2_strltrim(env, _s, _trim);
-    _q = axis2_strrtrim(env, _p, _trim);
-    if (_p)
-        AXIS2_FREE(env->allocator, _p);
-    return _q;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_string_replace(axis2_char_t* str, axis2_char_t old, axis2_char_t new)
-{
-    axis2_char_t* str_returns = str;
-    for (; *str != '\0' ; str ++)
-    {
-        if (*str == old)
-        {
-            *str = new;
-        }
-    }
-    return str_returns;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_string_substring_starting_at(axis2_char_t* str, int s)
-{
-    int len;
-    int pos_to_shift;
-
-    len = strlen(str);
-    pos_to_shift = len - s + 1;
-
-    if (len <= s)
-    {
-        return NULL;
-    }
-    memmove(str , str + s, pos_to_shift);
-    return str;
-}
-
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_string_substring_ending_at(axis2_char_t* str, int e)
-{
-    axis2_char_t* ptr = NULL;
-    int length = 0;
-
-    length = strlen(str);
-    ptr = str;
-    if (length <=  e)
-    {
-        return NULL;
-    }
-    ptr += e;
-    *ptr = '\0';
-    return str;
-}
-
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_string_tolower(axis2_char_t* str)
-{
-    axis2_char_t* temp_str = NULL;
-    for (temp_str = str; *temp_str != '\0' ; temp_str ++)
-    {
-        *temp_str = tolower(*temp_str);
-    }
-    return str;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-axis2_string_toupper(axis2_char_t* str)
-{
-    axis2_char_t* temp_str = NULL;
-    for (temp_str = str; *temp_str != '\0' ; temp_str ++)
-    {
-        *temp_str = toupper(*temp_str);
-    }
-    return str;
-}
-
-AXIS2_EXTERN axis2_char_t * AXIS2_CALL
-axis2_strcasestr(const axis2_char_t *heystack, const axis2_char_t *needle)
-{
-    axis2_char_t start, current;
-    size_t len;
-
-    if (!heystack || !needle)
-        return NULL;
-
-    if ((start = *needle++))
-    {
-        len = strlen(needle);
-        do
-        {
-            do
-            {
-                if (!(current = *heystack++))
-                    return NULL;
-            } while (toupper(current) != toupper(start));
-        } while (axis2_strncasecmp(heystack, needle, len));
-        heystack--;
-    }
-    return (axis2_char_t *)heystack;
-}
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <axis2_string.h>
+#include <stdlib.h>
+#include <axis2_utils.h>
+#include <axis2_utils_defines.h>
+#include <stdarg.h> /* NULL */
+
+/** this is used to cache lengths in axis2_strcat */
+#define MAX_SAVED_LENGTHS  6
+
+AXIS2_EXTERN void* AXIS2_CALL
+axis2_strdup(const void *ptr, const axis2_env_t *env)
+{
+	return strdup(ptr)
+}
+
+AXIS2_EXTERN void * AXIS2_CALL
+axis2_strmemdup(const void *ptr,
+        size_t n,
+        const axis2_env_t *env)
+{
+    axis2_char_t *str;
+
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, ptr, NULL);
+
+    str = (axis2_char_t *) AXIS2_MALLOC(env->allocator,
+            sizeof(axis2_char_t) * (n + 1));
+    if (!str)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    memcpy(str, ptr, n);
+    str[n] = '\0';
+
+    return (void *) str;
+}
+
+AXIS2_EXTERN void * AXIS2_CALL
+axis2_memchr(
+    const void *ptr,
+    int c,
+    size_t n)
+{
+    const axis2_char_t *cp;
+
+    for (cp = ptr; n > 0; n--, cp++)
+    {
+        if (*cp == c)
+            return (char *) cp; /* Casting away the const here */
+    }
+
+    return NULL;
+}
+
+AXIS2_EXTERN void* AXIS2_CALL
+axis2_strndup(
+    const void *ptr,
+    int n,
+    const axis2_env_t *env)
+{
+    const axis2_char_t *end;
+    axis2_char_t *str;
+
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, ptr, NULL);
+
+    end = axis2_memchr(ptr, '\0', n);
+    if (end)
+        n = end - (axis2_char_t *) ptr;
+    str = (axis2_char_t *) AXIS2_MALLOC(env->allocator,
+            sizeof(axis2_char_t) * (n + 1));
+    if (!str)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    memcpy(str, ptr, n);
+    str[n] = '\0';
+
+    return (void *) str;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+axis2_strcat(
+    const axis2_env_t *env, ...)
+{
+    axis2_char_t *cp, *argp, *str;
+    size_t saved_lengths[MAX_SAVED_LENGTHS];
+    int nargs = 0;
+    int str_len = 0;
+
+    /* Pass one --- find length of required string */
+
+    size_t len = 0;
+    va_list adummy;
+
+    va_start(adummy, env);
+
+    while ((cp = va_arg(adummy, axis2_char_t *)))
+    {
+        size_t cplen = strlen(cp);
+        if (nargs < MAX_SAVED_LENGTHS)
+        {
+            saved_lengths[nargs++] = cplen;
+        }
+        len += cplen;
+    }
+
+    va_end(adummy);
+
+    /* Allocate the required string */
+    str_len = sizeof(axis2_char_t) * (len + 1);
+    str = (axis2_char_t *) AXIS2_MALLOC(env->allocator, str_len);
+    if (!str)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    cp = str;
+
+    /* Pass two --- copy the argument strings into the result space */
+
+    va_start(adummy, env);
+
+    nargs = 0;
+    while ((argp = va_arg(adummy, axis2_char_t *)))
+    {
+        if (nargs < MAX_SAVED_LENGTHS)
+        {
+            len = saved_lengths[nargs++];
+        }
+        else
+        {
+            len = strlen(argp);
+        }
+
+        memcpy(cp, argp, len);
+        cp += len;
+    }
+
+    va_end(adummy);
+
+    /* Return the result string */
+
+    *cp = '\0';
+    return str;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_stracat(const axis2_char_t *s1, const axis2_char_t *s2, const axis2_env_t *env)
+{
+    axis2_char_t *ret = NULL;
+    int alloc_len = -1;
+
+    if (NULL == s1 && NULL == s2)
+    {
+        return NULL;
+    }
+    if (NULL == s1)
+    {
+        return (axis2_char_t*)AXIS2_STRDUP(s2, env);
+    }
+    if (NULL == s2)
+    {
+        return (axis2_char_t*)AXIS2_STRDUP(s1, env);
+    }
+    alloc_len = axis2_strlen(s1) + axis2_strlen(s2) + 1;
+    ret = (axis2_char_t*)AXIS2_MALLOC(env->allocator,
+            alloc_len * sizeof(axis2_char_t));
+    memcpy(ret, s1, axis2_strlen(s1)*sizeof(axis2_char_t));
+    memcpy((ret + axis2_strlen(s1)*sizeof(axis2_char_t)), s2,
+            axis2_strlen(s2)*sizeof(axis2_char_t));
+    ret[alloc_len*sizeof(axis2_char_t) - sizeof(axis2_char_t)] = '\0';
+    return ret;
+}
+
+AXIS2_EXTERN int AXIS2_CALL
+axis2_strcmp(const axis2_char_t * s1, const axis2_char_t * s2)
+{
+    if (s1 && s2)
+        return strcmp(s1, s2);
+    else
+        return -1;
+}
+
+
+AXIS2_EXTERN int AXIS2_CALL
+axis2_strncmp(const axis2_char_t * s1, const axis2_char_t * s2, int n)
+{
+    if (s1 && s2)
+        return strncmp(s1, s2, n);
+    else
+        return -1;
+}
+
+
+AXIS2_EXTERN axis2_ssize_t AXIS2_CALL
+axis2_strlen(const axis2_char_t * s)
+{
+    if (s)
+        return strlen(s);
+    else
+        return -1;
+}
+
+
+AXIS2_EXTERN int AXIS2_CALL
+axis2_strcasecmp(const axis2_char_t *s1, const axis2_char_t *s2)
+{
+	while (*s1 != '\0' && *s2 != '\0'){
+		if(*s1 >= 'A' && *s1 <= 'Z' && *s2 >= 'a' && *s2 <= 'z'){
+			if (*s2 - *s1 - (char)32 != 0){ return 1;} 
+		}
+		else if(*s1 >= 'a' && *s1 <= 'z' && *s2 >= 'A' && *s2 <= 'Z'){
+			if (*s1 - *s2 - 32 != 0) {return 1;}	
+		}
+		else if (*s1 - *s2 != 0)
+			return 1;
+
+		s1++; s2++;
+	}
+	if (*s1 != *s2)
+		return 1;
+
+	return 0;
+}
+
+
+AXIS2_EXTERN int AXIS2_CALL
+axis2_strncasecmp(const axis2_char_t *s1, const axis2_char_t *s2, const int n)
+{
+    axis2_char_t *str1 = (axis2_char_t *)s1, *str2 = (axis2_char_t *)s2;
+    int i = (int)n;
+
+    while (--i >= 0 && toupper(*str1) == toupper(*str2++))
+        if (toupper(*str1++) == '\0')
+            return(0);
+    return(i < 0 ? 0 : toupper(*str1) - toupper(*--str2));
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+axis2_strstr(const axis2_char_t *heystack,
+        const axis2_char_t *needle)
+{
+    return strstr(heystack, needle);
+}
+
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+axis2_rindex(const axis2_char_t *_s, axis2_char_t _ch)
+{
+    int i, ilen = axis2_strlen(_s);
+    if (ilen < 1)
+        return NULL;
+    for (i = ilen - 1;i >= 0;i--)
+    {
+        if (_s[i] == _ch)
+            return (axis2_char_t *)(_s + i);
+    }
+    return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_replace(const axis2_env_t *env,
+        axis2_char_t *str,
+        int s1,
+        int s2)
+{
+    axis2_char_t *newstr = NULL;
+    axis2_char_t *index = NULL;
+    if (!str)
+        return NULL;
+
+    newstr = AXIS2_STRDUP(str, env);
+
+    index = strchr(newstr, s1);
+    while (index)
+    {
+        newstr[index - newstr] = s2;
+        index = strchr(newstr, s1);
+    }
+    return newstr;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_strltrim(
+    const axis2_env_t *env,
+    const axis2_char_t *_s,
+    const axis2_char_t *_trim)
+{
+    axis2_char_t *_p = NULL;
+    axis2_char_t *ret = NULL;
+
+    if (!_s)
+        return NULL;
+    _p = (axis2_char_t *) _s;
+    if (!_trim)
+        _trim = " \t\r\n";
+
+    while (*_p)
+    {
+        if (!strchr(_trim, *_p))
+        {
+            ret = (axis2_char_t *) AXIS2_STRDUP(_p, env);
+            break;
+        }
+        ++_p;
+    }
+    return ret;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_strrtrim(
+    const axis2_env_t *env,
+    const axis2_char_t *_s,
+    const axis2_char_t *_trim)
+{
+    axis2_char_t *__tail;
+    axis2_char_t *ret = NULL;
+
+    if (!_s)
+        return NULL;
+    __tail = ((axis2_char_t *) _s) + axis2_strlen(_s);
+    if (!_trim)
+        _trim = " \t\n\r";
+    while (_s < __tail--)
+    {
+        if (!strchr(_trim, *__tail))
+        {
+            ret = (axis2_char_t *) AXIS2_STRDUP(_s, env);
+            break;
+        }
+        *__tail = 0;
+    }
+    return ret;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_strtrim(
+    const axis2_env_t *env,
+    const axis2_char_t *_s,
+    const axis2_char_t *_trim)
+{
+    axis2_char_t *_p = NULL;
+    axis2_char_t *_q = NULL;
+
+    _p = axis2_strltrim(env, _s, _trim);
+    _q = axis2_strrtrim(env, _p, _trim);
+    if (_p)
+        AXIS2_FREE(env->allocator, _p);
+    return _q;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_string_replace(axis2_char_t* str, axis2_char_t old, axis2_char_t new)
+{
+    axis2_char_t* str_returns = str;
+    for (; *str != '\0' ; str ++)
+    {
+        if (*str == old)
+        {
+            *str = new;
+        }
+    }
+    return str_returns;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_string_substring_starting_at(axis2_char_t* str, int s)
+{
+    int len;
+    int pos_to_shift;
+
+    len = strlen(str);
+    pos_to_shift = len - s + 1;
+
+    if (len <= s)
+    {
+        return NULL;
+    }
+    memmove(str , str + s, pos_to_shift);
+    return str;
+}
+
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_string_substring_ending_at(axis2_char_t* str, int e)
+{
+    axis2_char_t* ptr = NULL;
+    int length = 0;
+
+    length = strlen(str);
+    ptr = str;
+    if (length <=  e)
+    {
+        return NULL;
+    }
+    ptr += e;
+    *ptr = '\0';
+    return str;
+}
+
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_string_tolower(axis2_char_t* str)
+{
+    axis2_char_t* temp_str = NULL;
+    for (temp_str = str; *temp_str != '\0' ; temp_str ++)
+    {
+        *temp_str = tolower(*temp_str);
+    }
+    return str;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+axis2_string_toupper(axis2_char_t* str)
+{
+    axis2_char_t* temp_str = NULL;
+    for (temp_str = str; *temp_str != '\0' ; temp_str ++)
+    {
+        *temp_str = toupper(*temp_str);
+    }
+    return str;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+axis2_strcasestr(const axis2_char_t *heystack, const axis2_char_t *needle)
+{
+    axis2_char_t start, current;
+    size_t len;
+
+    if (!heystack || !needle)
+        return NULL;
+
+    if ((start = *needle++))
+    {
+        len = strlen(needle);
+        do
+        {
+            do
+            {
+                if (!(current = *heystack++))
+                    return NULL;
+            } while (toupper(current) != toupper(start));
+        } while (axis2_strncasecmp(heystack, needle, len));
+        heystack--;
+    }
+    return (axis2_char_t *)heystack;
+}
+



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org