diff options
-rw-r--r-- | misc.c | 33 | ||||
-rw-r--r-- | misc.h | 2 |
2 files changed, 35 insertions, 0 deletions
@@ -69,6 +69,39 @@ char *get_line(char **str) { } } +char *find_delm(char *str, const char *delm, int skip_delm) { + if (!is_empty(str)) { + const size_t span = strcspn(str, delm); + return &str[(skip_delm) ? strspn(&str[span], delm) : span]; + } else { + return NULL; + } +} + +char *get_str_delm_range(char *str, const char *start_delm, const char *end_delm, char **rhs) { + if (!is_empty(str)) { + char *start = find_delm(str, start_delm, 1); + char *end; + char *dummy; + rhs = (rhs != NULL) ? rhs : &dummy; + + for (end = start; *end != '\0'; end += strcspn(end, end_delm)) { + if (*end++ == '\\') { + end += strspn(end, end_delm); + continue; + } else { + break; + } + } + + *end++ = '\0'; + *rhs = end; + return start; + } else { + return NULL; + } +} + char *make_str(const char *str) { const size_t length = strlen(str); char *s = calloc(length+1, sizeof(char)); @@ -2,6 +2,8 @@ #define MISC_H extern char *read_file(const char *filename, long *size); +extern char *find_delm(char *str, const char *delm, int skip_delm); +extern char *get_str_delm_range(char *str, const char *start_delm, const char *end_delm, char **rhs); extern char *get_line(char **str); extern char *make_str(const char *str); extern char *dir_path_num(const char *root, int num); |