aboutsummaryrefslogtreecommitdiff
path: root/locale/programs/linereader.h
diff options
context:
space:
mode:
Diffstat (limited to 'locale/programs/linereader.h')
-rw-r--r--locale/programs/linereader.h26
1 files changed, 23 insertions, 3 deletions
diff --git a/locale/programs/linereader.h b/locale/programs/linereader.h
index 3965db558c..279d3ffc49 100644
--- a/locale/programs/linereader.h
+++ b/locale/programs/linereader.h
@@ -27,7 +27,7 @@
#include "error.h"
#include "locfile-token.h"
#include "repertoire.h"
-
+#include "record-status.h"
typedef const struct keyword_t *(*kw_hash_fct_t) (const char *, unsigned int);
struct charset_t;
@@ -96,9 +96,29 @@ extern struct token *lr_token (struct linereader *lr,
extern void lr_ignore_rest (struct linereader *lr, int verbose);
-#define lr_error(lr, fmt, args...) \
- WITH_CUR_LOCALE (error_at_line (0, 0, lr->fname, lr->lineno, fmt, ## args))
+static inline void
+__attribute__ ((__format__ (__printf__, 2, 3), nonnull (1, 2)))
+lr_error (struct linereader *lr, const char *fmt, ...)
+{
+ char *str;
+ va_list arg;
+ struct locale_state ls;
+ int ret;
+
+ va_start (arg, fmt);
+ ls = push_locale ();
+
+ ret = vasprintf (&str, fmt, arg);
+ if (ret == -1)
+ abort ();
+ pop_locale (ls);
+ va_end (arg);
+
+ error_at_line (0, 0, lr->fname, lr->lineno, "%s", str);
+
+ free (str);
+}
static inline int