- Added images for ducking big Super Tux.
[supertux.git] / src / level_subset.cpp
index 5193c51..704ced1 100644 (file)
 //  02111-1307, USA.
 
 #include <assert.h>
+#include <unistd.h>
 #include "app/setup.h"
 #include "level.h"
 #include "app/globals.h"
 #include "video/surface.h"
 #include "level_subset.h"
 
+using namespace SuperTux;
+
 static bool has_suffix(const std::string& data, const std::string& suffix)
 {
   if (data.length() >= suffix.length())
@@ -79,16 +82,16 @@ void LevelSubset::load(const char* subset)
   
   // Check in which directory our subset is located (ie. ~/.supertux/
   // or SUPERTUX_DATADIR)
-  char filename[1024];
-  snprintf(filename, 1024, "%s/levels/%s/", st_dir, subset);
-  if (access(filename, R_OK) == 0)
+  std::string filename;
+  filename = st_dir + "/levels/" + subset + "/";
+  if (access(filename.c_str(), R_OK) == 0)
     {
       directory = filename;
     }
   else
     {
-      snprintf(filename, 1024, "%s/levels/%s/", datadir.c_str(), subset);
-      if (access(filename, R_OK) == 0)
+      filename = datadir + "/levels/" + subset + "/";
+      if (access(filename.c_str(), R_OK) == 0)
         directory = filename;
       else
         std::cout << "Error: LevelSubset: couldn't find subset: " << subset << std::endl;
@@ -99,20 +102,20 @@ void LevelSubset::load(const char* subset)
   if (levels.empty())
     { // Level info file doesn't define any levels, so read the
       // directory to see what we can find
-      std::vector<std::string> files;
+      std::set<std::string> files;
   
-      snprintf(filename, 1024, "%s/levels/%s/", st_dir, subset);
-      if(access(filename, R_OK) == 0)
+      filename = st_dir + "/levels/" + subset + "/";
+      if(access(filename.c_str(), R_OK) == 0)
         {
-          files = read_directory(filename);
+          files = FileSystem::read_directory(filename);
         }
       else
         {
-          snprintf(filename, 1024, "%s/levels/%s/", datadir.c_str(), subset);
-          files = read_directory(filename);
+          filename = datadir + "/levels/" + subset + "/";
+          files = FileSystem::read_directory(filename);
         }
   
-      for(std::vector<std::string>::iterator i = files.begin(); i != files.end(); ++i)
+      for(std::set<std::string>::iterator i = files.begin(); i != files.end(); ++i)
         {
           if (has_suffix(*i, ".stl"))
             levels.push_back(*i);
@@ -129,11 +132,11 @@ LevelSubset::save()
   /* Save data file: */
   filename = "/levels/" + name + "/";
 
-  fcreatedir(filename.c_str());
+  FileSystem::fcreatedir(filename.c_str());
   filename = std::string(st_dir) + "/levels/" + name + "/info";
-  if(!fwriteable(filename.c_str()))
+  if(!FileSystem::fwriteable(filename.c_str()))
     filename = datadir + "/levels/" + name + "/info";
-  if(fwriteable(filename.c_str()))
+  if(FileSystem::fwriteable(filename.c_str()))
     {
       fi = fopen(filename.c_str(), "w");
       if (fi == NULL)