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);
+ }
+}