Whamcloud - gitweb
libcom_err: add set_com_err_gettext()
authorTheodore Ts'o <tytso@mit.edu>
Wed, 5 Oct 2011 04:58:40 +0000 (00:58 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 5 Oct 2011 04:58:40 +0000 (00:58 -0400)
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" <tytso@mit.edu>
lib/et/com_err.h
lib/et/error_message.c

index eb2106f..27a36ea 100644 (file)
@@ -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);
index 94bc3b1..dc17984 100644 (file)
@@ -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;
            }
        }
     }