]> git.draconx.ca Git - cdecl99.git/blobdiff - src/error.c
libcdecl: Fix crash when bootstrapped w/ old Bison.
[cdecl99.git] / src / error.c
index 36e63666774d6a34cbf0ad99c0d14d06044adf85..cf4411e0e89b8da7dfbe82fcbda7ddf0c18c871b 100644 (file)
@@ -29,9 +29,6 @@
 
 #include "errmsg.h"
 
-gl_once_define(static, tls_initialized)
-static gl_tls_key_t tls_key;
-
 struct err_state {
        struct cdecl_error err;
        size_t nstr;
@@ -40,6 +37,7 @@ struct err_state {
 
 /* This pre-initialized error is reserved for dire out-of-memory conditions. */
 static struct cdecl_error err_no_mem;
+static gl_tls_key_t tls_key;
 
 static void free_err(void *err)
 {
@@ -65,9 +63,12 @@ static void set_err(unsigned code, struct cdecl_error *err)
        err->str = _(&errmsgs[code]);
 }
 
-static void initialize(void)
+static void initialize_cb(void)
 {
-       cdecl__init_i18n();
+#if ENABLE_NLS
+       bindtextdomain(PACKAGE, LOCALEDIR);
+       bindtextdomain("bison-runtime", BISON_LOCALEDIR);
+#endif
        set_err(CDECL__ENOMEM, &err_no_mem);
        gl_tls_key_init(tls_key, free_err);
 }
@@ -96,7 +97,8 @@ static struct err_state *get_err_state(void)
 {
        void *state;
 
-       gl_once(tls_initialized, initialize);
+       gl_once_define(static, tls_initialized)
+       gl_once(tls_initialized, initialize_cb);
 
        state = gl_tls_get(tls_key);
        if (state == &err_no_mem)
@@ -106,6 +108,17 @@ static struct err_state *get_err_state(void)
        return state;
 }
 
+
+#if ENABLE_NLS
+/*
+ * Initialize gettext indirectly via get_err_state.
+ */
+void cdecl__init_i18n(void)
+{
+       get_err_state();
+}
+#endif
+
 /*
  * Set the library error to one of the preset messages defined in errmsg.h
  * (CDECL__Exxx).