/* ******************************************************************************* * * * COPYRIGHT: * * (C) Copyright International Business Machines Corporation, 1998 * * Licensed Material - Program-Property of IBM - All Rights Reserved. * * US Government Users Restricted Rights - Use, duplication, or disclosure * * restricted by GSA ADP Schedule Contract with IBM Corp. * * * ******************************************************************************* * * File ustring.h * * Modification History: * * Date Name Description * 12/07/98 bertrand Creation. ******************************************************************************* */ #include "ustring.h" #include "utypes.h" #include "cstring.h" #include "ucnv.h" static UConverter* _defaultConverter = NULL; static UErrorCode gErr = U_ZERO_ERROR; #define MAX_STRLEN 0x0FFFFFFF /*Lazy evaluating macro for the default converter*/ #define defaultConverter (_defaultConverter==NULL)?_defaultConverter=ucnv_open(NULL, &gErr):_defaultConverter UChar* u_strcat(UChar *dst, const UChar *src) { UChar *anchor = dst; /* save a pointer to start of dst */ while(*dst++); /* To end of first string */ dst--; /* Return to the null */ while(*dst++ = *src++); /* copy string 2 over */ return anchor; } UChar* u_strncat(UChar *dst, const UChar *src, int32_t n ) { UChar *anchor = dst; /* save a pointer to start of dst */ if (!n) return dst; while(*dst++); /* To end of first string */ dst--; /* Return to the null */ while((*dst++ = *src++) && --n); /* copy string 2 over */ *dst = 0x0000; return anchor; } UChar* u_strchr(const UChar *s, UChar c) { while((*s != c) && *s) s++; if(*s == c) return (UChar*) s; return NULL; } int32_t u_strcmp(const UChar *s1, const UChar *s2) { while((*s1 == *s2) && *s1) { s1++; s2++; } return (int32_t)*s1 - (int32_t)*s2; } int32_t u_strncmp(const UChar *s1, const UChar *s2, int32_t n) { if (!n) return 0; while((*s1 == *s2) && *s1 && --n) { s1++; s2++; } return (int32_t)*s1 - (int32_t)*s2; } UChar* u_strcpy(UChar *dst, const UChar *src) { UChar *anchor = dst; /* save the start of result string */ while(*dst++ = *src++); return anchor; } UChar* u_strncpy(UChar *dst, const UChar *src, int32_t n) { UChar *anchor = dst; /* save the start of result string */ if (!n) return dst; while((*dst++ = *src++) && --n); *dst = 0x0000; return anchor; } int32_t u_strlen(const UChar *s) { int32_t i = 0; while(*s++) i++; return i; } UChar* u_uastrcpy(UChar *ucs1, const char *s2 ) { UErrorCode err = U_ZERO_ERROR; ucnv_toUChars(defaultConverter, ucs1, MAX_STRLEN, s2, icu_strlen(s2), &err); return ucs1; } UChar* u_uastrncpy(UChar *ucs1, const char *s2 , int32_t n) { UErrorCode err = U_ZERO_ERROR; int32_t end = ucnv_toUChars(defaultConverter, ucs1, n, s2, icu_strlen(s2), &err); ucs1[icu_min(end,n)] = 0x0000; return ucs1; } char* u_austrcpy(char *s1, const UChar *ucs2 ) { char * anchor = s1; /* save the start of result string */ UErrorCode err = U_ZERO_ERROR; int32_t len = ucnv_fromUChars(defaultConverter, s1, MAX_STRLEN, ucs2, &err); s1[len] = '\0'; return s1; }