diff options
author | shennetsind <ind@henn.et> | 2013-05-30 22:20:16 -0300 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-05-30 22:20:16 -0300 |
commit | 5a138ceabf08fe0ca75a24306e849ce3f24faef8 (patch) | |
tree | 5cc9cae641157e05172f450d84a6fe6d9753b793 /src/common | |
parent | 20bdc01fa687b174a732be4483ddea4982d67ce9 (diff) | |
parent | b30c74a7733848f03e5defc238dca0e0cb044470 (diff) | |
download | hercules-5a138ceabf08fe0ca75a24306e849ce3f24faef8.tar.gz hercules-5a138ceabf08fe0ca75a24306e849ce3f24faef8.tar.bz2 hercules-5a138ceabf08fe0ca75a24306e849ce3f24faef8.tar.xz hercules-5a138ceabf08fe0ca75a24306e849ce3f24faef8.zip |
Memory Slasher - May 30 Patch
http://hercules.ws/board/topic/928-memory-slasher-may-30-patch/
Signed-off-by: shennetsind <ind@henn.et>
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/cbasetypes.h | 18 | ||||
-rw-r--r-- | src/common/des.c | 10 | ||||
-rw-r--r-- | src/common/grfio.c | 14 | ||||
-rw-r--r-- | src/common/malloc.c | 6 | ||||
-rw-r--r-- | src/common/mapindex.h | 2 | ||||
-rw-r--r-- | src/common/mmo.h | 63 |
6 files changed, 65 insertions, 48 deletions
diff --git a/src/common/cbasetypes.h b/src/common/cbasetypes.h index 731a8b578..bfe8bf8f8 100644 --- a/src/common/cbasetypes.h +++ b/src/common/cbasetypes.h @@ -281,6 +281,24 @@ typedef char bool; //#define swap(a,b) ((a == b) || ((a ^= b), (b ^= a), (a ^= b))) // Avoid "value computed is not used" warning and generates the same assembly code #define swap(a,b) if (a != b) ((a ^= b), (b ^= a), (a ^= b)) +#if 0 //to be activated soon, more tests needed on how VS works with the macro above +#ifdef WIN32 +#undef swap +#define swap(a,b)__asm \ +{ \ + __asm mov eax, dword ptr [a] \ + __asm cmp eax, dword ptr [b] \ + __asm je _ret \ + __asm xor eax, dword ptr [b] \ + __asm mov dword ptr [a], eax \ + __asm xor eax, dword ptr [b] \ + __asm mov dword ptr [b], eax \ + __asm xor eax, dword ptr [a] \ + __asm mov dword ptr [a], eax \ + __asm _ret: \ +} +#endif +#endif #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) diff --git a/src/common/des.c b/src/common/des.c index 917fc33e0..ed6d098dc 100644 --- a/src/common/des.c +++ b/src/common/des.c @@ -78,8 +78,8 @@ static void E(BIT64* src) { BIT64 tmp = {{0}}; -if( false ) -{// original +#if 0 + // original static const uint8_t expand_table[48] = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, @@ -98,9 +98,8 @@ if( false ) if( src->b[j / 8 + 4] & mask[j % 8] ) tmp .b[i / 6 + 0] |= mask[i % 6]; } -} -else -{// optimized +#endif + // optimized tmp.b[0] = ((src->b[7]<<5) | (src->b[4]>>3)) & 0x3f; // ..0 vutsr tmp.b[1] = ((src->b[4]<<1) | (src->b[5]>>7)) & 0x3f; // ..srqpo n tmp.b[2] = ((src->b[4]<<5) | (src->b[5]>>3)) & 0x3f; // ..o nmlkj @@ -109,7 +108,6 @@ else tmp.b[5] = ((src->b[6]<<1) | (src->b[7]>>7)) & 0x3f; // ..cba98 7 tmp.b[6] = ((src->b[6]<<5) | (src->b[7]>>3)) & 0x3f; // ..8 76543 tmp.b[7] = ((src->b[7]<<1) | (src->b[4]>>7)) & 0x3f; // ..43210 v -} *src = tmp; } diff --git a/src/common/grfio.c b/src/common/grfio.c index bf66dba52..77b976926 100644 --- a/src/common/grfio.c +++ b/src/common/grfio.c @@ -171,7 +171,7 @@ static void grf_decode_full(unsigned char* buf, size_t len, int cycle) scycle = 7; // so decrypt/de-shuffle periodically - j = -1; // 0, adjusted to fit the ++j step + j = (size_t)-1; // 0, adjusted to fit the ++j step for( i = 20; i < nblocks; ++i ) { if( i % dcycle == 0 ) @@ -408,7 +408,7 @@ void* grfio_reads(const char* fname, int* size) declen = ftell(in); fseek(in,0,SEEK_SET); buf2 = (unsigned char *)aMalloc(declen+1); // +1 for resnametable zero-termination - if(fread(buf2, 1, declen, in) != declen) ShowError("An error occured in fread grfio_reads, fname=%s \n",fname); + if(fread(buf2, 1, declen, in) != (size_t)declen) ShowError("An error occured in fread grfio_reads, fname=%s \n",fname); fclose(in); if( size ) @@ -430,7 +430,7 @@ void* grfio_reads(const char* fname, int* size) int fsize = entry->srclen_aligned; unsigned char *buf = (unsigned char *)aMalloc(fsize); fseek(in, entry->srcpos, 0); - if(fread(buf, 1, fsize, in) != fsize) ShowError("An error occured in fread in grfio_reads, grfname=%s\n",grfname); + if(fread(buf, 1, fsize, in) != (size_t)fsize) ShowError("An error occured in fread in grfio_reads, grfname=%s\n",grfname); fclose(in); buf2 = (unsigned char *)aMalloc(entry->declen+1); // +1 for resnametable zero-termination @@ -526,7 +526,7 @@ static int grfio_entryread(const char* grfname, int gentry) long list_size; list_size = grf_size - ftell(fp); grf_filelist = (unsigned char *) aMalloc(list_size); - if(fread(grf_filelist,1,list_size,fp) != list_size) { ShowError("Couldn't read all grf_filelist element of %s \n", grfname); } + if(fread(grf_filelist,1,list_size,fp) != (size_t)list_size) { ShowError("Couldn't read all grf_filelist element of %s \n", grfname); } fclose(fp); entrys = getlong(grf_header+0x26) - getlong(grf_header+0x22) - 7; @@ -559,7 +559,7 @@ static int grfio_entryread(const char* grfname, int gentry) #ifdef GRFIO_LOCAL aentry.gentry = -(gentry+1); // As Flag for making it a negative number carrying out the first time LocalFileCheck #else - aentry.gentry = gentry+1; // With no first time LocalFileCheck + aentry.gentry = (char)(gentry+1); // With no first time LocalFileCheck #endif filelist_modify(&aentry); } @@ -611,13 +611,13 @@ static int grfio_entryread(const char* grfname, int gentry) aentry.srclen_aligned = getlong(grf_filelist+ofs2+4); aentry.declen = getlong(grf_filelist+ofs2+8); aentry.srcpos = getlong(grf_filelist+ofs2+13)+0x2e; - aentry.type = type; + aentry.type = (char)type; safestrncpy(aentry.fn, fname, sizeof(aentry.fn)); aentry.fnd = NULL; #ifdef GRFIO_LOCAL aentry.gentry = -(gentry+1); // As Flag for making it a negative number carrying out the first time LocalFileCheck #else - aentry.gentry = gentry+1; // With no first time LocalFileCheck + aentry.gentry = (char)(gentry+1); // With no first time LocalFileCheck #endif filelist_modify(&aentry); } diff --git a/src/common/malloc.c b/src/common/malloc.c index e98ec770a..372991fbe 100644 --- a/src/common/malloc.c +++ b/src/common/malloc.c @@ -253,7 +253,7 @@ void* _mmalloc(size_t size, const char *file, int line, const char *func ) p->unit_head.block = NULL; p->unit_head.size = 0; p->unit_head.file = file; - p->unit_head.line = line; + p->unit_head.line = (unsigned short)line; p->prev = NULL; if (unit_head_large_first == NULL) p->next = NULL; @@ -327,7 +327,7 @@ void* _mmalloc(size_t size, const char *file, int line, const char *func ) head->block = block; head->file = file; - head->line = line; + head->line = (unsigned short)line; head->size = (unsigned short)size; *(long*)((char*)head + sizeof(struct unit_head) - sizeof(long) + size) = 0xdeadbeaf; return (char *)head + sizeof(struct unit_head) - sizeof(long); @@ -426,7 +426,7 @@ void _mfree(void *ptr, const char *file, int line, const char *func ) #ifdef DEBUG_MEMMGR memset(ptr, 0xfd, block->unit_size - sizeof(struct unit_head) + sizeof(long) ); head->file = file; - head->line = line; + head->line = (unsigned short)line; #endif memmgr_assert( block->unit_used > 0 ); if(--block->unit_used == 0) { diff --git a/src/common/mapindex.h b/src/common/mapindex.h index d35d9899c..43953a8e0 100644 --- a/src/common/mapindex.h +++ b/src/common/mapindex.h @@ -7,7 +7,7 @@ #include "../common/db.h" -/* when a map index search fails, return results from what map? default:prontera */ +// When a map index search fails, return results from what map? default:prontera #define MAP_DEFAULT "prontera" #define MAP_DEFAULT_X 150 #define MAP_DEFAULT_Y 150 diff --git a/src/common/mmo.h b/src/common/mmo.h index a86aba723..fd157377b 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -51,13 +51,14 @@ #define PACKETVER 20120418 #endif -/// comment following line if your client is NOT ragexeRE (required because of conflicting packets in ragexe vs ragexeRE) +// Comment the following line if your client is NOT ragexeRE (required because of conflicting packets in ragexe vs ragexeRE). #define PACKETVER_RE -//Remove/Comment this line to disable sc_data saving. [Skotlex] +// Comment the following line to disable sc_data saving. [Skotlex] #define ENABLE_SC_SAVING -//Remove/Comment this line to disable server-side hot-key saving support [Skotlex] -//Note that newer clients no longer save hotkeys in the registry! + +// Comment the following like to disable server-side hot-key saving support. [Skotlex] +// Note that newer clients no longer save hotkeys in the registry! #define HOTKEY_SAVING #if PACKETVER < 20090603 @@ -83,10 +84,10 @@ #define MAX_FAME 1000000000 #define MAX_CART 100 #define MAX_SKILL 1477 -#define MAX_SKILL_ID 10015 //[Ind/Hercules] max used skill id -#define GLOBAL_REG_NUM 256 // max permanent character variables per char -#define ACCOUNT_REG_NUM 64 // max permanent local account variables per account -#define ACCOUNT_REG2_NUM 16 // max permanent global account variables per account +#define MAX_SKILL_ID 10015 // [Ind/Hercules] max used skill ID +#define GLOBAL_REG_NUM 256 // Max permanent character variables per char +#define ACCOUNT_REG_NUM 64 // Max permanent local account variables per account +#define ACCOUNT_REG2_NUM 16 // Max permanent global account variables per account //Should hold the max of GLOBAL/ACCOUNT/ACCOUNT2 (needed for some arrays that hold all three) #define MAX_REG_NUM 256 #define DEFAULT_WALK_SPEED 150 @@ -95,16 +96,16 @@ #define MAX_STORAGE 600 #define MAX_GUILD_STORAGE 600 #define MAX_PARTY 12 -#define MAX_GUILD 16+10*6 // increased max guild members +6 per 1 extension levels [Lupus] -#define MAX_GUILDPOSITION 20 // increased max guild positions to accomodate for all members [Valaris] (removed) [PoW] +#define MAX_GUILD 16+10*6 // Increased max guild members +6 per 1 extension levels [Lupus] +#define MAX_GUILDPOSITION 20 // Increased max guild positions to accomodate for all members [Valaris] (removed) [PoW] #define MAX_GUILDEXPULSION 32 #define MAX_GUILDALLIANCE 16 -#define MAX_GUILDSKILL 15 // increased max guild skills because of new skills [Sara-chan] +#define MAX_GUILDSKILL 15 // Increased max guild skills because of new skills [Sara-chan] #define MAX_GUILDLEVEL 50 -#define MAX_GUARDIANS 8 //Local max per castle. [Skotlex] -#define MAX_QUEST_DB 2400 //Max quests that the server will load -#define MAX_QUEST_OBJECTIVES 3 //Max quest objectives for a quest -#define MAX_START_ITEMS 32 //Max number of items allowed to be given to a char whenever it's created. [mkbu95] +#define MAX_GUARDIANS 8 // Local max per castle. [Skotlex] +#define MAX_QUEST_DB 2400 // Max quests that the server will load +#define MAX_QUEST_OBJECTIVES 3 // Max quest objectives for a quest +#define MAX_START_ITEMS 32 // Max number of items allowed to be given to a char whenever it's created. [mkbu95] // for produce #define MIN_ATTRIBUTE 0 @@ -123,43 +124,43 @@ #define NAME_LENGTH (23 + 1) //For item names, which tend to have much longer names. #define ITEM_NAME_LENGTH 50 -//For Map Names, which the client considers to be 16 in length including the .gat extension +//For Map Names, which the client considers to be 16 in length including the .gat extension. #define MAP_NAME_LENGTH (11 + 1) #define MAP_NAME_LENGTH_EXT (MAP_NAME_LENGTH + 4) #define MAX_FRIENDS 40 #define MAX_MEMOPOINTS 3 -//Size of the fame list arrays. +// Size of the fame list arrays. #define MAX_FAME_LIST 10 -//Limits to avoid ID collision with other game objects +// Limits to avoid ID collision with other game objects #define START_ACCOUNT_NUM 2000000 #define END_ACCOUNT_NUM 100000000 #define START_CHAR_NUM 150000 -//Guilds +// Guilds #define MAX_GUILDMES1 60 #define MAX_GUILDMES2 120 -//Base Homun skill. +// Base Homun skill. #define HM_SKILLBASE 8001 #define MAX_HOMUNSKILL 43 -#define MAX_HOMUNCULUS_CLASS 52 //[orn], Increased to 60 from 16 to allow new Homun-S. +#define MAX_HOMUNCULUS_CLASS 52 // [orn] Increased to 60 from 16 to allow new Homun-S. #define HM_CLASS_BASE 6001 #define HM_CLASS_MAX (HM_CLASS_BASE+MAX_HOMUNCULUS_CLASS-1) -//Mail System +// Mail System #define MAIL_MAX_INBOX 30 #define MAIL_TITLE_LENGTH 40 #define MAIL_BODY_LENGTH 200 -//Mercenary System +// Mercenary System #define MC_SKILLBASE 8201 #define MAX_MERCSKILL 40 #define MAX_MERCENARY_CLASS 61 -//Elemental System +// Elemental System #define MAX_ELEMENTALSKILL 42 #define EL_SKILLBASE 8401 #define MAX_ELESKILLTREE 3 @@ -185,7 +186,7 @@ enum item_types { }; -//Questlog system [Kevin] [Inkfish] +// Questlog system [Kevin] [Inkfish] typedef enum quest_state { Q_INACTIVE, Q_ACTIVE, Q_COMPLETE } quest_state; struct quest { @@ -199,7 +200,7 @@ struct item { int id; short nameid; short amount; - unsigned short equip; // location(s) where item is equipped (using enum equip_pos for bitmasking) + unsigned short equip; // Location(s) where item is equipped (using enum equip_pos for bitmasking). char identify; char refine; char attribute; @@ -219,8 +220,8 @@ enum e_skill_flag SKILL_FLAG_PERMANENT, SKILL_FLAG_TEMPORARY, SKILL_FLAG_PLAGIARIZED, - SKILL_FLAG_REPLACED_LV_0, // temporary skill overshadowing permanent skill of level 'N - SKILL_FLAG_REPLACED_LV_0', - SKILL_FLAG_PERM_GRANTED, // permanent, granted through someway e.g. script + SKILL_FLAG_REPLACED_LV_0, // Temporary skill overshadowing permanent skill of level 'N - SKILL_FLAG_REPLACED_LV_0', + SKILL_FLAG_PERM_GRANTED, // Permanent, granted through someway (e.g. script). //... }; @@ -233,7 +234,7 @@ enum e_mmo_charstatus_opt { struct s_skill { unsigned short id; unsigned char lv; - unsigned char flag; // see enum e_skill_flag + unsigned char flag; // See enum e_skill_flag }; struct global_reg { @@ -241,14 +242,14 @@ struct global_reg { char value[256]; }; -//Holds array of global registries, used by the char server and converter. +// Holds array of global registries, used by the char server and converter. struct accreg { int account_id, char_id; int reg_num; struct global_reg reg[MAX_REG_NUM]; }; -//For saving status changes across sessions. [Skotlex] +// For saving status changes across sessions. [Skotlex] struct status_change_data { unsigned short type; //SC_type long val1, val2, val3, val4, tick; //Remaining duration. |