summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/src/template_lmo.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-10-17 12:57:34 +0200
committerJo-Philipp Wich <jo@mein.io>2018-11-05 11:01:45 +0100
commit62102f4f0e8a88ffbdf44517f4ff737049a3f3bf (patch)
tree014bf7a3f47798a05bcdede54da8779f7a4e8491 /modules/luci-base/src/template_lmo.c
parent4623a58394b1cc71ddf24865a2f0639ee2119470 (diff)
luci-base: template: add translation iterator function
Introduce a new luci.template.parser.get_translations() function which will iterate all loaded translation entries and pass the to the given callback function. This is useful to expose the loaded translations in other formats, e.g. for wrapping them into JSON feeds. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/src/template_lmo.c')
-rw-r--r--modules/luci-base/src/template_lmo.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/modules/luci-base/src/template_lmo.c b/modules/luci-base/src/template_lmo.c
index 3d1eaf4e0..cd4c609a7 100644
--- a/modules/luci-base/src/template_lmo.c
+++ b/modules/luci-base/src/template_lmo.c
@@ -216,7 +216,7 @@ int lmo_load_catalog(const char *lang, const char *dir)
if (!_lmo_active_catalog)
_lmo_active_catalog = cat;
- return 0;
+ return cat->archives ? 0 : -1;
err:
if (dh) closedir(dh);
@@ -301,6 +301,20 @@ int lmo_translate(const char *key, int keylen, char **out, int *outlen)
return -1;
}
+void lmo_iterate(lmo_iterate_cb_t cb, void *priv)
+{
+ unsigned int i;
+ lmo_entry_t *e;
+ lmo_archive_t *ar;
+
+ if (!_lmo_active_catalog)
+ return;
+
+ for (ar = _lmo_active_catalog->archives; ar; ar = ar->next)
+ for (i = 0, e = &ar->index[0]; i < ar->length; e = &ar->index[++i])
+ cb(ntohl(e->key_id), ar->mmap + ntohl(e->offset), ntohl(e->length), priv);
+}
+
void lmo_close_catalog(const char *lang)
{
lmo_archive_t *ar, *next;