stoneharry

Untitled

Apr 17th, 2012
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.61 KB | None | 0 0
  1.  
  2. void LuaEngine::ScriptLoadDir(char* Dirname, LUALoadScripts* pak)
  3. {
  4. #ifdef WIN32
  5.     Log.Notice("LuaEngine", "Scanning Directory %s", Dirname);
  6.     HANDLE hFile;
  7.     WIN32_FIND_DATA FindData;
  8.     memset(&FindData, 0, sizeof(FindData));
  9.  
  10.     char SearchName[MAX_PATH];
  11.  
  12.     strcpy(SearchName, Dirname);
  13.     strcat(SearchName, "\\*.*");
  14.  
  15.     hFile = FindFirstFile(SearchName, &FindData);
  16.     FindNextFile(hFile, &FindData);
  17.  
  18.     while(FindNextFile(hFile, &FindData))
  19.     {
  20.         // custom condition
  21.         if(FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
  22.                 continue;
  23.                     string fname = Dirname;
  24.                     fname += "\\";
  25.                     fname += FindData.cFileName;
  26.  
  27.                 size_t len = strlen(fname.c_str());
  28.         if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)   //Credits for this 'if' go to Cebernic from ArcScripts Team. Thanks, you saved me some work ;-)
  29.         {
  30.             strcpy(SearchName, Dirname);
  31.             // custom 1 lines
  32.             printf("------- \n Folder: %s \n -------- \n", Dirname);
  33.             strcat(SearchName, "\\");
  34.             strcat(SearchName, FindData.cFileName);
  35.             ScriptLoadDir(SearchName, pak);
  36.         }
  37.         else
  38.         {
  39.             string fname = Dirname;
  40.             fname += "\\";
  41.             fname += FindData.cFileName;
  42.  
  43.             size_t len = strlen(fname.c_str());
  44.             int i = 0;
  45.             char ext[MAX_PATH];
  46.  
  47.             while(len > 0)
  48.             {
  49.                 ext[i++] = fname[--len];
  50.                 if(fname[len] == '.')
  51.                     break;
  52.             }
  53.             ext[i++] = '\0';
  54.             if ( !_stricmp(ext,"aul.") )
  55.             {
  56.                 pak->luaFiles.insert(fname);
  57.                 //printf("Loaded %s", fname);
  58.                 printf("Loaded %s \n", FindData.cFileName);
  59.             }
  60.         }
  61.     }
  62.     FindClose(hFile);
  63. #else
  64.     char* pch = strrchr(Dirname, '/');
  65.     if(strcmp(Dirname, "..") == 0 || strcmp(Dirname, ".") == 0) return; //Against Endless-Loop
  66.     if(pch != NULL && (strcmp(pch, "/..") == 0 || strcmp(pch, "/.") == 0 || strcmp(pch, "/.svn") == 0)) return;
  67.     struct dirent** list;
  68.     int filecount = scandir(Dirname, &list, 0, 0);
  69.  
  70.     if(filecount <= 0 || !list)
  71.         return;
  72.  
  73.     struct stat attributes;
  74.     bool err;
  75.     Log.Notice("LuaEngine", "Scanning Directory %s", Dirname);
  76.     while(filecount--)
  77.     {
  78.         char dottedrelpath[200];
  79.         sprintf(dottedrelpath, "%s/%s", Dirname, list[filecount]->d_name);
  80.         if(stat(dottedrelpath, &attributes) == -1)
  81.         {
  82.             err = true;
  83.             Log.Error("LuaEngine", "Error opening %s: %s", dottedrelpath, strerror(errno));
  84.         }
  85.         else err = false;
  86.  
  87.         if(!err && S_ISDIR(attributes.st_mode))
  88.         {
  89.             ScriptLoadDir((char*)dottedrelpath, pak);  //Subdirectory
  90.         }
  91.         else
  92.         {
  93.             char* ext = strrchr(list[filecount]->d_name, '.');
  94.             if(ext != NULL && !strcmp(ext, ".lua"))
  95.             {
  96.                 pak->luaFiles.insert(dottedrelpath);
  97.             }
  98.         }
  99.  
  100.         free(list[filecount]);
  101.     }
  102.     free(list);
  103. #endif
  104. }
Advertisement
Add Comment
Please, Sign In to add comment