diff options
Diffstat (limited to 'misc.c')
-rw-r--r-- | misc.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -97,3 +97,31 @@ int delm_span(char *str, const char delm) { for (i = 0; str[i] == delm; i++); return i; } + +int sanitize_strlen(char *str) { + int len = 0; + while (*str != '\0') { + const int tok_len = strcspn(str, " ."); + const char delm = str[tok_len]; + const int span_len = (delm != '\0') ? delm_span(&str[tok_len+1], delm) : 0; + str += (tok_len + span_len); + len += tok_len; + } + return len; +} + +char *sanitize_str(char *str) { + const int len = sanitize_strlen(str); + char *san_str = calloc(len+1, sizeof(char)); + char *tmp = san_str; + while (*str != '\0' && tmp < &san_str[len]) { + const int tok_len = strcspn(str, " ."); + const char delm = str[tok_len]; + const int span_len = (delm != '\0') ? delm_span(&str[tok_len+1], delm) : 0; + memcpy(tmp, str, tok_len); + tmp += tok_len; + str += (tok_len + span_len); + *tmp = (delm == ' ') ? '-' : delm; + } + return san_str; +} |