static void
vdls_error (const struct data_in *i, const char *format, va_list args)
{
- struct error e;
+ struct msg m;
struct string text;
if (i->flags & DI_IGNORE_ERROR)
return;
- ds_init (&text, 64);
+ ds_init_empty (&text);
if (i->f1 == i->f2)
- ds_printf (&text, _("(column %d"), i->f1);
+ ds_put_format (&text, _("(column %d"), i->f1);
else
- ds_printf (&text, _("(columns %d-%d"), i->f1, i->f2);
- ds_printf (&text, _(", field type %s) "), fmt_to_string (&i->format));
- ds_vprintf (&text, format, args);
+ ds_put_format (&text, _("(columns %d-%d"), i->f1, i->f2);
+ ds_put_format (&text, _(", field type %s) "), fmt_to_string (&i->format));
+ ds_put_vformat (&text, format, args);
- e.category = MSG_DATA;
- e.severity = MSG_ERROR;
- err_location (&e.where);
- e.text = ds_c_str (&text);
+ m.category = MSG_DATA;
+ m.severity = MSG_ERROR;
+ m.text = ds_cstr (&text);
- err_msg (&e);
+ msg_emit (&m);
}
static void
i->e--;
}
-/* Returns nonzero if we're not at the end of the string being
+/* Returns true if we're not at the end of the string being
parsed. */
static inline bool
have_char (struct data_in *i)
return true;
}
+
static inline bool
parse_A (struct data_in *i)
{
buf_copy_rpad (i->v->s, i->format.w, i->s, i->e - i->s);
+
return true;
}
if (!have_char (i))
return true;
- dls_error (i, _("Trailing garbage \"%s\" following date."), i->s);
+ dls_error (i, _("Trailing garbage \"%.*s\" following date."),
+ (int) (i->e - i->s), i->s);
return false;
}
}
{
- static bool (*const handlers[FMT_NUMBER_OF_FORMATS])(struct data_in *) =
+ typedef bool (*handler_t) (struct data_in *);
+ static const handler_t handlers[FMT_NUMBER_OF_FORMATS] =
{
parse_numeric, parse_N, parse_numeric, parse_numeric,
parse_numeric, parse_numeric, parse_numeric,
parse_WKDAY, parse_MONTH,
};
- bool (*handler)(struct data_in *);
+ handler_t handler;
bool success;
handler = handlers[i->format.type];