libs/web: further endian fixes in lmo processing
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 27 Jan 2013 18:18:47 +0000 (18:18 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 27 Jan 2013 18:18:47 +0000 (18:18 +0000)
libs/web/src/template_lmo.c

index 164999e..27205a7 100644 (file)
@@ -244,6 +244,7 @@ int lmo_change_catalog(const char *lang)
 static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash)
 {
        unsigned int m, l, r;
+       uint32_t k;
 
        l = 0;
        r = ar->length - 1;
@@ -255,10 +256,12 @@ static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash)
                if (r < l)
                        break;
 
-               if (ar->index[m].key_id == hash)
+               k = ntohl(ar->index[m].key_id);
+
+               if (k == hash)
                        return &ar->index[m];
 
-               if (ar->index[m].key_id > hash)
+               if (k > hash)
                {
                        if (!m)
                                break;
@@ -283,14 +286,14 @@ int lmo_translate(const char *key, int keylen, char **out, int *outlen)
        if (!key || !_lmo_active_catalog)
                return -2;
 
-       hash = htonl(lmo_canon_hash(key, keylen));
+       hash = lmo_canon_hash(key, keylen);
 
        for (ar = _lmo_active_catalog->archives; ar; ar = ar->next)
        {
                if ((e = lmo_find_entry(ar, hash)) != NULL)
                {
-                       *out = ar->mmap + e->offset;
-                       *outlen = e->length;
+                       *out = ar->mmap + ntohl(e->offset);
+                       *outlen = ntohl(e->length);
                        return 0;
                }
        }