All pastes #840269 Raw Edit

MaNGOS gzip patch

public diff v1 · immutable
#840269 ·published 2007-12-31 17:28 UTC
rendered paste body
Index: src/shared/vmap/ModelContainer.cpp===================================================================--- src/shared/vmap/ModelContainer.cpp	(revision 4943)+++ src/shared/vmap/ModelContainer.cpp	(working copy)@@ -21,6 +21,9 @@  #include <string.h> +#include <string>+#include <zlib.h>+ #include "ModelContainer.h" #include "VMapDefinitions.h" @@ -361,52 +364,53 @@         char ident[8];         char chunk[4];         unsigned int ival;-        FILE *rf = fopen(filename, "rb");+        gzFile rf = gzopen(filename, "rb");+        if(!rf) rf = gzopen((std::string(filename)+".gz").c_str(),"rb");         if(rf)         {             free();              result = true;-            if(result && fread(ident,8,1,rf) != 1) result = false;-            if(result && fread(&flags,sizeof(unsigned int),1,rf) != 1) result = false;+            if(result && gzread(rf,ident,8) != 8) result = false;+            if(result && gzread(rf,&flags,sizeof(unsigned int)) != sizeof(unsigned int)) result = false;             //POS-            if(result && fread(chunk,4,1,rf) != 1) result = false;-            if(result && fread(&size,4,1,rf) != 1) result = false;+            if(result && gzread(rf,chunk,4) != 4) result = false;+            if(result && gzread(rf,&size,4) != 4) result = false;             Vector3 basePos;-            if(result && fread(&basePos,sizeof(float),3,rf) != 3) result = false;+            if(result && gzread(rf,&basePos,sizeof(float)*3) != sizeof(float)*3) result = false;             setBasePosition(basePos);              //---- Box-            if(result && fread(chunk,4,1,rf) != 1) result = false;-            if(result && fread(&size,4,1,rf) != 1) result = false;+            if(result && gzread(rf,chunk,4) != 4) result = false;+            if(result && gzread(rf,&size,4) != 4) result = false;             Vector3 low,high;-            if(result && fread(&low,sizeof(float),3,rf) != 3) result = false;-            if(result && fread(&high,sizeof(float),3,rf) != 3) result = false;+            if(result && gzread(rf,&low,sizeof(float)*3) != sizeof(float)*3) result = false;+            if(result && gzread(rf,&high,sizeof(float)*3) != sizeof(float)*3) result = false;             setBounds(low, high);              //---- TreeNodes-            if(result && fread(chunk,4,1,rf) != 1) result = false;-            if(result && fread(&size,4,1,rf) != 1) result = false;+            if(result && gzread(rf,chunk,4) != 4) result = false;+            if(result && gzread(rf,&size,4) != 4) result = false; -            if(result && fread(&ival,sizeof(unsigned int),1,rf) != 1) result = false;+            if(result && gzread(rf,&ival,sizeof(unsigned int)) != sizeof(unsigned int)) result = false;             if(result) setNNodes(ival);             if(result) setTreeNodeArray(new TreeNode[getNNodes()]);-            if(result && fread(getTreeNodes(),sizeof(TreeNode),getNNodes(),rf) != getNNodes()) result = false;+            if(result && gzread(rf,getTreeNodes(),sizeof(TreeNode)*getNNodes()) != sizeof(TreeNode)*getNNodes()) result = false;              //---- TriengleBoxes-            if(result && fread(chunk,4,1,rf) != 1) result = false;-            if(result && fread(&size,4,1,rf) != 1) result = false;+            if(result && gzread(rf,chunk,4) != 4) result = false;+            if(result && gzread(rf,&size,4) != 4) result = false; -            if(result && fread(&ival,sizeof(unsigned int),1,rf) != 1) result = false;+            if(result && gzread(rf,&ival,sizeof(unsigned int)) != sizeof(unsigned int)) result = false;             setNTriangles(ival);             if(result) setTriangleArray(new TriangleBox[getNTriangles()]);-            if(result && fread(getTriangles(),sizeof(TriangleBox),getNTriangles(),rf) != getNTriangles()) result = false;+            if(result && gzread(rf,getTriangles(),sizeof(TriangleBox)*getNTriangles()) != sizeof(TriangleBox)*getNTriangles()) result = false;              //---- SubModel-            if(result && fread(chunk,4,1,rf) != 1) result = false;-            if(result && fread(&size,4,1,rf) != 1) result = false;+            if(result && gzread(rf,chunk,4) != 4) result = false;+            if(result && gzread(rf,&size,4) != 4) result = false; -            if(result && fread(&iNSubModel,sizeof(unsigned int),1,rf) != 1) result = false;+            if(result && gzread(rf,&iNSubModel,sizeof(unsigned int)) != sizeof(unsigned int)) result = false;             if(result) iSubModel = new SubModel[iNSubModel];              if(result)@@ -414,13 +418,13 @@                 for(unsigned int i=0;i<iNSubModel && result; ++i)                 {                     unsigned char readBuffer[52];           // this is the size of SubModel on 32 bit systems-                    if(fread(readBuffer,sizeof(readBuffer),1,rf) != 1) result = false;+                    if(gzread(rf,readBuffer,sizeof(readBuffer)) != sizeof(readBuffer)) result = false;                     iSubModel[i].initFromBinBlock(readBuffer);                     iSubModel[i].setTriangleArray(getTriangles());                     iSubModel[i].setTreeNodeArray(getTreeNodes());                 }             }-            fclose(rf);+            gzclose(rf);         }         return result;     }Index: src/shared/Database/DBCStores.cpp===================================================================--- src/shared/Database/DBCStores.cpp	(revision 4943)+++ src/shared/Database/DBCStores.cpp	(working copy)@@ -26,6 +26,8 @@  #include <map> +#include <zlib.h>+ typedef std::map<uint16,uint32> AreaFlagByAreaID; typedef std::map<uint32,uint32> AreaFlagByMapID; @@ -153,13 +155,14 @@     else     {         // sort problematic dbc to (1) non compatible and (2) non-existed-        FILE * f=fopen(filename.c_str(),"rb");+        gzFile f=gzopen(filename.c_str(),"rb");+        if(!f) f=gzopen((filename+".gz").c_str(),"rb");         if(f)         {             char buf[100];             snprintf(buf,100," (exist, but have %d fields instead %d) Wrong client version DBC file?",storage.fieldCount,strlen(storage.fmt));             errlist.push_back(filename + buf);-            fclose(f);+            gzclose(f);         }         else             errlist.push_back(filename);Index: src/shared/Database/dbcfile.cpp===================================================================--- src/shared/Database/dbcfile.cpp	(revision 4943)+++ src/shared/Database/dbcfile.cpp	(working copy)@@ -20,6 +20,9 @@ #include <stdlib.h> #include <string.h> +#include <string>+#include <zlib.h>+ #include "dbcfile.h"  DBCFile::DBCFile()@@ -37,19 +40,20 @@         delete [] data;         data=NULL;     }-    FILE * f=fopen(filename,"rb");-    if(!f)return false;+    gzFile f=gzopen(filename,"rb");+    if(!f) f=gzopen((std::string(filename)+".gz").c_str(),"rb");+    if(!f) return false; -    fread(&header,4,1,f);                                   // Number of records+    gzread(f,&header,4);                                   // Number of records     if(header!=0x43424457)     {         //printf("not dbc file");         return false;                                       //'WDBC'     }-    fread(&recordCount,4,1,f);                              // Number of records-    fread(&fieldCount,4,1,f);                               // Number of fields-    fread(&recordSize,4,1,f);                               // Size of a record-    fread(&stringSize,4,1,f);                               // String size+    gzread(f,&recordCount,4);                              // Number of records+    gzread(f,&fieldCount,4);                               // Number of fields+    gzread(f,&recordSize,4);                               // Size of a record+    gzread(f,&stringSize,4);                               // String size      fieldsOffset = new uint32[fieldCount];     fieldsOffset[0] = 0;@@ -64,8 +68,8 @@      data = new unsigned char[recordSize*recordCount+stringSize];     stringTable = data + recordSize*recordCount;-    fread(data,recordSize*recordCount+stringSize,1,f);-    fclose(f);+    gzread(f,data,recordSize*recordCount+stringSize);+    gzclose(f);     return true; } Index: src/game/Map.cpp===================================================================--- src/game/Map.cpp	(revision 4943)+++ src/game/Map.cpp	(working copy)@@ -37,6 +37,8 @@ #include "MapInstanced.h" #include "VMapFactory.h" +#include <zlib.h>+ #define DEFAULT_GRID_EXPIRY     300 #define MAX_GRID_LOAD_TIME      50 @@ -56,12 +58,16 @@  bool Map::ExistMap(uint32 mapid,int x,int y) {-    int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+1;+    int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+4;     char* tmp = new char[len];     snprintf(tmp, len, (char *)(sWorld.GetDataPath()+"maps/%03u%02u%02u.map").c_str(),mapid,x,y); -    FILE *pf=fopen(tmp,"rb");-+    gzFile pf=gzopen(tmp,"rb");+    if (!pf) {+        strcat(tmp,".gz");+        pf=gzopen(tmp,"rb");+    }+           if(!pf)     {         sLog.outError("Check existing of map file '%s': not exist!",tmp);@@ -70,17 +76,17 @@     }      char magic[8];-    fread(magic,1,8,pf);+    gzread(pf,magic,8);     if(strncmp(MAP_MAGIC,magic,8))     {         sLog.outError("Map file '%s' is non-compatible version (outdated?). Please, create new using ad.exe program.",tmp);         delete [] tmp;-        fclose(pf);                                         //close file before return+        gzclose(pf);                                         //close file before return         return false;     }      delete [] tmp;-    fclose(pf);+    gzclose(pf);      return true; }@@ -156,12 +162,17 @@     // map file name     char *tmp=NULL;     // Pihhan: dataPath length + "maps/" + 3+2+2+ ".map" length may be > 32 !-    int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+1;+    int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+4;     tmp = new char[len];     snprintf(tmp, len, (char *)(sWorld.GetDataPath()+"maps/%03u%02u%02u.map").c_str(),mapid,x,y);     sLog.outDetail("Loading map %s",tmp);     // loading data-    FILE *pf=fopen(tmp,"rb");+    gzFile pf=gzopen(tmp,"rb");+    if (!pf) {+        strcat(tmp,".gz");+        pf=gzopen(tmp,"rb");+    }+         if(!pf)     {         delete [] tmp;@@ -169,19 +180,19 @@     }      char magic[8];-    fread(magic,1,8,pf);+    gzread(pf,magic,8);     if(strncmp(MAP_MAGIC,magic,8))     {         sLog.outError("Map file '%s' is non-compatible version (outdated?). Please, create new using ad.exe program.",tmp);         delete [] tmp;-        fclose(pf);                                         //close file before return+        gzclose(pf);                                         //close file before return         return;     }     delete []  tmp;      GridMap * buf= new GridMap;-    fread(buf,1,sizeof(GridMap),pf);-    fclose(pf);+    gzread(pf,buf,sizeof(GridMap));+    gzclose(pf);      GridMaps[x][y] = buf; }