libs/lmo: skip all entries with identical key and value when generating lmo archives

This commit is contained in:
Jo-Philipp Wich 2011-01-02 18:16:54 +00:00
parent 330c013475
commit 73578276af

View file

@ -1,7 +1,7 @@
/* /*
* lmo - Lua Machine Objects - PO to LMO conversion tool * 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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++; off++;
esc = 1; esc = 1;
} }
else if( src[pos] != '"' ) else if( src[pos] != '"' )
{ {
@ -85,6 +84,7 @@ int main(int argc, char *argv[])
int state = 0; int state = 0;
int offset = 0; int offset = 0;
int length = 0; int length = 0;
uint32_t key_id, val_id;
FILE *in; FILE *in;
FILE *out; FILE *out;
@ -155,25 +155,31 @@ int main(int argc, char *argv[])
{ {
if( strlen(key) > 0 && strlen(val) > 0 ) if( strlen(key) > 0 && strlen(val) > 0 )
{ {
if( (entry = (lmo_entry_t *) malloc(sizeof(lmo_entry_t))) != NULL ) key_id = sfh_hash(key, strlen(key));
val_id = sfh_hash(val, strlen(val));
if( key_id != val_id )
{ {
memset(entry, 0, sizeof(entry)); if( (entry = (lmo_entry_t *) malloc(sizeof(lmo_entry_t))) != NULL )
length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); {
memset(entry, 0, sizeof(entry));
length = strlen(val) + ((4 - (strlen(val) % 4)) % 4);
entry->key_id = htonl(sfh_hash(key, strlen(key))); entry->key_id = htonl(key_id);
entry->val_id = htonl(sfh_hash(val, strlen(val))); entry->val_id = htonl(val_id);
entry->offset = htonl(offset); entry->offset = htonl(offset);
entry->length = htonl(strlen(val)); entry->length = htonl(strlen(val));
print(val, length, 1, out); print(val, length, 1, out);
offset += length; offset += length;
entry->next = head; entry->next = head;
head = entry; head = entry;
} }
else else
{ {
die("Out of memory"); die("Out of memory");
}
} }
} }