static const char *
printf_format_fix_noalloc(const char *format, size_t *len_r)
{
- const char *p;
- const char *ret = format;
-
- for (p = format; *p != '\0'; ) {
- if (*p++ == '%') {
- switch (*p) {
- case 'n':
- i_panic("%%n modifier used");
- case 'm':
- if (ret != format)
- i_panic("%%m used twice");
- ret = fix_format_real(format, p-1, len_r);
- break;
- case '\0':
- i_panic("%% modifier missing in '%s'", format);
- }
- p++;
+ const char *ret, *p, *p2;
+
+ p = ret = format;
+ while ((p2 = strchr(p, '%')) != NULL) {
+ p = p2+1;
+ switch (*p) {
+ case 'n':
+ i_panic("%%n modifier used");
+ case 'm':
+ if (ret != format)
+ i_panic("%%m used twice");
+ ret = fix_format_real(format, p-1, len_r);
+ break;
+ case '\0':
+ i_panic("%% modifier missing in '%s'", format);
}
+ p++;
}
if (ret == format)
- *len_r = p - format;
+ *len_r = p - format + strlen(p);
return ret;
}