+static void add_pr(int *pr, int printf_ret) {
+ if (printf_ret == EOF) return;
+ *pr += printf_ret;
+}
+
+static void vproblemx(const char *path, int padto, int per,
+ const char *fmt, va_list al) {
+ int e=errno, pr=0;
+
+ if (errfile==stderr) fputs("summer: error: ",stderr);
+ else add_pr(&pr, fprintf(errfile,"\\["));
+
+ add_pr(&pr, vfprintf(errfile,fmt,al));
+ if (per) add_pr(&pr, fprintf(errfile,": %s",strerror(e)));
+
+ if (errfile==stderr) {
+ fputs(": ",stderr);
+ fn_escaped(stderr,path);
+ fputc('\n',stderr);
+ exit(2);
+ }
+
+ add_pr(&pr, printf("]"));
+
+ while (pr++ < padto)
+ putchar(' ');
+}
+
+static void problem_e(const char *path, int padto, const char *fmt, ...) {