このページを編集する際は、編集に関する方針に従ってください。
static char * expand_fmt_string(const char *fmt, ErrorData *edata)
{ StringInfoData buf;
const char *cp;
initStringInfo(&buf);
for (cp = fmt; *cp; cp++) { if (cp[0] == '%' && cp[1] != '\0') { cp++; if (*cp == 'm') { /* * Replace %m by system error string. If there are any %'s in * the string, we'd better double them so that vsnprintf won't * misinterpret. */ const char *cp2;
cp2 = useful_strerror(edata->saved_errno);
for (; *cp2; cp2++) { if (*cp2 == '%') appendStringInfoCharMacro(&buf, '%');
appendStringInfoCharMacro(&buf, *cp2);
} } else { /* copy % and next char --- this avoids trouble with %%m */ appendStringInfoCharMacro(&buf, '%'); appendStringInfoCharMacro(&buf, *cp);
} } else appendStringInfoCharMacro(&buf, *cp);
}
return buf.data; }
/* * expand_fmt_string --- process special format codes in a format string * * We must replace %m with the appropriate strerror string, since vsnprintf * won't know what to do with it. * * The result is a palloc'd string. */
更新日 | 更新者 | 更新内容 |