From 4259052093da329907e255b11bf3e799872828c7 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 5 Oct 2011 00:58:40 -0400 Subject: [PATCH] libcom_err: add set_com_err_gettext() This function allows programs to pass in a pointer to the gettext function so that error table strings will can be internationalized. Signed-off-by: "Theodore Ts'o" --- lib/et/com_err.h | 2 ++ lib/et/error_message.c | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/et/com_err.h b/lib/et/com_err.h index eb2106f..27a36ea 100644 --- a/lib/et/com_err.h +++ b/lib/et/com_err.h @@ -43,6 +43,8 @@ extern void (*set_com_err_hook (void (*) (const char *, long, extern void (*reset_com_err_hook (void)) (const char *, long, const char *, va_list); extern int init_error_table(const char * const *msgs, long base, int count); +extern char *(*set_com_err_gettext (char *(*) (const char *))) + (const char *); extern errcode_t add_error_table(const struct error_table * et); extern errcode_t remove_error_table(const struct error_table * et); diff --git a/lib/et/error_message.c b/lib/et/error_message.c index 94bc3b1..dc17984 100644 --- a/lib/et/error_message.c +++ b/lib/et/error_message.c @@ -98,6 +98,21 @@ int et_list_unlock(void) return 0; } +typedef char *(*gettextf) (const char *); + +gettextf com_err_gettext = NULL; + +gettextf set_com_err_gettext (new_proc) + gettextf new_proc; +{ + gettextf x = com_err_gettext; + + com_err_gettext = new_proc; + + return x; +} + + const char * error_message (errcode_t code) { int offset; @@ -131,7 +146,10 @@ const char * error_message (errcode_t code) } else { const char *msg = et->table->msgs[offset]; et_list_unlock(); - return msg; + if (com_err_gettext) + return (*com_err_gettext)(msg); + else + return msg; } } } @@ -143,7 +161,10 @@ const char * error_message (errcode_t code) } else { const char *msg = et->table->msgs[offset]; et_list_unlock(); - return msg; + if (com_err_gettext) + return (*com_err_gettext)(msg); + else + return msg; } } } -- 1.8.3.1