diff options
author | Tim Potter <tpot@samba.org> | 2003-09-24 02:46:59 +0000 |
---|---|---|
committer | Tim Potter <tpot@samba.org> | 2003-09-24 02:46:59 +0000 |
commit | 43004ba8830874a8ab02bc755b1e99160af982b5 (patch) | |
tree | 55fd275ddd79c41eea0b895e7345ff5b24e26726 /source3/intl/lang_tdb.c | |
parent | 238cac9581bb24555bfe8e4d5724c03e9594447b (diff) | |
download | samba-43004ba8830874a8ab02bc755b1e99160af982b5.tar.gz samba-43004ba8830874a8ab02bc755b1e99160af982b5.tar.bz2 samba-43004ba8830874a8ab02bc755b1e99160af982b5.zip |
Another round of merges from 3.0:
>Fix return of result. Patch from Yasuma Takeda <yasuma@miraclelinux.com>
>Jeremy.
>Applied Monyo's patch for bug #412 which allows \n characters to
>appear in msg strings.
>Put in some DEBUGs for swat language selection. Part of bug 456.
(This used to be commit 0105b72db85141da30746c06ad7f5cec15bf9640)
Diffstat (limited to 'source3/intl/lang_tdb.c')
-rw-r--r-- | source3/intl/lang_tdb.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/source3/intl/lang_tdb.c b/source3/intl/lang_tdb.c index f12b9b6f15..5409ce6619 100644 --- a/source3/intl/lang_tdb.c +++ b/source3/intl/lang_tdb.c @@ -58,6 +58,8 @@ static BOOL load_msg(const char *msg_file) if (*msgstr == 0) { msgstr = msgid; } + all_string_sub(msgid, "\\n", "\n", 0); + all_string_sub(msgstr, "\\n", "\n", 0); key.dptr = msgid; key.dsize = strlen(msgid)+1; data.dptr = msgstr; @@ -99,10 +101,12 @@ BOOL lang_tdb_init(const char *lang) struct stat st; static int initialised; time_t loadtime; + BOOL result = False; /* we only want to init once per process, unless given an override */ - if (initialised && !lang) return True; + if (initialised && !lang) + return True; if (initialised) { /* we are re-initialising, free up any old init */ @@ -121,41 +125,49 @@ BOOL lang_tdb_init(const char *lang) } /* if no lang then we don't translate */ - if (!lang) return True; + if (!lang) + return True; asprintf(&msg_path, "%s.msg", lib_path((const char *)lang)); if (stat(msg_path, &st) != 0) { /* the msg file isn't available */ - free(msg_path); - return False; + DEBUG(10, ("lang_tdb_init: %s: %s", msg_path, + strerror(errno))); + goto done; } - asprintf(&path, "%s%s.tdb", lock_path("lang_"), lang); + DEBUG(10, ("lang_tdb_init: loading %s\n", path)); + tdb = tdb_open_log(path, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0644); if (!tdb) { tdb = tdb_open_log(path, 0, TDB_DEFAULT, O_RDONLY, 0); - free(path); - free(msg_path); - if (!tdb) return False; + if (!tdb) { + DEBUG(10, ("lang_tdb_init: %s: %s\n", path, + strerror(errno))); + goto done; + } current_lang = strdup(lang); - return True; + result = True; + goto done; } - free(path); - loadtime = tdb_fetch_int32(tdb, "/LOADTIME/"); if (loadtime == -1 || loadtime < st.st_mtime) { load_msg(msg_path); tdb_store_int32(tdb, "/LOADTIME/", (int)time(NULL)); } - free(msg_path); current_lang = strdup(lang); + result = True; - return True; + done: + SAFE_FREE(msg_path); + SAFE_FREE(path); + + return result; } /* translate a msgid to a message string in the current language |