return false;
#endif
-#if 0
+#ifdef GEN_PATH_TEST
{
struct gc_arena gc = gc_new ();
const char *fn = gen_path ("foo",
printf ("%s\n", fn);
gc_free (&gc);
}
+ return false;
+#endif
+#ifdef STATUS_PRINTF_TEST
+ {
+ struct gc_arena gc = gc_new ();
+ const char *tmp_file = create_temp_filename ("/tmp", "foo", &gc);
+ struct status_output *so = status_open (tmp_file, 0, -1, NULL, STATUS_OUTPUT_WRITE);
+ status_printf (so, "%s", "foo");
+ status_printf (so, "%s", "bar");
+ if (!status_close (so))
+ msg (M_WARN, "STATUS_PRINTF_TEST: %s: write error", tmp_file);
+ gc_free (&gc);
+ }
return false;
#endif
return ret;
}
-#define STATUS_PRINTF_MAXLEN 256
+#define STATUS_PRINTF_MAXLEN 512
void
status_printf (struct status_output *so, const char *format, ...)
{
char buf[STATUS_PRINTF_MAXLEN+2]; /* leave extra bytes for CR, LF */
va_list arglist;
+ int stat;
va_start (arglist, format);
- vsnprintf (buf, STATUS_PRINTF_MAXLEN, format, arglist);
+ stat = vsnprintf (buf, STATUS_PRINTF_MAXLEN, format, arglist);
va_end (arglist);
buf[STATUS_PRINTF_MAXLEN - 1] = 0;
- if (so->msglevel >= 0)
+ if (stat < 0 || stat >= STATUS_PRINTF_MAXLEN)
+ so->errors = true;
+
+ if (so->msglevel >= 0 && !so->errors)
msg (so->msglevel, "%s", buf);
- if (so->fd >= 0)
+ if (so->fd >= 0 && !so->errors)
{
int len;
strcat (buf, "\n");
len = strlen (buf);
if (len > 0)
{
- if (write (so->fd, buf, len) < 0)
+ if (write (so->fd, buf, len) != len)
so->errors = true;
}
}
- if (so->vout)
+ if (so->vout && !so->errors)
{
chomp (buf);
(*so->vout->func) (so->vout->arg, so->vout->flags_default, buf);