return (use == FMT_FOR_INPUT
? xasprintf (ngettext (
"Input format %s specifies %d decimal place, "
- "but the given width allows at most "
- "%d decimals.",
+ "but width %d allows at most %d decimals.",
"Input format %s specifies %d decimal places, "
- "but the given width allows at most "
- "%d decimals.",
+ "but width %d allows at most %d decimals.",
spec->d),
- str, spec->d, max_d)
+ str, spec->d, spec->w, max_d)
: xasprintf (ngettext (
"Output format %s specifies %d decimal place, "
- "but the given width allows at most "
- "%d decimals.",
+ "but width %d allows at most %d decimals.",
"Output format %s specifies %d decimal places, "
- "but the given width allows at most "
- "%d decimals.",
+ "but width %d allows at most %d decimals.",
spec->d),
- str, spec->d, max_d));
+ str, spec->d, spec->w, max_d));
else
return (use == FMT_FOR_INPUT
? xasprintf (ngettext (
"Input format %s specifies %d decimal place, "
- "but the given width does not allow "
- "for any decimals.",
+ "but width %d does not allow for any decimals.",
"Input format %s specifies %d decimal places, "
- "but the given width does not allow "
- "for any decimals.",
+ "but width %d does not allow for any decimals.",
spec->d),
- str, spec->d)
+ str, spec->d, spec->w)
: xasprintf (ngettext (
"Output format %s specifies %d decimal place, "
- "but the given width does not allow "
- "for any decimals.",
+ "but width %d does not allow for any decimals.",
"Output format %s specifies %d decimal places, "
- "but the given width does not allow "
- "for any decimals.",
+ "but width %d does not allow for any decimals.",
spec->d),
- str, spec->d));
+ str, spec->d, spec->w));
}
return NULL;
/* Checks that FORMAT is appropriate for a variable of the given VAR_TYPE and
returns NULL if so. Otherwise returns a malloc()'d error message that the
- caller must eventually free(). */
+ caller must eventually free(). VARNAME is optional and only used in the
+ error message.*/
char *
-fmt_check_type_compat__ (const struct fmt_spec *format, enum val_type var_type)
+fmt_check_type_compat__ (const struct fmt_spec *format, const char *varname,
+ enum val_type var_type)
{
assert (val_type_is_valid (var_type));
if ((var_type == VAL_STRING) != (fmt_is_string (format->type) != 0))
char str[FMT_STRING_LEN_MAX + 1];
fmt_to_string (format, str);
if (var_type == VAL_STRING)
- return xasprintf (_("String variables are not compatible with "
- "numeric format %s."), str);
+ {
+ if (varname)
+ return xasprintf (_("String variable %s is not compatible with "
+ "numeric format %s."), varname, str);
+ else
+ return xasprintf (_("String variables are not compatible with "
+ "numeric format %s."), str);
+ }
else
- return xasprintf (_("Numeric variables are not compatible with "
- "string format %s."), str);
+ {
+ if (varname)
+ return xasprintf (_("Numeric variable %s is not compatible with "
+ "string format %s."), varname, str);
+ else
+ return xasprintf (_("Numeric variables are not compatible with "
+ "string format %s."), str);
+ }
}
return NULL;
}
-/* Returns FORMAT is appropriate for a variable of the given
- VAR_TYPE and returns true if so, otherwise false. */
+/* Returns FORMAT is appropriate for a variable of the given VAR_TYPE and
+ returns true if so, otherwise false. */
bool
fmt_check_type_compat (const struct fmt_spec *format, enum val_type var_type)
{
- return error_to_bool (fmt_check_type_compat__ (format, var_type));
+ return error_to_bool (fmt_check_type_compat__ (format, NULL, var_type));
}
/* Checks that FORMAT is appropriate for a variable of the given WIDTH and
fmt_check_width_compat__ (const struct fmt_spec *format, const char *varname,
int width)
{
- char *error = fmt_check_type_compat__ (format, val_type_from_width (width));
+ char *error = fmt_check_type_compat__ (format, varname,
+ val_type_from_width (width));
if (error)
return error;
/* Checks that FORMAT is appropriate for a variable of the given WIDTH and
returns true if so, otherwise false. */
bool
-fmt_check_width_compat (const struct fmt_spec *format, const char *varname,
- int width)
+fmt_check_width_compat (const struct fmt_spec *format, int width)
{
- return error_to_bool (fmt_check_width_compat__ (format, varname, width));
+ return error_to_bool (fmt_check_width_compat__ (format, NULL, width));
}
/* Returns the width corresponding to FORMAT. The return value
else if (!fmt_check_output (f))
return false;
- return fmt_check_width_compat (f, NULL, width);
+ return fmt_check_width_compat (f, width);
}
/* Returns true if TYPE may be used as an input format,