]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/loadsave.cpp
Consolidated monster data into a single .dat file
[irc/gameservirc.git] / gameserv / loadsave.cpp
index b3a506049601e29bd8ff7eb34edfcda681b0c458..58d09a54b61164d1dcca12d780d16b6c72e5df2a 100755 (executable)
@@ -10,7 +10,9 @@
  #include "pouch.h"
  #include "toplist.h"
  #include "flags.h"
+ #include "options.h"
  
+ #include <stdio.h>
  #include <fstream>
  
  using namespace std;
@@ -217,6 +219,7 @@ int load_store()
              if (tempItem2 == NULL)
                {
                  log("Invalid ID in %s", storeitemdata);
+        infile.close();
                  return 0;
                }
 
@@ -227,11 +230,13 @@ int load_store()
       catch (char *str)
        {
          log("Exception loading store: %s", str);
+     infile.close();
          delete []buf;
          return 0;
        }
     }
   delete []buf;
+  infile.close();
   return 1;
 }
 int load_tavern()
@@ -262,6 +267,7 @@ int load_tavern()
              if (tempItem2 == NULL)
                {
                  log("Invalid ID in %s", tavernitemdata);
+        infile.close();
                  return 0;
                }
              tempItem.setItem(tempItem2);
@@ -273,10 +279,12 @@ int load_tavern()
        {
          log("Exception loading tavern: %s", str);
          delete []buf;
+     infile.close();
          return 0;
        }
     }
   delete []buf;
+  infile.close();
   return 1;
 }
 int load_items()
@@ -301,6 +309,8 @@ int load_items()
                break;
       try
                {
+         /* Need to check to see if this is a memory leak. It should
+            clear out on exit since STL list::clear() deletes its nodes */
                  if (buf[0] != '#' && buf[0] != '\n' && buf[0] != '\0')
                        {
                          switch(buf[0])
@@ -317,6 +327,7 @@ int load_items()
                                default:
                                  log("Invalid Item Type %c in %s", buf[0], itemdata);
                                  delete []buf;
+              infile.close();
                                  return 0;
                                  break;
                                }
@@ -330,9 +341,11 @@ int load_items()
                {
                  log("Exception loading items: %s", str);
                  delete []buf;
+        infile.close();
                  return 0;
                }
     }
+  infile.close();
   delete []buf;
   return 1;
 }
@@ -350,6 +363,7 @@ int load_gs_dbase()
   if (infile.fail())
     {
          log("Error opening %s", playerdata);
+     delete []buf;
          return 0;
     }
   
@@ -472,14 +486,14 @@ bool load_monsters()
   ifstream infile;
   char *buf;
   buf = new char[2048];
+  filename = new char[256];
   
   for (int level = 1; level <= LEVELS; level++)
        {
-         filename = new char[256];
-         sprintf(filename, "data/monsters/level%d.dat", level);
+         snprintf(filename, 256, "data/monsters/level%d.dat", level);
          infile.open(filename);
          
-         if (!infile)
+         if (infile.fail())
                {
                  log("Error opening %s", filename);
                  delete []filename;
@@ -507,12 +521,9 @@ bool load_monsters()
                  levels[level - 1].monsters.push_back(temp);
 
                }
-         delete [] filename;
          infile.close();
        }
   delete [] buf;
+  delete [] filename;
   return true;
 }
-
-
-