From 537c4b33fdf6e143243d5a0d286eeb247362e806 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Mon, 18 Jul 2005 15:22:28 +0000 Subject: API Improvements - Removed 'rlen' return parameters there not necessary for multibyte encodings - Two versions of recode functions: rccRecode -> rccRecode, rccSizedRecode - Class Types: CONST, SKIP_SAVELOAD - New recode functions: rccToCharset, rccFromCharset - More new recode functions: rccRecodeToCharset, rccRecodeFromCharset, rccRecodeCharsets - New function: rccGetCompiledConfiguration - All warnings are fixed - Perform "File Name" search only if there are non ISO8859-1 chars in the name. - Do not copy invalid characters, - skip them. - Fixed error in rccRecode with 'Recoding Cache' switched On. - Strip leading and trailing spaces in rccDB4 get/set --- src/rccstring.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'src/rccstring.c') diff --git a/src/rccstring.c b/src/rccstring.c index bd5ef15..d6c6805 100644 --- a/src/rccstring.c +++ b/src/rccstring.c @@ -1,19 +1,23 @@ #include +#include #include +#include "../config.h" + #include "internal.h" #include "rccstring.h" -rcc_string rccCreateString(rcc_language_id language_id, const char *buf, size_t len, size_t *rlen) { +rcc_string rccCreateString(rcc_language_id language_id, const char *buf, size_t len) { char *res; rcc_string_header *header; - - len = STRNLEN(buf, len); + + if (!buf) return NULL; + if (!len) len = strlen(buf); res = (char*)malloc(len+sizeof(rcc_string_header)+1); if (!res) return NULL; - strncpy(res + sizeof(rcc_string_header), buf, len); + memcpy(res + sizeof(rcc_string_header), buf, len); res[sizeof(rcc_string_header) + len] = 0; memset(res, 0xFF, sizeof(rcc_string_header)); @@ -21,7 +25,6 @@ rcc_string rccCreateString(rcc_language_id language_id, const char *buf, size_t header->magic = RCC_STRING_MAGIC; header->language_id = language_id; - if (rlen) *rlen = len + sizeof(rcc_string_header); return (rcc_string)res; } @@ -78,7 +81,7 @@ size_t rccStringSizedCheck(const char *str, size_t len) { if (!str) return 0; - newlen = STRNLEN(str, len); + newlen = len?len:strlen(str); if (newlen>sizeof(rcc_string_header)) { if ((len==newlen)&&(!str[newlen-2])) return 0; newlen-=sizeof(rcc_string_header); @@ -88,16 +91,16 @@ size_t rccStringSizedCheck(const char *str, size_t len) { } -rcc_language_id rccStringGetLanguage(const rcc_string str) { +rcc_language_id rccStringGetLanguage(rcc_const_string str) { if (!str) return (rcc_language_id)-1; return ((rcc_string_header*)str)->language_id; } -const char *rccStringGetString(const rcc_string str) { +const char *rccStringGetString(rcc_const_string str) { return (const char *)str + sizeof(rcc_string_header); } -char *rccStringExtractString(const rcc_string str) { +char *rccStringExtractString(rcc_const_string str) { size_t len; char *res; @@ -107,7 +110,7 @@ char *rccStringExtractString(const rcc_string str) { res = (char*)malloc(len+1); if (!res) return NULL; - strncpy(res, rccStringGetString(str), len); + memcpy(res, rccStringGetString(str), len); res[len] = 0; return res; @@ -119,12 +122,11 @@ const char *rccGetString(const char *str) { return str; } -const char *rccSizedGetString(const char *str, size_t len, size_t *rlen) { +const char *rccSizedGetString(const char *str, size_t len) { size_t newlen; newlen = rccStringSizedCheck(str, len); if (newlen) { - if (rlen) *rlen = newlen; return rccStringGetString((const rcc_string)str); } @@ -148,3 +150,19 @@ int rccStringNCaseCmp(const char *str1, const char *str2, size_t n) { return strncasecmp(rccGetString(str1), rccGetString(str2), n); } +#ifndef HAVE_STRNLEN +int rccStrnlen(const char *str, size_t size) { + unsigned int i; + for (i=0;((i0x7F) return 0; + return 1; +} -- cgit v1.2.3