libs/lmo: skip all entries with identical key and value when generating lmo archives
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 2 Jan 2011 18:16:54 +0000 (18:16 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 2 Jan 2011 18:16:54 +0000 (18:16 +0000)
libs/lmo/src/lmo_po2lmo.c

index afe894e8e068c3ea1b3bfed8c46363d5989fc789..380f18dd65192af6c347183c33018f546c370931 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * lmo - Lua Machine Objects - PO to LMO conversion tool
  *
- *   Copyright (C) 2009 Jo-Philipp Wich <xm@subsignal.org>
+ *   Copyright (C) 2009-2011 Jo-Philipp Wich <xm@subsignal.org>
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -59,7 +59,6 @@ static int extract_string(const char *src, char *dest, int len)
                        {
                                off++;
                                esc = 1;
-                               
                        }
                        else if( src[pos] != '"' )
                        {
@@ -85,6 +84,7 @@ int main(int argc, char *argv[])
        int state  = 0;
        int offset = 0;
        int length = 0;
+       uint32_t key_id, val_id;
 
        FILE *in;
        FILE *out;
@@ -155,25 +155,31 @@ int main(int argc, char *argv[])
                {
                        if( strlen(key) > 0 && strlen(val) > 0 )
                        {
-                               if( (entry = (lmo_entry_t *) malloc(sizeof(lmo_entry_t))) != NULL )
-                               {
-                                       memset(entry, 0, sizeof(entry));
-                                       length = strlen(val) + ((4 - (strlen(val) % 4)) % 4);
-
-                                       entry->key_id = htonl(sfh_hash(key, strlen(key)));
-                                       entry->val_id = htonl(sfh_hash(val, strlen(val)));
-                                       entry->offset = htonl(offset);
-                                       entry->length = htonl(strlen(val));
+                               key_id = sfh_hash(key, strlen(key));
+                               val_id = sfh_hash(val, strlen(val));
 
-                                       print(val, length, 1, out);
-                                       offset += length;
-
-                                       entry->next = head;
-                                       head = entry;
-                               }
-                               else
+                               if( key_id != val_id )
                                {
-                                       die("Out of memory");
+                                       if( (entry = (lmo_entry_t *) malloc(sizeof(lmo_entry_t))) != NULL )
+                                       {
+                                               memset(entry, 0, sizeof(entry));
+                                               length = strlen(val) + ((4 - (strlen(val) % 4)) % 4);
+
+                                               entry->key_id = htonl(key_id);
+                                               entry->val_id = htonl(val_id);
+                                               entry->offset = htonl(offset);
+                                               entry->length = htonl(strlen(val));
+
+                                               print(val, length, 1, out);
+                                               offset += length;
+
+                                               entry->next = head;
+                                               head = entry;
+                                       }
+                                       else
+                                       {
+                                               die("Out of memory");
+                                       }
                                }
                        }