X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lib%2Fstr.c;h=65377466269722906f436c709c98816f9afba513;hp=7b5730574bbea86066a493026ff0552d812e0083;hb=9fde23d2b9a4ba8076eb425a1af4342de1e485b5;hpb=16536d59024177409f49134c3f03f69855c144b9 diff --git a/lib-lib/str.c b/lib-lib/str.c index 7b57305..6537746 100644 --- a/lib-lib/str.c +++ b/lib-lib/str.c @@ -178,3 +178,30 @@ int ascii_strncasecmp (const char *a, const char *b, ssize_t n) return 0; } + +ssize_t m_snsubst(char *dst, ssize_t n, const char *fmt, const char *src) +{ + ssize_t pos = 0; + const char *p; + + p = strchr(fmt, '%'); + if (!p) + return snprintf(dst, n, "%s %s", fmt, src); + + for (;;) { + if (p[1] == 's') { + pos += m_strncpy(dst + pos, n - pos, fmt, p - fmt); + pos += m_strcpy(dst + pos, n - pos, src); + fmt = p + 2; + } else { + pos += m_strncpy(dst + pos, n - pos, fmt, p + 1 - fmt); + fmt = p + 1; + if (p[1] == '%') + p++; + } + + p = strchr(fmt, '%'); + if (!p) + return pos + m_strcpy(dst + pos, n - pos, fmt); + } +}