summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-06-16 17:01:09 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-06-16 17:01:09 +0000
commit5666e57db9792d5e2f4faf89599812a570b39b96 (patch)
tree4c69c941483d1ded6493c220819432efe4231c2e
parent773149f384fdb7bce399fbd7b5e7379d029dc60b (diff)
downloadhercules-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.txt1
-rw-r--r--src/common/db.c16
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: