Generalize string trunctation util function

Add an additional argument to let the client pass the possible end
chars.
This commit is contained in:
Romain Vimont 2021-11-17 21:38:59 +01:00
parent f2781a8b6d
commit 9619ade706
4 changed files with 26 additions and 8 deletions

View file

@ -264,6 +264,6 @@ adb_get_serialno(void) {
return NULL; return NULL;
} }
sc_str_truncate_first_line(buf, r); sc_str_truncate(buf, r, "\r\n");
return strdup(buf); return strdup(buf);
} }

View file

@ -293,9 +293,9 @@ error:
} }
size_t size_t
sc_str_truncate_first_line(char *data, size_t len) { sc_str_truncate(char *data, size_t len, const char *endchars) {
data[len - 1] = '\0'; data[len - 1] = '\0';
char *eol = strpbrk(data, "\r\n"); char *eol = strpbrk(data, endchars);
if (eol) { if (eol) {
*eol = '\0'; *eol = '\0';
len = eol - data; len = eol - data;

View file

@ -104,7 +104,7 @@ char *
sc_str_wrap_lines(const char *input, unsigned columns, unsigned indent); sc_str_wrap_lines(const char *input, unsigned columns, unsigned indent);
/** /**
* Truncate the data after the first line * Truncate the data after any of the characters from `endchars`
* *
* An '\0' is always written at the end of the data, even if no newline * An '\0' is always written at the end of the data, even if no newline
* character is encountered. * character is encountered.
@ -112,6 +112,6 @@ sc_str_wrap_lines(const char *input, unsigned columns, unsigned indent);
* Return the size of the resulting line. * Return the size of the resulting line.
*/ */
size_t size_t
sc_str_truncate_first_line(char *data, size_t len); sc_str_truncate(char *data, size_t len, const char *endchars);
#endif #endif

View file

@ -337,12 +337,30 @@ static void test_wrap_lines(void) {
free(formatted); free(formatted);
} }
static void test_truncate_first_line(void) { static void test_truncate(void) {
char s[] = "hello\nworld\n!"; char s[] = "hello\nworld\n!";
size_t len = sc_str_truncate_first_line(s, sizeof(s)); size_t len = sc_str_truncate(s, sizeof(s), "\n");
assert(len == 5); assert(len == 5);
assert(!strcmp("hello", s)); assert(!strcmp("hello", s));
char s2[] = "hello\r\nworkd\r\n!";
len = sc_str_truncate(s2, sizeof(s2), "\n\r");
assert(len == 5);
assert(!strcmp("hello", s));
char s3[] = "hello world\n!";
len = sc_str_truncate(s3, sizeof(s3), " \n\r");
assert(len == 5);
assert(!strcmp("hello", s3));
char s4[] = "hello ";
len = sc_str_truncate(s4, sizeof(s4), " \n\r");
assert(len == 5);
assert(!strcmp("hello", s4));
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
@ -364,6 +382,6 @@ int main(int argc, char *argv[]) {
test_parse_integer_with_suffix(); test_parse_integer_with_suffix();
test_strlist_contains(); test_strlist_contains();
test_wrap_lines(); test_wrap_lines();
test_truncate_first_line(); test_truncate();
return 0; return 0;
} }