From: Richard Russon Date: Fri, 24 Aug 2018 14:38:55 +0000 (+0100) Subject: add mutt_str_inline_replace() X-Git-Tag: 2019-10-25~682^2~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0477ea2c7b881a74de97380d7149f05d5ecd1e27;p=neomutt add mutt_str_inline_replace() --- diff --git a/mutt/string.c b/mutt/string.c index 9b872f7cb..d68ad435e 100644 --- a/mutt/string.c +++ b/mutt/string.c @@ -959,3 +959,27 @@ const char *mutt_str_getenv(const char *name) return NULL; } + +/** + * mutt_str_inline_replace - Replace the beginning of a string + * @param buf Buffer to modify + * @param buflen Length of buffer + * @param xlen Length of string to overwrite + * @param rstr Replacement string + * @retval true Success + * + * String (`XX......`, 16, 2, `RRRR`) becomes `RRRR....` + */ +bool mutt_str_inline_replace(char *buf, size_t buflen, size_t xlen, const char *rstr) +{ + if (!buf || !rstr || (xlen >= buflen)) + return false; + + size_t slen = mutt_str_strlen(buf + xlen); + size_t rlen = mutt_str_strlen(rstr); + + memmove(buf + rlen, buf + xlen, slen + 1); + memmove(buf, rstr, rlen); + + return true; +} diff --git a/mutt/string2.h b/mutt/string2.h index cd931a731..ce67d6ed1 100644 --- a/mutt/string2.h +++ b/mutt/string2.h @@ -71,6 +71,7 @@ int mutt_str_atoul(const char *str, unsigned long *dst); void mutt_str_dequote_comment(char *s); const char *mutt_str_find_word(const char *src); const char *mutt_str_getenv(const char *name); +bool mutt_str_inline_replace(char *buf, size_t buflen, size_t xlen, const char *rstr); bool mutt_str_is_ascii(const char *p, size_t len); bool mutt_str_is_email_wsp(char c); size_t mutt_str_lws_len(const char *s, size_t n);