Remove confusing sc_str_truncate()
This util function was error-prone: - it accepted a buffer as parameter (not necessarily a NUL-terminated string) and its length (including the NUL char, if any); - it wrote '\0' over the last character of the buffer, so the last character was lost if the buffer was not a NUL-terminated string, and even worse, it caused undefined behavior if the length was empty; - it returned the length of the resulting NUL-terminated string, which was inconsistent with the input buffer length. In addition, it was not necessarily optimal: - it wrote '\0' twice; - it required to know the buffer length, that is the input string length + 1, in advance. Remove this function, and let the client use strcspn() manually.
This commit is contained in:
@@ -297,14 +297,6 @@ error:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t
|
||||
sc_str_truncate(char *data, size_t len, const char *endchars) {
|
||||
data[len - 1] = '\0';
|
||||
size_t idx = strcspn(data, endchars);
|
||||
data[idx] = '\0';
|
||||
return idx;
|
||||
}
|
||||
|
||||
ssize_t
|
||||
sc_str_index_of_column(const char *s, unsigned col, const char *seps) {
|
||||
size_t colidx = 0;
|
||||
|
||||
@@ -103,17 +103,6 @@ sc_str_from_wchars(const wchar_t *s);
|
||||
char *
|
||||
sc_str_wrap_lines(const char *input, unsigned columns, unsigned indent);
|
||||
|
||||
/**
|
||||
* Truncate the data after any of the characters from `endchars`
|
||||
*
|
||||
* An '\0' is always written at the end of the data string, even if no
|
||||
* character from `endchars` is encountered.
|
||||
*
|
||||
* Return the size of the resulting string (as strlen() would return).
|
||||
*/
|
||||
size_t
|
||||
sc_str_truncate(char *data, size_t len, const char *endchars);
|
||||
|
||||
/**
|
||||
* Find the start of a column in a string
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user