diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2011-06-16 17:01:09 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2011-06-16 17:01:09 +0000 |
commit | 5666e57db9792d5e2f4faf89599812a570b39b96 (patch) | |
tree | 4c69c941483d1ded6493c220819432efe4231c2e | |
parent | 773149f384fdb7bce399fbd7b5e7379d029dc60b (diff) | |
download | hercules-5666e57db9792d5e2f4faf89599812a570b39b96.tar.gz hercules-5666e57db9792d5e2f4faf89599812a570b39b96.tar.bz2 hercules-5666e57db9792d5e2f4faf89599812a570b39b96.tar.xz hercules-5666e57db9792d5e2f4faf89599812a570b39b96.zip |
Fixed DBMap's db_dup_key to allocate only as much as necessary (bugreport:4969).
This reduces default eA's memory usage by about 400kB.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14853 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | Changelog-Trunk.txt | 1 | ||||
-rw-r--r-- | src/common/db.c | 16 |
2 files changed, 9 insertions, 8 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 42bda730a..fb62478e2 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -1,6 +1,7 @@ Date Added 2011/06/16 + * Fixed DBMap's db_dup_key to allocate only as much as necessary (bugreport:4969) [ultramage] * Fixed char-converter not being able to compile due to both char.h being included. (caused by last commit) [FlavioJS] * Merges from charmerge: - Added DBMap::exists. (r14090) diff --git a/src/common/db.c b/src/common/db.c index 935fe472f..5622a2433 100644 --- a/src/common/db.c +++ b/src/common/db.c @@ -631,19 +631,19 @@ static int db_is_key_null(DBType type, DBKey key) static DBKey db_dup_key(DBMap_impl* db, DBKey key) { char *str; + size_t len; + unsigned short maxlen; DB_COUNTSTAT(db_dup_key); switch (db->type) { case DB_STRING: case DB_ISTRING: - if (db->maxlen) { - CREATE(str, char, db->maxlen +1); - strncpy(str, key.str, db->maxlen); - str[db->maxlen] = '\0'; - key.str = str; - } else { - key.str = (char *)aStrdup(key.str); - } + maxlen = ( db->maxlen != 0 ) ? db->maxlen : UINT16_MAX; + len = strnlen(key.str, maxlen); + str = (char*)aMalloc(len + 1); + memcpy(str, key.str, len); + str[len] = '\0'; + key.str = str; return key; default: |