[strings] string_trim makes a copy rather than modifying the pointer

This commit is contained in:
Al
2016-11-28 15:06:07 -08:00
parent d922d9a60a
commit 89f6611c4e
3 changed files with 14 additions and 18 deletions

View File

@@ -11,7 +11,10 @@ char *normalize_string_utf8(char *str, uint64_t options) {
bool have_utf8proc_options = false;
if (options & NORMALIZE_STRING_TRIM) {
string_trim(str);
char *trimmed = string_trim(str);
if (trimmed != NULL) {
str = trimmed;
}
}
if (options & NORMALIZE_STRING_DECOMPOSE) {

View File

@@ -411,7 +411,7 @@ inline bool string_contains_hyphen(char *str) {
return string_next_hyphen_index(str, strlen(str)) >= 0;
}
size_t string_rtrim(char *str) {
size_t string_right_spaces(char *str) {
size_t spaces = 0;
uint8_t *ptr = (uint8_t *)str;
@@ -433,14 +433,11 @@ size_t string_rtrim(char *str) {
spaces++;
}
if (spaces > 0) {
*(str + index) = '\0';
}
return spaces;
}
size_t string_ltrim(char *str) {
size_t string_left_spaces(char *str) {
size_t spaces = 0;
uint8_t *ptr = (uint8_t *)str;
@@ -462,17 +459,15 @@ size_t string_ltrim(char *str) {
spaces++;
}
if (spaces > 0) {
memmove(str, str + index, len + 1 - index);
}
return spaces;
}
inline size_t string_trim(char *str) {
size_t spaces = string_ltrim(str);
spaces += string_rtrim(str);
return spaces;
char *string_trim(char *str) {
size_t left_spaces = string_left_spaces(str);
size_t right_spaces = string_right_spaces(str);
size_t len = strlen(str);
char *ret = strndup(str + left_spaces, len - left_spaces - right_spaces);
return ret;
}
char_array *char_array_from_string(char *str) {

View File

@@ -90,9 +90,7 @@ ssize_t string_next_hyphen_index(char *str, size_t len);
bool string_contains_hyphen(char *str);
bool string_contains_hyphen_len(char *str, size_t len);
size_t string_ltrim(char *str);
size_t string_rtrim(char *str);
size_t string_trim(char *str);
char *string_trim(char *str);
/* char_array is a dynamic character array defined in collections.h
but has a few additional methods related to string manipulation.