From: Austin Clements Date: Fri, 1 Aug 2014 02:09:52 +0000 (-0400) Subject: util: Const version of strtok_len X-Git-Tag: 0.19_rc1~110 X-Git-Url: https://git.notmuchmail.org/git/notmuch/commitdiff/9f0f30f7dea1b8fd888d774175ed96d802118b11?p=notmuch;a=commitdiff_plain;h=9f0f30f7dea1b8fd888d774175ed96d802118b11 util: Const version of strtok_len Because of limitations in the C type system, we can't a strtok_len that can work on both const string and non-const strings. The C library solves this by taking a const char* and returning a char* in functions like this (e.g., strchr), but that's not const-safe. Solve it by introducing strtok_len_c, a version of strtok_len for const strings. --- diff --git a/util/string-util.c b/util/string-util.c index 3e7066cd..a90501ee 100644 --- a/util/string-util.c +++ b/util/string-util.c @@ -37,6 +37,14 @@ strtok_len (char *s, const char *delim, size_t *len) return *len ? s : NULL; } +const char * +strtok_len_c (const char *s, const char *delim, size_t *len) +{ + /* strtok_len is already const-safe, but we can't express both + * versions in the C type system. */ + return strtok_len ((char*)s, delim, len); +} + char * sanitize_string (const void *ctx, const char *str) { diff --git a/util/string-util.h b/util/string-util.h index ccad17f1..e409cb3d 100644 --- a/util/string-util.h +++ b/util/string-util.h @@ -23,6 +23,9 @@ extern "C" { char *strtok_len (char *s, const char *delim, size_t *len); +/* Const version of strtok_len. */ +const char *strtok_len_c (const char *s, const char *delim, size_t *len); + /* Return a talloced string with str sanitized. * * Whitespace characters (tabs and newlines) are replaced with spaces,