diff options
Diffstat (limited to 'tinySAK/src/tsk_string.c')
-rwxr-xr-x | tinySAK/src/tsk_string.c | 529 |
1 files changed, 265 insertions, 264 deletions
diff --git a/tinySAK/src/tsk_string.c b/tinySAK/src/tsk_string.c index 301eed3..2ee5c6d 100755 --- a/tinySAK/src/tsk_string.c +++ b/tinySAK/src/tsk_string.c @@ -58,23 +58,23 @@ */ tsk_string_t* tsk_string_create(const char* str) { - return (tsk_string_t*)tsk_object_new(tsk_string_def_t, str); + return (tsk_string_t*)tsk_object_new(tsk_string_def_t, str); } int tsk_string_pred_icmp(const tsk_list_item_t* item, const void* str) { - if (item && str){ - return tsk_stricmp(TSK_STRING_STR(item->data), (const char*)str); - } - return -1; + if (item && str) { + return tsk_stricmp(TSK_STRING_STR(item->data), (const char*)str); + } + return -1; } int tsk_string_pred_cmp(const tsk_list_item_t* item, const void* str) { - if (item && str){ - return tsk_strcmp(TSK_STRING_STR(item->data), (const char*)str); - } - return -1; + if (item && str) { + return tsk_strcmp(TSK_STRING_STR(item->data), (const char*)str); + } + return -1; } /**@ingroup tsk_string_group @@ -84,8 +84,8 @@ int tsk_string_pred_cmp(const tsk_list_item_t* item, const void* str) */ char tsk_b10tob16(char c) { - static char HEX[] = "0123456789abcdef"; - return HEX[c & 15]; + static char HEX[] = "0123456789abcdef"; + return HEX[c & 15]; } /**@ingroup tsk_string_group @@ -95,7 +95,7 @@ char tsk_b10tob16(char c) */ char tsk_b16tob10(char c) { - return isdigit(c) ? c - '0' : tolower(c) - 'a' + 10; + return isdigit(c) ? c - '0' : tolower(c) - 'a' + 10; } /**@ingroup tsk_string_group @@ -112,10 +112,10 @@ char tsk_b16tob10(char c) */ int tsk_stricmp(const char * str1, const char * str2) { - return (str1 && str2) ? - ((tolower(*str1) == tolower(*str2)) ? stricmp(str1, str2) : (*str1 - *str2)) /* Compare first charaters before doing complete comparison */ - : - ((!str1 && !str2) ? 0 : -1); + return (str1 && str2) ? + ((tolower(*str1) == tolower(*str2)) ? stricmp(str1, str2) : (*str1 - *str2)) /* Compare first charaters before doing complete comparison */ + : + ((!str1 && !str2) ? 0 : -1); } /**@ingroup tsk_string_group @@ -133,20 +133,20 @@ int tsk_stricmp(const char * str1, const char * str2) */ int tsk_strnicmp(const char * str1, const char * str2, tsk_size_t n) { - return (str1 && str2 && n) ? - ((tolower(*str1) == tolower(*str2)) ? strnicmp(str1, str2, n) : (*str1 - *str2)) /* Compare first charaters before doing complete comparison */ - : - ((!str1 && !str2) ? 0 : -1); + return (str1 && str2 && n) ? + ((tolower(*str1) == tolower(*str2)) ? strnicmp(str1, str2, n) : (*str1 - *str2)) /* Compare first charaters before doing complete comparison */ + : + ((!str1 && !str2) ? 0 : -1); } /**@ingroup tsk_string_group */ int tsk_strcmp(const char * str1, const char * str2) { - return (str1 && str2) ? - ((*str1 == *str2) ? stricmp(str1, str2) : (*str1 - *str2)) /* Compare first charaters before doing complete comparison */ - : - ((!str1 && !str2) ? 0 : -1); + return (str1 && str2) ? + ((*str1 == *str2) ? stricmp(str1, str2) : (*str1 - *str2)) /* Compare first charaters before doing complete comparison */ + : + ((!str1 && !str2) ? 0 : -1); } /**@ingroup tsk_string_group @@ -164,7 +164,7 @@ int tsk_strcmp(const char * str1, const char * str2) */ int tsk_strncmp(const char * str1, const char * str2, tsk_size_t n) { - return (str1 && str2) ? ((*str1 != *str2) ? -1 : strncmp(str1, str2, n)) : ((!str1 && !str2) ? 0 : -1); + return (str1 && str2) ? ((*str1 != *str2) ? -1 : strncmp(str1, str2, n)) : ((!str1 && !str2) ? 0 : -1); } /**@ingroup tsk_string_group @@ -174,10 +174,10 @@ int tsk_strncmp(const char * str1, const char * str2, tsk_size_t n) */ char* tsk_strdup(const char *s1) { - if (s1){ - return strdup(s1); - } - return tsk_null; + if (s1) { + return strdup(s1); + } + return tsk_null; } /** Duplicates the first @a n chars of @a s1. @@ -187,18 +187,18 @@ char* tsk_strdup(const char *s1) **/ char* tsk_strndup(const char *s1, tsk_size_t n) { - char *ret = tsk_null; + char *ret = tsk_null; - if (s1 && n){ - tsk_size_t len = tsk_strlen(s1); - tsk_size_t nret = (n > len) ? (len) : (n); + if (s1 && n) { + tsk_size_t len = tsk_strlen(s1); + tsk_size_t nret = (n > len) ? (len) : (n); - if ((ret = (char*)tsk_calloc((nret + 1), sizeof(uint8_t)))){ - memcpy(ret, s1, nret); - } - } + if ((ret = (char*)tsk_calloc((nret + 1), sizeof(uint8_t)))) { + memcpy(ret, s1, nret); + } + } - return ret; + return ret; } /**@ingroup tsk_string_group @@ -210,7 +210,7 @@ char* tsk_strndup(const char *s1, tsk_size_t n) */ tsk_bool_t tsk_strcontains(const char * str, tsk_size_t size, const char * substring) { - return (tsk_strindexOf(str, size, substring) >= 0); + return (tsk_strindexOf(str, size, substring) >= 0); } /**@ingroup tsk_string_group @@ -223,42 +223,42 @@ tsk_bool_t tsk_strcontains(const char * str, tsk_size_t size, const char * subst */ int tsk_strindexOf(const char * str, tsk_size_t size, const char * substring) { - if (str && substring){ - const char* sub_start = strstr(str, substring); - if (sub_start && (sub_start < (str + size))) { - int ret; - tsk_subsat_int32_ptr(sub_start, str, &ret); - return ret; - } - } - return -1; + if (str && substring) { + const char* sub_start = strstr(str, substring); + if (sub_start && (sub_start < (str + size))) { + int ret; + tsk_subsat_int32_ptr(sub_start, str, &ret); + return ret; + } + } + return -1; } /**@ingroup tsk_string_group */ int tsk_strLastIndexOf(const char * str, tsk_size_t size, const char * substring) { - if (str && substring){ - tsk_size_t sub_size = tsk_strlen(substring); - const char* last_sub_start = tsk_null; - const char* sub_start = strstr(str, substring); - const char* end = (str + size); - while (sub_start && (sub_start < end)) { - last_sub_start = sub_start; - if ((sub_start + sub_size) < end){ - sub_start = strstr((sub_start + sub_size), substring); - } - else { - break; - } - } - if (last_sub_start) { - int ret; - tsk_subsat_int32_ptr(last_sub_start, str, &ret); - return ret; - } - } - return -1; + if (str && substring) { + tsk_size_t sub_size = tsk_strlen(substring); + const char* last_sub_start = tsk_null; + const char* sub_start = strstr(str, substring); + const char* end = (str + size); + while (sub_start && (sub_start < end)) { + last_sub_start = sub_start; + if ((sub_start + sub_size) < end) { + sub_start = strstr((sub_start + sub_size), substring); + } + else { + break; + } + } + if (last_sub_start) { + int ret; + tsk_subsat_int32_ptr(last_sub_start, str, &ret); + return ret; + } + } + return -1; } /**@ingroup tsk_string_group @@ -270,49 +270,49 @@ int tsk_strLastIndexOf(const char * str, tsk_size_t size, const char * substring */ void tsk_strcat(char** destination, const char* source) { - tsk_strncat(destination, source, tsk_strlen(source)); + tsk_strncat(destination, source, tsk_strlen(source)); } /**@ingroup tsk_string_group */ void tsk_strcat_2(char** destination, const char* format, ...) { - char* temp = tsk_null; - int len; - va_list ap; + char* temp = tsk_null; + int len; + va_list ap; - /* initialize variable arguments */ - va_start(ap, format); - /* compute */ - if ((len = tsk_sprintf_2(&temp, format, &ap))){ - tsk_strncat(destination, temp, len); - } - /* reset variable arguments */ - va_end(ap); - TSK_FREE(temp); + /* initialize variable arguments */ + va_start(ap, format); + /* compute */ + if ((len = tsk_sprintf_2(&temp, format, &ap))) { + tsk_strncat(destination, temp, len); + } + /* reset variable arguments */ + va_end(ap); + TSK_FREE(temp); } /**@ingroup tsk_string_group */ void tsk_strncat(char** destination, const char* source, tsk_size_t n) { - tsk_size_t index = 0; - tsk_size_t tsk_size_to_cat = (n > tsk_strlen(source)) ? tsk_strlen(source) : n; + tsk_size_t index = 0; + tsk_size_t tsk_size_to_cat = (n > tsk_strlen(source)) ? tsk_strlen(source) : n; - if (!source || !n) { - return; - } + if (!source || !n) { + return; + } - if (!*destination) { - *destination = (char*)tsk_malloc(tsk_size_to_cat + 1); - strncpy(*destination, source, tsk_size_to_cat + 1); - } - else { - index = tsk_strlen(*destination); - *destination = (char*)tsk_realloc(*destination, index + tsk_size_to_cat + 1); - strncpy(((*destination) + index), source, tsk_size_to_cat + 1); - } - (*destination)[index + tsk_size_to_cat] = '\0'; + if (!*destination) { + *destination = (char*)tsk_malloc(tsk_size_to_cat + 1); + strncpy(*destination, source, tsk_size_to_cat + 1); + } + else { + index = tsk_strlen(*destination); + *destination = (char*)tsk_realloc(*destination, index + tsk_size_to_cat + 1); + strncpy(((*destination) + index), source, tsk_size_to_cat + 1); + } + (*destination)[index + tsk_size_to_cat] = '\0'; } /**@ingroup tsk_string_group @@ -329,68 +329,68 @@ void tsk_strncat(char** destination, const char* source, tsk_size_t n) */ int tsk_sprintf(char** str, const char* format, ...) { - int len; - va_list ap; + int len; + va_list ap; - /* initialize variable arguments */ - va_start(ap, format); - /* compute */ - len = tsk_sprintf_2(str, format, &ap); - /* reset variable arguments */ - va_end(ap); + /* initialize variable arguments */ + va_start(ap, format); + /* compute */ + len = tsk_sprintf_2(str, format, &ap); + /* reset variable arguments */ + va_end(ap); - return len; + return len; } /**@ingroup tsk_string_group */ int tsk_sprintf_2(char** str, const char* format, va_list* ap) { - int len = 0; - va_list ap2; + int len = 0; + va_list ap2; - /* free previous value */ - if (*str){ - tsk_free((void**)str); - } + /* free previous value */ + if (*str) { + tsk_free((void**)str); + } - /* needed for 64bit platforms where vsnprintf will change the va_list */ - tsk_va_copy(ap2, *ap); + /* needed for 64bit platforms where vsnprintf will change the va_list */ + tsk_va_copy(ap2, *ap); - /* compute destination len for windows mobile - */ + /* compute destination len for windows mobile + */ #if defined(_WIN32_WCE) - { - int n; - len = (tsk_strlen(format) * 2); - *str = (char*)tsk_calloc(1, len+1); - for(;;){ - if( (n = vsnprintf(*str, len, format, *ap)) >= 0 && (n<len) ){ - len = n; - goto done; - } - else{ - len += 10; - *str = (char*)tsk_realloc(*str, len+1); - } - } - done: - (*str)[len] = '\0'; - } + { + int n; + len = (tsk_strlen(format) * 2); + *str = (char*)tsk_calloc(1, len+1); + for(;;) { + if( (n = vsnprintf(*str, len, format, *ap)) >= 0 && (n<len) ) { + len = n; + goto done; + } + else { + len += 10; + *str = (char*)tsk_realloc(*str, len+1); + } + } +done: + (*str)[len] = '\0'; + } #else - len = vsnprintf(0, 0, format, *ap); - *str = (char*)tsk_calloc(1, len + 1); - vsnprintf(*str, len + len = vsnprintf(0, 0, format, *ap); + *str = (char*)tsk_calloc(1, len + 1); + vsnprintf(*str, len #if !defined(_MSC_VER) || defined(__GNUC__) - +1 + +1 #endif - , format, ap2); + , format, ap2); #endif - va_end(ap2); + va_end(ap2); - return len; - } + return len; +} /**@ingroup tsk_string_group * Updates the value of @a str. @@ -399,17 +399,17 @@ int tsk_sprintf_2(char** str, const char* format, va_list* ap) */ void tsk_strupdate(char** str, const char* newval) { - if (str && *str != newval){ // do nothing if same memory address - // use realloc() to keep same memory address - tsk_size_t length = tsk_strlen(newval); - if (!length) { - tsk_free((void**)str); - } - else if ((*str = (char*)tsk_realloc(*str, length + 1))){ - memcpy(*str, newval, length); - (*str)[length] = '\0'; - } - } + if (str && *str != newval) { // do nothing if same memory address + // use realloc() to keep same memory address + tsk_size_t length = tsk_strlen(newval); + if (!length) { + tsk_free((void**)str); + } + else if ((*str = (char*)tsk_realloc(*str, length + 1))) { + memcpy(*str, newval, length); + (*str)[length] = '\0'; + } + } } @@ -419,15 +419,17 @@ void tsk_strupdate(char** str, const char* newval) */ void tsk_strtrim_left(char **str) { - if (str && *str) { - tsk_size_t count = 0; - while (isspace(*((*str) + count))) count++; - if (count) { - tsk_size_t len = tsk_strlen((*str)); - memmove((*str), (*str) + count, (len - count)); - (*str)[len - count] = '\0'; - } - } + if (str && *str) { + tsk_size_t count = 0; + while (isspace(*((*str) + count))) { + count++; + } + if (count) { + tsk_size_t len = tsk_strlen((*str)); + memmove((*str), (*str) + count, (len - count)); + (*str)[len - count] = '\0'; + } + } } /**@ingroup tsk_string_group @@ -436,13 +438,15 @@ void tsk_strtrim_left(char **str) */ void tsk_strtrim_right(char **str) { - if (str && *str){ - tsk_size_t size; - if ((size = tsk_strlen(*str))){ - while (isspace(*((*str) + size - 1))) size--; - *(*str + size) = '\0'; - } - } + if (str && *str) { + tsk_size_t size; + if ((size = tsk_strlen(*str))) { + while (isspace(*((*str) + size - 1))) { + size--; + } + *(*str + size) = '\0'; + } + } } /**@ingroup tsk_string_group * Removes all occurrences of white space characters from the beginning and end of @a str. @@ -450,10 +454,10 @@ void tsk_strtrim_right(char **str) */ void tsk_strtrim(char **str) { - // left - tsk_strtrim_left(str); - // right - tsk_strtrim_right(str); + // left + tsk_strtrim_left(str); + // right + tsk_strtrim_right(str); } /**@ingroup tsk_string_group @@ -463,7 +467,7 @@ void tsk_strtrim(char **str) */ void tsk_strquote(char **str) { - tsk_strquote_2(str, '"', '"'); + tsk_strquote_2(str, '"', '"'); } /**@ingroup tsk_string_group @@ -474,12 +478,12 @@ void tsk_strquote(char **str) */ void tsk_strquote_2(char **str, char lquote, char rquote) { - if (str && *str){ - char *result = tsk_null; - tsk_sprintf(&result, "%c%s%c", lquote, *str, rquote); - tsk_free((void**)str); - *str = result; - } + if (str && *str) { + char *result = tsk_null; + tsk_sprintf(&result, "%c%s%c", lquote, *str, rquote); + tsk_free((void**)str); + *str = result; + } } /**@ingroup tsk_string_group @@ -489,7 +493,7 @@ void tsk_strquote_2(char **str, char lquote, char rquote) */ void tsk_strunquote(char **str) { - tsk_strunquote_2(str, '"', '"'); + tsk_strunquote_2(str, '"', '"'); } /**@ingroup tsk_string_group @@ -501,13 +505,13 @@ void tsk_strunquote(char **str) */ void tsk_strunquote_2(char **str, char lquote, char rquote) { - if (str && *str) { - tsk_size_t size = tsk_strlen(*str); - if (size >= 2 && **str == lquote && *((*str) + size - 1) == rquote){ - memmove((*str), (*str) + 1, (size - 2)); - *((*str) + size - 2) = '\0'; - } - } + if (str && *str) { + tsk_size_t size = tsk_strlen(*str); + if (size >= 2 && **str == lquote && *((*str) + size - 1) == rquote) { + memmove((*str), (*str) + 1, (size - 2)); + *((*str) + size - 2) = '\0'; + } + } } /**@ingroup tsk_string_group @@ -517,36 +521,36 @@ void tsk_strunquote_2(char **str, char lquote, char rquote) */ void tsk_itoa(int64_t i, tsk_istr_t *result) { - memset(result, 0, sizeof(*result)); - sprintf(*result, "%lld", i); + memset(result, 0, sizeof(*result)); + sprintf(*result, "%lld", i); } /**@ingroup tsk_string_group */ int64_t tsk_atoll(const char* str) { - // FIXME: use HAVE_ATOLL and use macro instead of function - if (str){ + // FIXME: use HAVE_ATOLL and use macro instead of function + if (str) { #if defined(_MSC_VER) - return _atoi64(str); + return _atoi64(str); #elif defined(__GNUC__) - return atoll(str); + return atoll(str); #else - return atol(str); + return atol(str); #endif - } - return 0; + } + return 0; } /**@ingroup tsk_string_group */ long tsk_atox(const char* str) { - long ret = 0; - if (str){ - sscanf(str, "%lx", &ret); - } - return ret; + long ret = 0; + if (str) { + sscanf(str, "%lx", &ret); + } + return ret; } /**@ingroup tsk_string_group @@ -556,8 +560,8 @@ long tsk_atox(const char* str) **/ void tsk_strrandom(tsk_istr_t *result) { - static uint64_t __counter = 1; - tsk_itoa((tsk_time_now() ^ (rand())) ^ ++__counter, result); + static uint64_t __counter = 1; + tsk_itoa((tsk_time_now() ^ (rand())) ^ ++__counter, result); } /**@ingroup tsk_string_group @@ -572,13 +576,13 @@ void tsk_strrandom(tsk_istr_t *result) **/ void tsk_str_from_hex(const uint8_t *hex, tsk_size_t size, char* str) { - static const char *TSK_HEXA_VALUES = { "0123456789abcdef" }; - tsk_size_t i; + static const char *TSK_HEXA_VALUES = { "0123456789abcdef" }; + tsk_size_t i; - for (i = 0; i < size; i++){ - str[2 * i] = TSK_HEXA_VALUES[(*(hex + i) & 0xf0) >> 4]; - str[(2 * i) + 1] = TSK_HEXA_VALUES[(*(hex + i) & 0x0f)]; - } + for (i = 0; i < size; i++) { + str[2 * i] = TSK_HEXA_VALUES[(*(hex + i) & 0xf0) >> 4]; + str[(2 * i) + 1] = TSK_HEXA_VALUES[(*(hex + i) & 0x0f)]; + } } /**@ingroup tsk_string_group @@ -590,8 +594,8 @@ void tsk_str_from_hex(const uint8_t *hex, tsk_size_t size, char* str) **/ void tsk_str_to_hex(const char *str, tsk_size_t size, uint8_t* hex) { - // to avoid SIGBUS error when memory is misaligned do not use sscanf("%2x") - TSK_DEBUG_FATAL("Not implemented."); + // to avoid SIGBUS error when memory is misaligned do not use sscanf("%2x") + TSK_DEBUG_FATAL("Not implemented."); } @@ -600,36 +604,30 @@ void tsk_str_to_hex(const char *str, tsk_size_t size, uint8_t* hex) TINYSAK_API std::vector<char> rt_tsk_str_to_native(Platform::String^ str) { - if(str != nullptr && !str->IsEmpty()) - { - int len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), nullptr, 0, nullptr, nullptr); - if (len > 0) - { - std::vector<char> vec(len + 1); - if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), vec.data(), len, nullptr, nullptr) == len) - { - return std::move(vec); - } - } - } - return std::move(std::vector<char>(0)); + if(str != nullptr && !str->IsEmpty()) { + int len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), nullptr, 0, nullptr, nullptr); + if (len > 0) { + std::vector<char> vec(len + 1); + if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), vec.data(), len, nullptr, nullptr) == len) { + return std::move(vec); + } + } + } + return std::move(std::vector<char>(0)); } TINYSAK_API Platform::String^ rt_tsk_str_to_managed(char const* str) { - if(str) - { - int len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, nullptr, 0); - if (len > 0) - { - std::vector<wchar_t> vec(len); - if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, vec.data(), len) == len) - { - return ref new Platform::String(vec.data()); - } - } - } - return nullptr; + if(str) { + int len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, nullptr, 0); + if (len > 0) { + std::vector<wchar_t> vec(len); + if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, vec.data(), len) == len) { + return ref new Platform::String(vec.data()); + } + } + } + return nullptr; } #endif /* TSK_UNDER_WINDOWS_RT */ @@ -644,42 +642,45 @@ TINYSAK_API Platform::String^ rt_tsk_str_to_managed(char const* str) // static tsk_object_t* tsk_string_ctor(tsk_object_t * self, va_list * app) { - tsk_string_t *string = (tsk_string_t*)self; - const char *value = va_arg(*app, const char *); - if (value){ - string->value = tsk_strdup(value); - } - return self; + tsk_string_t *string = (tsk_string_t*)self; + const char *value = va_arg(*app, const char *); + if (value) { + string->value = tsk_strdup(value); + } + return self; } static tsk_object_t* tsk_string_dtor(tsk_object_t * self) { - tsk_string_t *string = (tsk_string_t*)self; - if (string){ - TSK_FREE(string->value); - } + tsk_string_t *string = (tsk_string_t*)self; + if (string) { + TSK_FREE(string->value); + } - return self; + return self; } static int tsk_string_cmp(const tsk_object_t *_s1, const tsk_object_t *_s2) { - const tsk_string_t *s1 = (const tsk_string_t *)_s1; - const tsk_string_t *s2 = (const tsk_string_t *)_s2; - - if (s1 && s2){ - return tsk_stricmp(s1->value, s2->value); - } - else if (!s1 && !s2) return 0; - else return -1; -} - -static const tsk_object_def_t tsk_string_def_s = -{ - sizeof(tsk_string_t), - tsk_string_ctor, - tsk_string_dtor, - tsk_string_cmp, + const tsk_string_t *s1 = (const tsk_string_t *)_s1; + const tsk_string_t *s2 = (const tsk_string_t *)_s2; + + if (s1 && s2) { + return tsk_stricmp(s1->value, s2->value); + } + else if (!s1 && !s2) { + return 0; + } + else { + return -1; + } +} + +static const tsk_object_def_t tsk_string_def_s = { + sizeof(tsk_string_t), + tsk_string_ctor, + tsk_string_dtor, + tsk_string_cmp, }; const tsk_object_def_t *tsk_string_def_t = &tsk_string_def_s; |