The const rules in C are such that one cannot write a function that takes a const or non-const pointer and returns a pointer that matches the input in const-ness. Instead, you must take a const pointer (because you are promising not to modify it), and then either return a const pointer (which is safer, but annoying to callers who originally had a non-const pointer) or a non-const pointer (less safe, as you may accidentally drop constness, but less annoying). This is a well-known problem, and the standard string functions like strchr take the "less annoying" approach. Let's mimic them. Even though this is technically less safe, skip_prefix tends to be used alongside standard string manipulation functions already, so it is not really introducing a new problem. Signed-off-by: Jeff King <peff@xxxxxxxx> --- I have mixed feelings on this. It _is_ less safe, and this is a known bug in the C standard. Still, it seems like the more idiomatic C thing to do. My main motivation is to avoid a bunch of casts in the next patch. builtin/commit.c | 2 +- git-compat-util.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 3348aa1..bb6890b 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -895,7 +895,7 @@ static int template_untouched(struct strbuf *sb) return 0; stripspace(&tmpl, cleanup_mode == CLEANUP_ALL); - start = (char *)skip_prefix(sb->buf, tmpl.buf); + start = skip_prefix(sb->buf, tmpl.buf); if (!start) start = sb->buf; strbuf_release(&tmpl); diff --git a/git-compat-util.h b/git-compat-util.h index b7eaaa9..56c066b 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -320,10 +320,10 @@ static inline const char *skip_prefix(const char *str, const char *prefix) extern int prefixcmp(const char *str, const char *prefix); extern int suffixcmp(const char *str, const char *suffix); -static inline const char *skip_prefix(const char *str, const char *prefix) +static inline char *skip_prefix(const char *str, const char *prefix) { size_t len = strlen(prefix); - return strncmp(str, prefix, len) ? NULL : str + len; + return strncmp(str, prefix, len) ? NULL : (char *)(str + len); } #if defined(NO_MMAP) || defined(USE_WIN32_MMAP) -- 1.8.1.4.4.g265d2fa -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html