예제 #1
1
CFileList::CFileList()
{
	#ifdef _DEBUG
	setDebugName("CFileList");
	#endif

	// --------------------------------------------
	// Windows version
	#ifdef _IRR_WINDOWS_API_

	char tmp[_MAX_PATH];
	_getcwd(tmp, _MAX_PATH);
	Path = tmp;

	struct _finddata_t c_file;
	long hFile;
	FileEntry entry;

	if( (hFile = _findfirst( "*", &c_file )) != -1L )
	{
		do
		{
			entry.Name = c_file.name;
			entry.Size = c_file.size;
			entry.isDirectory = (_A_SUBDIR & c_file.attrib) != 0;
			Files.push_back(entry);
		}
		while( _findnext( hFile, &c_file ) == 0 );

		_findclose( hFile );
	}

	//TODO add drives
	//entry.Name = "E:\\";
	//entry.isDirectory = true;
	//Files.push_back(entry);
	#endif

	// --------------------------------------------
	// Linux version
	#if (defined(_IRR_POSIX_API_) || defined(_IRR_OSX_PLATFORM_))

	FileEntry entry;

	// Add default parent - even when at /, this is available
	entry.Name = "..";
	entry.Size = 0;
	entry.isDirectory = true;
	Files.push_back(entry);

	// getting the CWD is rather complex as we do not know the size
	// so try it until the call was successful
	// Note that neither the first nor the second parameter may be 0 according to POSIX
	u32 pathSize=256;
	char *tmpPath = new char[pathSize];
	while ((pathSize < (1<<16)) && !(getcwd(tmpPath,pathSize)))
	{
		delete [] tmpPath;
		pathSize *= 2;
		tmpPath = new char[pathSize];
	}
	if (!tmpPath)
		return;
	Path = tmpPath;
	delete [] tmpPath;
	// We use the POSIX compliant methods instead of scandir
	DIR* dirHandle=opendir(Path.c_str());
	if (!dirHandle)
		return;

	struct dirent *dirEntry;
	while ((dirEntry=readdir(dirHandle)))
	{
		if((strcmp(dirEntry->d_name, ".")==0) ||
		   (strcmp(dirEntry->d_name, "..")==0))
			continue;
		entry.Name = dirEntry->d_name;
		entry.Size = 0;
		entry.isDirectory = false;
		struct stat buf;
		if (stat(dirEntry->d_name, &buf)==0)
		{
			entry.Size = buf.st_size;
			entry.isDirectory = S_ISDIR(buf.st_mode);
		}
		#if !defined(_IRR_SOLARIS_PLATFORM_) && !defined(__CYGWIN__)
		// only available on some systems
		else
		{
			entry.isDirectory = dirEntry->d_type == DT_DIR;
		}
		#endif
		Files.push_back(entry);
	}
	closedir(dirHandle);
	#endif
	// sort the list on all platforms
	Files.sort();
}
예제 #2
0
bool get_basename_from_extension(
			std::vector<std::string> &list,
			const std::string &path,
			const std::string &extension,
			bool strip_extension )
{
#ifdef SFML_SYSTEM_WINDOWS
	std::string temp = path;
	if ( !path.empty()
			&& ( path[path.size()-1] != '/' )
			&& ( path[path.size()-1] != '\\' ))
		temp += "/";

	temp += "*" + extension;

	struct _finddata_t t;
	intptr_t srch = _findfirst( temp.c_str(), &t );

	if  ( srch < 0 )
		return false;

	do
	{
		std::string what;
		str_from_c( what, t.name );

		// I don't know why but the search filespec we are using
		// "path/*.ext"seems to also match "path/*.ext*"... so we
		// do the tail comparison below on purpose to catch this...
#else
	DIR *dir;
	struct dirent *ent;

	if ( (dir = opendir( path.c_str() )) == NULL )
		return false;

	while ((ent = readdir( dir )) != NULL )
	{
		std::string what;
		str_from_c( what, ent->d_name );
#endif

		if ( ( what.compare( "." ) == 0 ) || ( what.compare( ".." ) == 0 ) )
			continue;

		if ( tail_compare( what, extension ) )
		{
			if ( strip_extension && ( what.size() > extension.size() ))
			{
				std::string bname = what.substr( 0,
					what.size() - extension.size() );

				// don't add duplicates if we are stripping extension
				// example: if there is both foo.zip and foo.7z
				//
				if ( list.empty() || ( bname.compare( list.back() ) != 0 ))
					list.push_back( bname );
			}
			else
				list.push_back( what );

		}
#ifdef SFML_SYSTEM_WINDOWS
	} while ( _findnext( srch, &t ) == 0 );
	_findclose( srch );
#else
	}
	closedir( dir );
#endif

	return !(list.empty());
}
예제 #3
0
파일: findfile.cpp 프로젝트: daoopp/mse
std::vector<std::string>* findfile(char* pattern, char* dir){
	std::vector<std::string>* r = new std::vector<std::string>;
	long findhandle = -1;
#ifndef WIN32
	struct dirent **namelist;
	char szScriptName[256];
	int n;
	pFor = pValue;
	n=scandir(g_szScriptPath ,&namelist, select_file,alphasort);
	if (n<0)
		perror("scandir");
	else
	{
		while(n--)
		{
			memset(szScriptName, 0, 256);
			snprintf(szScriptName, 255, "%s/%s", g_szScriptPath, namelist[n]->d_name); 
			free(namelist[n]);
			printf("compilering %s\n",szScriptName);
			if (compiler.Compile(szScriptName))
			{
				snprintf(szMsg, 300,"SE:: compile \"%s\" succeeded", szScriptName);
				g_pLogFunc(szMsg, __FILE__, __LINE__ , 1);
				printf(szMsg);
				printf("\n");
			}
			else
			{
				snprintf(szMsg, 300,"SE:: compile \"%s\" failed, error msg from compiler:\"%s\"",
					szScriptName, compiler.GetErrMsg());
				g_pLogFunc(szMsg, __FILE__, __LINE__ , 1);
				printf(szMsg);
				printf("\n");

				lRet = -1;
				goto out;
			}
		}
		free(namelist);
	}
#else
	char szScriptFileMask[_MAX_PATH];
	sprintf(szScriptFileMask, "%s%s%s", dir, PATH_SEPARATOR_S, pattern);
	_finddata_t finddata;
	findhandle = _findfirst(szScriptFileMask, &finddata);
	if (findhandle != -1)
	{
		int ret;
		ret = 0;
		while (ret != -1)
		{

			if (finddata.name[0] != '.')
			{
				if (finddata.attrib == _A_SUBDIR){
					char sub_dir[_MAX_PATH] = "";
					snprintf(sub_dir, _MAX_PATH -1, "%s\\%s", dir, finddata.name);
					std::vector<std::string>* rr = findfile("*", sub_dir);
					for (int i = 0; i< rr->size(); i++){
						r->push_back(((*rr)[i]).c_str());
					}
					Delete(rr);
				}
				else{
					char szScriptFile[256] = "";
					sprintf(szScriptFile, "%s\\%s", dir, finddata.name);
					r->push_back(szScriptFile);
				}
			}
			memset(&finddata, 0, sizeof(_finddata_t));
			ret = _findnext(findhandle, &finddata);
		}
	}
#endif
	return r;
}	
예제 #4
0
/*
 *-----------------------------------------------------------------------
 *
 * collect_tests_from_dir --
 *
 *       Recursively search the directory at @dir_path for files with
 *       '.json' in their filenames. Append all found file paths to
 *       @paths, and return the number of files found.
 *
 *-----------------------------------------------------------------------
 */
int
collect_tests_from_dir (char (*paths)[MAX_TEST_NAME_LENGTH] /* OUT */,
                        const char *dir_path,
                        int paths_index,
                        int max_paths)
{
#ifdef _MSC_VER
   intptr_t handle;
   struct _finddata_t info;

   char child_path[MAX_TEST_NAME_LENGTH];

   handle = _findfirst(dir_path, &info);

   if (handle == -1) {
      return 0;
   }

   while (1) {
      assert(paths_index < max_paths);

      if (_findnext(handle, &info) == -1) {
         break;
      }

      if (info.attrib & _A_SUBDIR) {
         /* recursively call on child directories */
         if (strcmp (info.name, "..") != 0 &&
             strcmp (info.name, ".") != 0) {

            assemble_path(dir_path, info.name, child_path);
            paths_index = collect_tests_from_dir(paths, child_path, paths_index, max_paths);
         }
      } else if (strstr(info.name, ".json")) {
         /* if this is a JSON test, collect its path */
         assemble_path(dir_path, info.name, paths[paths_index++]);
      }
   }

   _findclose(handle);

   return paths_index;
#else
   struct dirent *entry;
   struct stat dir_stat;
   char child_path[MAX_TEST_NAME_LENGTH];
   DIR *dir;

   dir = opendir(dir_path);
   assert (dir);
   while ((entry = readdir(dir))) {
      assert(paths_index < max_paths);

      if (0 == stat(entry->d_name, &dir_stat) && dir_stat.st_mode & S_IFDIR) {
         /* recursively call on child directories */
         if (strcmp (entry->d_name, "..") != 0 &&
             strcmp (entry->d_name, ".") != 0) {

            assemble_path(dir_path, entry->d_name, child_path);
            paths_index = collect_tests_from_dir(paths, child_path, paths_index,
                                                 max_paths);
         }
      } else if (strstr(entry->d_name, ".json")) {
         /* if this is a JSON test, collect its path */
         assemble_path(dir_path, entry->d_name, paths[paths_index++]);
      }
   }

   closedir(dir);

   return paths_index;
#endif
}
예제 #5
0
int
osd_ffi_(char *dir, char *name, char *tab_res, int *max, int l_dir, int l_name, int l_tab)
{
     char file[255], directory[255];
     int  ii, jj, kk, nb_file;
#ifdef VAC
     BOOL  fini ;
#else
     int  fini ;
#endif

     /***** Le Nom de la directory ******/
      if (*dir == ' ') {
          directory[0] = '.';
          directory[1] = '/';
          directory[2] = 0 ;
      }
      else {
          for (ii=0; ii<l_dir && ii<255 && *dir != ' '; ii++) {
             directory[ii] = *(dir++);
             if ( directory [ii] == '\\' ) directory [ii] = '/' ;
          }
          directory[ii]=0;
      }

      /***** Le Nom de fichier recherche *******/
      for (ii=0; ii<l_name  && ii<255 && *name != ' '; ii++)
             file[ii] = *(name++);
      file[ii]=0;

      /****** On ouvre le directory pour trouver les fichiers ********/
      nb_file=0;

      strcpy(filespec, directory );
      strcat(filespec, file );

#ifdef VAC
      if ((dirp = FindFirstFile(filespec, zeptr)) != INVALID_HANDLE_VALUE ) {
#else
      if ((dirp = _findfirst(filespec, &zeptr)) != -1 ) {
#endif
          fini = 0 ;
          while (nb_file < *max && (! fini ) ) {

              /*====== Si on trouve un fichier qui lui ressemble ==========*/


                 /*======= On copie sa valeur ========*/
                 /*        avec la directorie         */
                 /* jj tab_res, kk la ligne ,ii le nom */
                 jj = nb_file * l_tab;
                 kk = 0;
                 if (directory[0] != '.') {
                    for (; kk<l_tab && directory[kk] != 0; kk++,jj++)
                        *(tab_res + jj) = directory[kk];

                    if (directory[kk-1] != '/')  *(tab_res + (jj++)) = '/';
                 }

#ifdef VAC
                 for (ii=0; (kk)<l_tab && *((*zeptr).cFileName+ii); ii++,jj++,kk++)
                     *(tab_res + jj) = *((*zeptr).cFileName + ii);
#else
                 for (ii=0; (kk)<l_tab && *(zeptr.name+ii); ii++,jj++,kk++)
                     *(tab_res + jj) = *(zeptr.name + ii);
#endif

                 /*======= En completant avec blanc ======*/

                 for (; kk<l_tab ; jj++,kk++)
                     *(tab_res + jj) = ' ';
                 nb_file++;

#ifdef VAC
	      fini = FindNextFile(dirp, zeptr );
#else
	      fini = _findnext(dirp, &zeptr );
#endif
          }
      }
/***** pas de tri du tableau tab_res par ordre alpha *****/

#ifdef VAC
	  if (dirp != INVALID_HANDLE_VALUE) FindClose(dirp);
#else
	  if (dirp) _findclose(dirp);
#endif

      return(nb_file);
}
예제 #6
0
파일: repak.c 프로젝트: jianglutian/nds
int main(int argc, char * argv[])
{
	FILE *fpPak,	//所需生成的总文件
	     *fpSrc;	//各个包
#ifdef PAK_NAME_DEBUG
	FILE *fpPakNameTxt;
#endif		
	PakInfo tPakInfo [MAX_FILE_COUNT] = {0};
	char srcName[MAX_FILE_NAME_LENGTH];
	char strOutName[MAX_FILE_NAME_LENGTH] = "stcm.narc";
	char strPakDir [MAX_FILE_NAME_LENGTH] = "./stcm";
	char strPakName [MAX_FILE_COUNT] [ MAX_FILE_NAME_LENGTH ] = {0};
	BYTE *dat;
	BYTE byteTmp;
	struct _finddata_t c_file;
	intptr_t hFile;
	int iCount = 0, c;
	ULONG	ulPakCount = 0,
		ulPakLengthSum,
		ulOutLength;

	while ( -1 != (c = getopt (argc, argv, "i:o:")))
		switch (c)
		{
			case 'i':
				if ('-' == optarg[0])
				{
					printf ("Option -%c requires an argument.\n", c);
					exit (0);
				}
				strcpy (strPakDir, optarg);
				break;
			case 'o':
				if ('-' == optarg[0])
				{
					printf ("Option -%c requires an argument.\n", c);
					exit (0);
				}
				strcpy (strOutName, optarg);
				break;
			case '?':
				if ('i' == optopt || 'o' == optopt)
					;
				else if (optopt == '?')
					;
				else if (isprint (optopt))
					fprintf (stderr, "Unknown option `-%c'.\n", optopt);
				else
					fprintf (stderr,
							"Unknown option character `\\x%x'.\n",
							optopt);
				fprintf (stdout, "Narc文件打包工具\n");
				fprintf (stdout, "%s [-i 需打包的文件所在的文件夹的名称] [-o 输出文件名]\n", argv[0]);
				return 1;
			default:
				abort ();
		}

	fpPak = fopen (strOutName, "wb+");
	if (fpPak == NULL)
	{
		printf ("Can't create \"%s\" file\n", strOutName);
		return 1;
	}



#ifdef PAK_NAME_DEBUG
	if (NULL == (fpPakNameTxt = fopen ("PakName.txt", "w+")))
	{
		printf ("Can't create \"PakName.txt\" file.\n");
		exit (0);
	}
#endif


	//进入文件夹
	if(_chdir( strPakDir ) )
	{
		switch (errno)
		{
			case ENOENT:
				printf( "Unable to locate the directory: %s\n", strPakDir );
				break;
			case EINVAL:
				printf( "Invalid buffer.\n");
				break;
			default:
				printf( "Unknown error.\n");
		}
		exit (0);
	}
	//到这里进入文件夹就成功了

	//获取bin文件的句柄

	if( (hFile = _findfirst( "*.bin", &c_file )) == -1L )
	{
		printf( "No *.bin files in current directory!\n" );
	}
	else
	{
		ulPakCount = 0;
		do
		{
			strcpy (strPakName[ulPakCount], c_file.name);
			tPakInfo [ulPakCount].ulLength = c_file.size;
			tPakInfo [ulPakCount].ulOffsetBegin = (0 != ulPakCount)?
				((4 - (tPakInfo[ulPakCount - 1].ulOffsetEnd % 4)) % 4 + tPakInfo[ulPakCount -1].ulOffsetEnd)
				:0;
			tPakInfo [ulPakCount].ulOffsetEnd = c_file.size + tPakInfo[ulPakCount].ulOffsetBegin;

			ulPakCount ++;
		}
		while( _findnext( hFile, &c_file ) == 0 );
		printf ("There are %d files\n", ulPakCount);
		_findclose( hFile );
	}

	ulPakLengthSum = tPakInfo[ulPakCount - 1].ulOffsetEnd + 0x8 + (4 - (tPakInfo[ulPakCount - 1].ulOffsetEnd % 4)) % 4;
	fileHeadHandle (fpPak, ulPakCount, tPakInfo);	
	fileHeadSecHandle (fpPak, strPakName, strOutName);
	fileHeadTrdHandle (fpPak, ulPakLengthSum);

	//将各个包写入需要打包的narc包中间
	for (iCount = 0; iCount < ulPakCount; iCount ++)
	{
#ifdef PAK_NAME_DEBUG
		fprintf (fpPakNameTxt, "%s\n", strPakName[iCount]);
		fprintf (fpPakNameTxt, "Offset begin on %0Xh.\n", tPakInfo[iCount].ulOffsetBegin);
		fprintf (fpPakNameTxt, "Offset end in %0Xh.\n", tPakInfo[iCount].ulOffsetEnd);
		fprintf (fpPakNameTxt, "Pak length = %0Xh.\n", tPakInfo[iCount].ulLength);
#endif
		fpSrc = fopen (strPakName[iCount], "rb");//需要打包的源文件
		if (fpSrc == NULL)
		{
			printf ("No \"%s\" file.\n", srcName);
			return 2;
		}

		dat = (BYTE *) malloc (sizeof (BYTE) * tPakInfo [iCount].ulLength);
		fread (dat, sizeof(BYTE), tPakInfo [iCount].ulLength, fpSrc);
		fwrite (dat, sizeof(BYTE), tPakInfo [iCount].ulLength, fpPak);
		switch ((tPakInfo[iCount].ulLength) % 4)
		{
			case 1:
				fputc (FILL_BYTE, fpPak);
			case 2:
				fputc (FILL_BYTE, fpPak);
			case 3:
				fputc (FILL_BYTE, fpPak);
			case 0:
				break;
			default:
				;
		}
		free (dat);
		fclose (fpSrc);

	}
#ifdef PAK_NAME_DEBUG
	fclose (fpPakNameTxt);
#endif
	ulOutLength = ftell (fpPak);
	fseek(fpPak, 8, SEEK_SET);
	fwrite (&ulOutLength, sizeof(ULONG), 1, fpPak);
	fclose (fpPak);
	printf("Repak successed.\n");
	return 0;
}
예제 #7
0
OBJECTDESC *ko_Nahraj_herni_prvky(void)
{
	char FileName[256];
	char Text[256];
	long error;
	int Count;
	int m;
	struct _finddata_t Data;
	long Done;

	GetPrivateProfileString("soundengine","sound_dir","c:\\",Directory,256,ini_file);
	GetPrivateProfileString("game","prvky_dir","c:\\",Directory3,256,ini_file);

	WaveFile = (WAVEFILEDESC *) malloc(1000 * sizeof(WAVEFILEDESC));
		if (WaveFile == NULL)
			MessageBox(NULL,"Nelze alokovat pamet pro WAVEFILEDESC","!!!",MB_OK);

	strcpy(FileName,Directory);
	strcat(FileName,"\\Index.dat");


	file = fopen(FileName,"r");
	if (file)
	{
		fgets(Text,30,file);
		NumOfFiles = atoi(Text);
		for (i=0; i<NumOfFiles; i++)
		{
			fgets(Text,30,file);
				Text[strlen(Text)-1] = '\0';
				strcpy(WaveFile[i].Name,Text);
			fgets(Text,30,file);
				WaveFile[i].Index = atoi(Text);
		}
	fclose(file);
	}
	else
		MessageBox(NULL,"Index.dat nenalezen","Nahraj herni prvky",MB_OK);

	Object = (OBJECTDESC *) malloc(NUMOFOBJECTS * sizeof(OBJECTDESC));
		if (Object == NULL)
			MessageBox(NULL,"Nelze alokovat pamet pro OBJECTDESC","!!!",MB_OK);

	for (i=0; i<NUMOFOBJECTS;i++)
		Object[i].Class = 0;

	SecondData = (SECONDDATADESC *) malloc(NUMOFOBJECTS * sizeof(SECONDDATADESC));
		if (SecondData == NULL)
			MessageBox(NULL,"Nelze alokovat pamet pro SECONDDATADESC","!!!",MB_OK);

	file = 0;

	strcpy(FileName,Directory3);
	strcat(FileName,"\\*.itm");

	Count = 0;
	Done = _findfirst(FileName,&Data);
	error = Done;

	while(error != -1)
	{
		Count++;
		error = _findnext(Done,&Data);
	}

	_findclose(Done);

	Done = _findfirst(FileName,&Data);
	error = Done;
	m=0;

if (error != -1)
{
	do
	{
		strcpy(FileName,Directory3);
		strcat(FileName,"\\");
		strcat(FileName,Data.name);
		file = fopen(FileName,"rb");
		if (file)
		{
			fread(Object+m,sizeof(OBJECTDESC),1,file);
			fseek(file,1000,SEEK_SET);
			fread(SecondData+m,sizeof(SECONDDATADESC),1,file);
			fclose(file);
		}
		else
			MessageBox(NULL,"Soubor nenalezen","Nahraj herni prvky",MB_OK);

			error = _findnext(Done,&Data);
		m++;
	}
	while(error != -1);
}
	_findclose(Done);

  return Object;
}
예제 #8
0
UINT CSADirRead::FindFiles(const CCOMString & dir, const CCOMString & filter, bool bIncludeFilesInFileList, bool bIncludeFoldersInFileList)
{
	// make sure the path ends in a single "\"
	CCOMString baseName = dir;
	FormatPath(baseName);
	baseName+='\\';

	CCOMString fullPath = baseName;
	fullPath += filter;

	CCOMString fileName;

	// find first file in current directory
#ifndef USE_WIN32_FINDFILE
	struct _finddata_t  c_file;
	long fhandle;

	try 
	{
		if ((fhandle=_findfirst( fullPath, &c_file ))!=-1) 
		{
         bool bIsFolder = (c_file.attrib & _A_SUBDIR)==_A_SUBDIR;

         bool bAddThisOne = (bIsFolder && bIncludeFoldersInFileList) || (!bIsFolder && bIncludeFilesInFileList);

         // skip . and ..
         if (bIsFolder && (strcmp(c_file.name, ".")==0) || (strcmp(c_file.name, "..")==0))
         {
            bAddThisOne = false;
         }

         if (bAddThisOne) 
			{
				fileName = baseName;
				fileName += c_file.name;

				CSAFileEntry t;
            t.bIsFolder = bIsFolder;
            t.attrib = c_file.attrib;
				t.m_sName = fileName;
				t.time_write = c_file.time_write;
				t.time_create = c_file.time_create;
            t.size = c_file.size;
				m_files.push_back(t);
			}

			// find the rest of them	
			while(_findnext( fhandle, &c_file ) == 0 ) 
			{
            bool bIsFolder = (c_file.attrib & _A_SUBDIR)==_A_SUBDIR;
            bool bAddThisOne = (bIsFolder && bIncludeFoldersInFileList) || (!bIsFolder && bIncludeFilesInFileList);

            // skip . and ..
            if (bIsFolder && (strcmp(c_file.name, ".")==0) || (strcmp(c_file.name, "..")==0))
            {
               bAddThisOne = false;
            }

			   if (bAddThisOne) 
				{
					fileName=baseName;
					fileName += c_file.name;

					CSAFileEntry t;
               t.bIsFolder = bIsFolder;
               t.attrib = c_file.attrib;
					t.m_sName = fileName;
					t.time_write = c_file.time_write;
					t.time_create = c_file.time_create;
               t.size = c_file.size;
					m_files.push_back(t);
				}
			}
			_findclose(fhandle);
		}
	} 
	catch (...) 
	{
		return false;
	}
#else
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;
	try 
	{
		if ((hFind = FindFirstFile(fullPath, &FindFileData))!=INVALID_HANDLE_VALUE)
		{
         bool bIsFolder = (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY;

         bool bAddThisOne = (bIsFolder && bIncludeFoldersInFileList) || ((!bIsFolder) && bIncludeFilesInFileList);

         // skip . and ..
         if (bIsFolder && (strcmp(FindFileData.cFileName, ".")==0) || (strcmp(FindFileData.cFileName, "..")==0))
         {
            bAddThisOne = false;
         }

			if (bAddThisOne) 
         {
				fileName = baseName;
				fileName += FindFileData.cFileName;

				CSAFileEntry t;
				t.m_sName = fileName;

            t.bIsFolder = bIsFolder;
            t.attrib = FindFileData.dwFileAttributes;
			memcpy(&t.time_write, &FindFileData.ftLastWriteTime, sizeof(_FILETIME));
			memcpy(&t.time_create, &FindFileData.ftCreationTime, sizeof(_FILETIME));
            t.size = ((unsigned __int64)FindFileData.nFileSizeHigh * ((unsigned __int64)MAXDWORD+1)) + (unsigned __int64)FindFileData.nFileSizeLow;
				m_files.push_back(t);
			}

			// find the rest of them	
			while (FindNextFile(hFind, &FindFileData))
			{
            bool bIsFolder = (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY;

            bool bAddThisOne = (bIsFolder && bIncludeFoldersInFileList) || ((!bIsFolder) && bIncludeFilesInFileList);

            // skip . and ..
            if (bIsFolder && (strcmp(FindFileData.cFileName, ".")==0) || (strcmp(FindFileData.cFileName, "..")==0))
            {
               bAddThisOne = false;
            }

			   if (bAddThisOne) 
			   {
				   fileName = baseName;
				   fileName += FindFileData.cFileName;

				   CSAFileEntry t;
				   t.m_sName = fileName;
               
               t.bIsFolder = bIsFolder;
               t.attrib = FindFileData.dwFileAttributes;
			   memcpy(&t.time_write, &FindFileData.ftLastWriteTime, sizeof(_FILETIME));
			   memcpy(&t.time_create, &FindFileData.ftCreationTime, sizeof(_FILETIME));
               t.size = ((unsigned __int64)FindFileData.nFileSizeHigh * ((unsigned __int64)MAXDWORD+1)) + (unsigned __int64)FindFileData.nFileSizeLow;
				   m_files.push_back(t);
			   }
			}
			FindClose(hFind);
		}
	} 
	catch (...) 
	{
		return false;
	}
#endif

	return true;
}
예제 #9
0
파일: util.cpp 프로젝트: ranxiaoyi/EasyPR
std::vector<std::string> Utils::getFiles(const std::string& folder,
                                         const bool all /* = true */) {
  std::vector<std::string> files;
  std::list<std::string> subfolders;
  subfolders.push_back(folder);
#ifdef OS_WINDOWS
  while (!subfolders.empty()) {
    std::string current_folder(subfolders.back());

    if (*(current_folder.end() - 1) != '/') {
      current_folder.append("/*");
    } else {
      current_folder.append("*");
    }

    subfolders.pop_back();

    struct _finddata_t file_info;
    long file_handler = _findfirst(current_folder.c_str(), &file_info);

    while (file_handler != -1) {
      if (all &&
          (!strcmp(file_info.name, ".") || !strcmp(file_info.name, ".."))) {
        if (_findnext(file_handler, &file_info) != 0) break;
        continue;
      }

      if (file_info.attrib & _A_SUBDIR) {
        // it's a sub folder
        if (all) {
          // will search sub folder
          std::string folder(current_folder);
          folder.pop_back();
          folder.append(file_info.name);

          subfolders.push_back(folder.c_str());
        }
      } else {
        // it's a file
        std::string file_path;
        // current_folder.pop_back();
        file_path.assign(current_folder.c_str()).pop_back();
        file_path.append(file_info.name);

        files.push_back(file_path);
      }

      if (_findnext(file_handler, &file_info) != 0) break;
    }  // while
    _findclose(file_handler);
  }
#elif defined(OS_LINUX) || defined(OS_UNIX)
  while (!subfolders.empty()) {
    std::string current_folder(subfolders.back());

    if (*(current_folder.end() - 1) != '/') {
      current_folder.push_back('/');
    }

    DIR* pdir = opendir(current_folder.c_str());

    subfolders.pop_back();

    if (!pdir) {
      continue;
    }

    dirent* dir = NULL;

    while ((dir = readdir(pdir)) != NULL) {
      // iterates the current folder, search file & sub folder
      struct stat st;

      if (all && (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))) {
        // must ignore . & ..
        continue;
      }

      if (!strcmp(dir->d_name, ".DS_Store")) {
        // in OSX, 'finder' will create .DS_Store
        continue;
      }

      std::string file_path;

      file_path.append(current_folder.c_str());
      file_path.append(dir->d_name);

      if (lstat(file_path.c_str(), &st) < 0) {
        // perror("lstat");
        continue;
      }

      if (S_ISDIR(st.st_mode)) {
        // it's a sub folder
        if (all) {
          // will search sub folder
          std::string subfolder(current_folder);
          subfolder.append(dir->d_name);

          subfolders.push_back(subfolder.c_str());
        }
      } else {
        // it's a file
        files.push_back(file_path);
      }
    }  // while
    closedir(pdir);
  }
#endif
  return files;
}
예제 #10
0
// LoadDataset: Loads dataset from disk to memory
ClassifiedImageDataset* CPCAUtils::LoadClassifiedDataset(char *directory)
{
	int c,j,NumClases;
	unsigned int TotalImagenes=0;
	bool bojpg=false;

	ClassifiedImageDataset *BaseDeCaras=(ClassifiedImageDataset*)new char[sizeof(ClassifiedImageDataset)];

	chdir(directory);

	// Primero vemos cuantas clases tenemos y el total de frames...
	NumClases=0;
	bool	boOneClassHasNoImages=false;

#ifndef ENCARA2INLINUX
	struct _finddata_t fi,ff;
	long l,m;

	l=(long)_findfirst("*", &fi);	

	if (l!=-1)
	{
		do
		{
			//Si tiene atributo de subdirectorio y no es . o .. o CVS
			//if (strcmp(fi.name,".") && strcmp(fi.name,"..") && strcmp(fi.name,"CVS") && (fi.attrib==_A_SUBDIR))
			if (strcmp(fi.name,".") && strcmp(fi.name,"..") && strcmp(fi.name,"CVS") && (fi.attrib==_A_SUBDIR))
			{
				NumClases++;
				
				chdir(fi.name);

				//Check first for Ipl
				m=(long)_findfirst("*.Ipl", &ff);
				
				//If not checks for jpg
				if (m==-1)
				{

					m=(long)_findfirst("*.jpg", &ff);

					
					bojpg=true;
				}

				if (m!=-1)
				{
					do
					{
						TotalImagenes++;
					
					} while (_findnext(m, &ff)==0);


				}
				else
					boOneClassHasNoImages=true;//There are no samples for one class


				_findclose(m);

				_chdir("..");
			}

		} while (_findnext(l, &fi)==0);
		
		_findclose(l);			
	}

#else//Falta terminarlo
	int i;
	glob_t fi,ff;

	//Indica el número de posiciones que aloja
	fi.gl_offs=MAXFILES;
	ff.gl_offs=MAXFILES;

	glob("*", GLOB_DOOFFS, NULL, &fi);

	for (i=0;i<(int)fi.gl_pathc;i++)
	{
		//Asume que todos son directorios (ojo)
		if (strcmp(fi.gl_pathv[i],".") && strcmp(fi.gl_pathv[i],"..") && strcmp(fi.gl_pathv[i],"CVS"))
		{
			NumClases++;
				
			chdir(fi.gl_pathv[i]);	

			glob("*.Ipl", GLOB_DOOFFS, NULL, &ff);

			if (ff.gl_pathc==0)
			{
				glob("*.jpg", GLOB_DOOFFS, NULL, &ff);
				bojpg=true;
			}

			if (ff.gl_pathc==0)
				TotalImagenes=ff.gl_pathc;
			else
				boOneClassHasNoImages=true;//There are no samples for one class

			chdir("..");

			globfree(&ff);
		}
	}

	globfree(&fi);
	
#endif

	//Si no hay imàgenes o clases
	if (NumClases<=0 || TotalImagenes<(unsigned int)NumClases || boOneClassHasNoImages)
	{
		delete [] BaseDeCaras;
		return NULL;
	}

	unsigned int *FramesPorClase=(unsigned int*)new unsigned char[NumClases*sizeof(unsigned int)];
	IplImage** BC=(IplImage**) new unsigned char[TotalImagenes*sizeof(IplImage*)];
	char** Identidad=(char**) new unsigned char[TotalImagenes*sizeof(char*)];

	//Ahora tras saber lo que hay y cerar las estructuras, lee las imágenes
	

	c=0;
	unsigned int Frame=0;

#ifndef ENCARA2INLINUX
	l=(long)_findfirst("*", &fi);
	
	if (l!=-1)
	{
		do
		{
			//if (strcmp(fi.name,".") && strcmp(fi.name,"..") && strcmp(fi.name,"CVS") && (fi.attrib==_A_SUBDIR))
			if (strcmp(fi.name,".") && strcmp(fi.name,"..") && strcmp(fi.name,"CVS") && (fi.attrib==_A_SUBDIR))
			{			
				c++;
				_chdir(fi.name);

				j=0;

				//Check first for Ipl

				if (!bojpg)
					m=(long)_findfirst("*.Ipl", &ff);
				else
					m=(long)_findfirst("*.jpg", &ff);			

				if (m!=-1)
				{
					do
					{
						j++;
			
						if (!bojpg)
							BC[Frame] = IplUtils.LoadIplImage(ff.name);
#ifndef		USES_OF
						else
							BC[Frame] = cvLoadImage(ff.name,0);	//Fuerza cargar imagen grises		
#endif

						
						Identidad[Frame]=(char*)new unsigned char[sizeof(char)*ID_STRING_SIZE];
						strcpy(Identidad[Frame],fi.name);

						Frame++;

					} while (_findnext(m, &ff)==0);
				}
				_findclose(m);

				

				_chdir("..");
				FramesPorClase[c-1]=j;
			}

		} while (_findnext(l, &fi)==0);
		
		_findclose(l);
		}
#else		
	glob("*", GLOB_DOOFFS, NULL, &fi);

	for (i=0;i<(int)fi.gl_pathc;i++)
	{
		//Asume que todos son directorios (ojo)
		if (strcmp(fi.gl_pathv[i],".") && strcmp(fi.gl_pathv[i],"..") && strcmp(fi.gl_pathv[i],"CVS"))
		{
			c++;
			chdir(fi.gl_pathv[i]);	

			j=0;
				
			if (!bojpg)
				glob("*.Ipl", GLOB_DOOFFS, NULL, &ff);
			else
				glob("*.jpg", GLOB_DOOFFS, NULL, &ff);

			for (j=0;j<(int)ff.gl_pathc;j++)
			{
				if (!bojpg)
					BC[Frame] = IplUtils.LoadIplImage(ff.gl_pathv[j]);

#ifndef		USES_OF
				else
					BC[Frame] = cvLoadImage(ff.gl_pathv[j],0);	//Fuerza cargar imagen grises
#endif

				Identidad[Frame]=(char*)new unsigned char[sizeof(char)*ID_STRING_SIZE];
				strcpy(Identidad[Frame],fi.gl_pathv[j]);

				Frame++;

			}

			FramesPorClase[c-1]=ff.gl_pathc;
			
			chdir("..");

			globfree(&ff);
		}
	}

	globfree(&fi);
		
#endif
	
	BaseDeCaras->BC=BC;
	BaseDeCaras->FramesPerClass=FramesPorClase;
	BaseDeCaras->Label=Identidad;
	BaseDeCaras->NumClasses=NumClases;
	BaseDeCaras->TotalImages=TotalImagenes;
	BaseDeCaras->ImageSize=cvSize(BC[0]->width,BC[0]->height);

	return BaseDeCaras;
}
예제 #11
0
bool CSADirRead::GetSubDirs(CCOMList<CSADirEntry> &dir_array, const CCOMString &path)
{
	CCOMString newPath;

	CCOMString searchString;
	searchString = path;
	searchString+= "\\*.*";

   try 
   {
#ifndef USE_WIN32_FINDFILE
      struct _finddata_t  c_file;
      long fhandle;

      if ((fhandle=_findfirst( searchString, &c_file ))!=-1) 
      {
         // we only care about subdirs
         if ((c_file.attrib & _A_SUBDIR)==_A_SUBDIR) 
         {
            // add c_file.name to the string array
            
            // we'll handle parents on our own
            if ((strcmp(c_file.name, ".")!=0) && (strcmp(c_file.name, "..")!=0)) 
            {
               newPath = path;
               newPath+= "\\";
               newPath+= c_file.name;
               GetSubDirs(dir_array, newPath);
               
               dir_array.push_back(newPath);
            }
         }
         
         // find the rest of them	
         while(_findnext( fhandle, &c_file ) == 0 ) 
         {
            
            if ((c_file.attrib & _A_SUBDIR)==_A_SUBDIR) 
            {
               // we'll handle parents on our own
               if ((strcmp(c_file.name, ".")!=0) && (strcmp(c_file.name, "..")!=0)) 
               {
                  newPath = path;
                  newPath+= "\\";
                  newPath+= c_file.name;
                  GetSubDirs(dir_array, newPath);
                  dir_array.push_back(newPath);
               }
            }
         }
         _findclose(fhandle);
      }
#else
      WIN32_FIND_DATA FindFileData;
      HANDLE hFind;
      if ((hFind = FindFirstFile(searchString, &FindFileData))!=INVALID_HANDLE_VALUE)
      {
         // we only care about files, not subdirs
         if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY) 
         {
            // we'll handle parents on our own
            if ((strcmp(FindFileData.cFileName, ".")!=0) && (strcmp(FindFileData.cFileName, "..")!=0)) 
            {
               newPath = path;
               newPath+= "\\";
               newPath+=FindFileData.cFileName;
               GetSubDirs(dir_array, newPath);
               
               dir_array.push_back(newPath);
            }
         }
         
         // find the rest of them	
         while(FindNextFile( hFind, &FindFileData )) 
         {
            // we only care about files, not subdirs
            if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY) 
            {
               // we'll handle parents on our own
               if ((strcmp(FindFileData.cFileName, ".")!=0) && (strcmp(FindFileData.cFileName, "..")!=0)) 
               {
                  newPath = path;
                  newPath+= "\\";
                  newPath+=FindFileData.cFileName;
                  GetSubDirs(dir_array, newPath);
                  
                  dir_array.push_back(newPath);
               }
               
            }
         }
      }
      FindClose(hFind);
#endif
   } 
   catch (...) 
   {
      return false;
   }
   
   return true;
}
예제 #12
0
// LoadDataset: Loads dataset from disk to memory
ImageDataset* CPCAUtils::LoadDataset(char *directory)
{
	//aux variables
	long l;
	int i=0;
	unsigned int TotalImages=0;
	bool bojpg=false;

	ImageDataset *Dataset=(ImageDataset*)new char[sizeof(ImageDataset)];

#ifndef ENCARA2INLINUX
	struct _finddata_t fi;

	//moves to directory
	_chdir(directory);

	// Checks first dataset size

	//Counts total number of images in directory


	l=(long)_findfirst("*.Ipl", &fi);
	//If not checks for jpg
	if (l==-1)
	{
		l=(long)_findfirst("*.jpg", &fi);
		bojpg=true;
	}

	if (l!=-1)
	{
		do
		{
			TotalImages++;

		} while (_findnext(l, &fi)==0);
		_findclose(l);

	}
#else
	glob_t fi;

	//Indica el número de posiciones que aloja
	fi.gl_offs=MAXFILES;

	glob("*.Ipl", GLOB_DOOFFS, NULL, &fi);

	//If not checks for jpg
	if (l==-1)
	{
		glob("*.jpg", GLOB_DOOFFS, NULL, &fi);
		bojpg=true;
	}

	//Guarda el número de imágenes encontradas
	TotalImages=(int)fi.gl_pathc;	

	globfree(&fi);
#endif


	//If there are no images return
	if (TotalImages<=0)
	{
		delete [] Dataset;
		return NULL;
	}

	//Allocs memory for the dataset images
	IplImage** BC=(IplImage**) new unsigned char[TotalImages*sizeof(IplImage*)];

	//Load images
	unsigned int Frame=0;

#ifndef ENCARA2INLINUX
	if (!bojpg)
		l=(long)_findfirst("*.Ipl", &fi);
	else
		l=(long)_findfirst("*.jpg", &fi);

	if (l!=-1)
	{
		do
		{
			if (!bojpg)
				BC[Frame] = IplUtils.LoadIplImage(fi.name);
#ifndef		USES_OF
			else
				BC[Frame] = cvLoadImage(fi.name,0);	//Fuerza cargar imagen grises				
#endif
		
			Frame++;
		} while (_findnext(l, &fi)==0);
		_findclose(l);		
	}
#else
	//Indica el número de posiciones que aloja
	fi.gl_offs=MAXFILES;

	if (!bojpg)
		glob("*.Ipl", GLOB_DOOFFS, NULL, &fi);
	else
		glob("*.jpg", GLOB_DOOFFS, NULL, &fi);
	
	for (i=0;i<(int)fi.gl_pathc;i++)
	{
		if (!bojpg)
				BC[Frame] = IplUtils.LoadIplImage(fi.gl_pathv[i]);
#ifndef		USES_OF
			else
				BC[Frame] = cvLoadImage(fi.gl_pathv[i],0);	//Fuerza cargar imagen grises				
#endif
		
			Frame++;
	}	

	globfree(&fi);
#endif

	Dataset->BC=BC;
	Dataset->TotalImages=TotalImages;
	Dataset->ImageSize=cvSize(BC[0]->width,BC[0]->height);

	return Dataset;
}
예제 #13
0
//Removes PCA space directories
void CPCAUtils::RemoveDirectories() 

{
	//aux vars
	long l;

	//Projections
	chdir(ProjectionsDir);

#ifndef ENCARA2INLINUX
	struct _finddata_t fi;

	l=(long)_findfirst("*", &fi);
	if (l!=-1)
	{
		do
		{
			if (strcmp(fi.name,".") && strcmp(fi.name,"..") && strcmp(fi.name,"CVS"))
			{
				remove(fi.name);				
			}
		} while (_findnext(l, &fi)==0);
		_findclose(l);					
	}
#else

	glob_t fi;
	int i;

	//Indica el número de posiciones que aloja
	fi.gl_offs=MAXFILES;

	glob("*", GLOB_DOOFFS, NULL, &fi);

	fi.gl_offs = 2;

	for (i=0;i<(int)fi.gl_pathc;i++)
	{
		//Borra todos
		if (strcmp(fi.gl_pathv[i],".") && strcmp(fi.gl_pathv[i],"..") && strcmp(fi.gl_pathv[i],"CVS"))
		{
			remove(fi.gl_pathv[i]);				
		}
	}

	globfree(&fi);
#endif		
	

	//Eigenobjects
	chdir(EigenobjectsDir);

#ifndef ENCARA2INLINUX
	l=(long)_findfirst("*", &fi);
	if (l!=-1)
	{
		do
		{
			if (strcmp(fi.name,".") && strcmp(fi.name,"..") && strcmp(fi.name,"CVS"))
			{
				remove(fi.name);				
			}
		} while (_findnext(l, &fi)==0);
		_findclose(l);					
	}
#else
	//Indica el número de posiciones que aloja
	fi.gl_offs=MAXFILES;

	glob("*", GLOB_DOOFFS, NULL, &fi);

	//Borra
	for (i=0;i<(int)fi.gl_pathc;i++)
	{
		if (strcmp(fi.gl_pathv[i],".") && strcmp(fi.gl_pathv[i],"..") && strcmp(fi.gl_pathv[i],"CVS"))
		{
			remove(fi.gl_pathv[i]);				
		}
	}

	globfree(&fi);
#endif	

}
예제 #14
0
파일: asn1c.c 프로젝트: HarrisonDing/asn1c
/*
 * Parse and import *.asn1 from skeletons/standard-modules
 */
static int
importStandardModules(asn1p_t *asn, const char *skeletons_dir) {
	asn1p_t *new_asn;
	asn1p_module_t *mod;
	const char *filename;
	char *fullname;
	char *target_dir;
	int target_dir_len;
	int len;
#ifdef	_WIN32
	intptr_t dir;
	struct _finddata_t c_file;
	char *pattern;
#else
	struct dirent *dp;
	DIR *dir;
#endif
	int ret = 0;

	/* Notes for the human reader */
	assert(asn);
	assert(skeletons_dir);

	/*
	 * Figure out the standard-modules directory.
	 */
	target_dir_len = strlen(skeletons_dir)
				+ sizeof("/standard-modules") - 1;
	target_dir = malloc(target_dir_len + 1);
	assert(target_dir);
	snprintf(target_dir, target_dir_len + 1, "%s/standard-modules",
		skeletons_dir);

#ifdef	_WIN32
	len = target_dir_len + sizeof("/*.asn1");
	pattern = malloc(len);
	assert(pattern);
	snprintf(pattern, len, "%s/*.asn1", target_dir);
	dir = _findfirst(pattern, &c_file);
	if(dir == -1L) {
#else
	dir = opendir(target_dir);
	if(!dir) {
#endif
		fprintf(stderr,
			"WARNING: Cannot find standard modules in %s\n",
			target_dir);
		return -1;
	}

#ifdef	_WIN32
	do {
		filename = c_file.name;
#else
	while((dp = readdir(dir))) {
		filename = dp->d_name;
#endif
		len = strlen(filename);
		if(len <= 5 || strcmp(filename + len - 5, ".asn1"))
			continue;
		len = target_dir_len + 1 + len + 1;
		fullname = malloc(len);
		if(!fullname) continue;	/* Just skip it, no big deal */
		snprintf(fullname, len, "%s/%s", target_dir, filename);
		filename = fullname;

		new_asn = asn1p_parse_file(filename, A1P_NOFLAGS);
		if(new_asn == NULL) {
			fprintf(stderr, "WARNING: Cannot parse standard module \"%s\"\n", filename);
			ret = -1;
			continue;
		}

		/* Import these modules and mark them as "standard" */
		while((mod = TQ_REMOVE(&(new_asn->modules), mod_next))) {
			mod->_tags |= MT_STANDARD_MODULE;
			TQ_ADD(&(asn->modules), mod, mod_next);
		}
		asn1p_delete(new_asn);

#ifdef	_WIN32
	} while(_findnext(dir, &c_file) == 0);
	_findclose(dir);
#else
		free(fullname);
	} /* while(readdir()) */
	closedir(dir);
#endif

	return ret;
}
예제 #15
0
int CAvailabAsymmKeys::GetKeyList(CSortAsymKeyList& sortedAsymKeyList, unsigned nKeyType, int sortflag)
{
	// Erstellt eine sortierte Liste sortedAsymKeyList

	// durch den int Parameter 'sortflag' wird festgelegt nach welchen Kriterien die Liste sortiert wird:
	// BY_NAME
	// BY_FIRSTNAME
	// BY_KEYTYPE
	// BY_CREATTIME
	// BY_PERS_KEYID

	// nKeyType gibt an, welche Schlüsselbezeichner in die Liste aufgenommen werden:
	// nKeyType == ASYM_KEY : alle (EC, RSA, DSA)
	// nKeyType == EC_KEY  : nur EC
	// nKeyType == RSA_KEY : nur RSA
	// nKeyType == DSA_KEY : nur DSA
	// nKeyType == RSA_KEY | EC_KEY  : RSA und EC
	// usw.

	CAsymmKeyAttrib userfile(sortflag);

	sortedAsymKeyList.RemoveAll(); // Liste neu anlegen
	if ( (nKeyType == 0) || (nKeyType > 7) )
	{
		// nKeyType hat ungültige Werte
		return -1; // sortedAsymKeyList ist eine leere Liste
	}

	// ermittele die zur Verfügung stehenden Schlüssel(-bezeichner)

	long filehandle;
	int pos;
	int ret;
	struct _finddata_t fileinfo;
	CKeyFile KeyfileName;
	char *ctstr = NULL;
	char *creatime = NULL;
	char *name = NULL;
	char *firstname = NULL;
	char *keyType = NULL;
	char *keyID = NULL;

	CString key_identifier;
	
	// ermittele die Dateien, die in PseVerzeichnis liegen

	CString filename=(CString)PseVerzeichnis+((CString)"/*.*");		
	LPTSTR help1 = new TCHAR[filename.GetLength()+1];
	_tcscpy(help1, filename);
	char *filename2=help1;

	filehandle = _findfirst(filename2, &fileinfo);
	if (filehandle != -1)
	{
		// es gibt mindestens eine Datei im Verzeichnis PseVerzeichnis

		userfile.UserKeyfileName = (CString) fileinfo.name;
		key_identifier = (CString) fileinfo.name;

		pos = key_identifier.Find(PSE_FILE_SUFFIX);
		if (pos != -1)
		{
			// key_identifier sind von der Form "xxxx.PSE_FILE_SUFFIX"
			key_identifier = key_identifier.Left(pos); // entferne PSE_FILE_SUFFIX
#ifndef _UNSTABLE
			ret = KeyfileName.ExtractData(key_identifier, &ctstr, &creatime, &name, &firstname, &keyType, &keyID);// Speicherfreigabe!
#endif
			// Zuweisen der Werte
			userfile.UTCstring = (CString) ctstr; // Time in seconds since UTC 1/1/70
			userfile.CreatTime = (CString) creatime; // Date and time of creation
			userfile.Name = (CString) name; // Name of owner
			userfile.Firstname = (CString) firstname; // Firstname of owner
			userfile.KeyType = (CString) keyType; // Key Type {EC-xxx, RSA-xxx, DSA-xxx}
			userfile.PersKeyInfo = (CString) keyID; // Prrsönliche Schlüsselkennung des Schlüsselerzeugers
			
			// Für Definitionen EC_KEYFILE_IDSTRING, RSA_KEYFILE_IDSTRING, DSA_KEYFILE_IDSTRING siehe DlgAsymKeyCreat.h
			if (nKeyType == ASYM_KEY)
			{
				// alle verfügbaren Schlüssel einfügen

				sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
			}
			else
			{
				// Kombination von verschiedenen Schlüsseltypen möglich

				if ((nKeyType & EC_KEY) == EC_KEY)
				{
					if (userfile.KeyType.Find(EC_KEYFILE_IDSTRING) > -1)
						sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
				}
				if ((nKeyType & RSA_KEY) == RSA_KEY)
				{
					if (userfile.KeyType.Find(RSA_KEYFILE_IDSTRING) > -1)
						sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
				}
				if ((nKeyType & DSA_KEY) == DSA_KEY)
				{
					if (userfile.KeyType.Find(DSA_KEYFILE_IDSTRING) > -1)
						sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
				}
			}

			if (ctstr != NULL){ delete ctstr; ctstr = NULL; }
			if (creatime != NULL){ delete creatime;creatime = NULL; }
			if (name != NULL){ delete name;name = NULL; }
			if (firstname != NULL){ delete firstname;firstname = NULL; }
			if (keyType != NULL){ delete keyType;keyType = NULL; }
			if (keyID != NULL){ delete keyID;keyID = NULL; }
		}
		while(_findnext(filehandle, &fileinfo) == 0)
		{
			// es gibt mindestens noch eine weitere Datei im Verzeichnis PseVerzeichnis

			userfile.UserKeyfileName = (CString) fileinfo.name;
			key_identifier = (CString) fileinfo.name;

			pos = key_identifier.Find(PSE_FILE_SUFFIX);
			if (pos != -1)
			{
				// key_identifier sind von der Form "xxxx.PSE_FILE_SUFFIX"
				key_identifier = key_identifier.Left(pos); // entferne PSE_FILE_SUFFIX
#ifndef _UNSTABLE
				ret = KeyfileName.ExtractData(key_identifier, &ctstr, &creatime, &name, &firstname, &keyType, &keyID);// Speicherfreigabe!
#endif
				// Zuweisen der Werte
				userfile.UTCstring = (CString) ctstr; // Time in seconds since UTC 1/1/70
				userfile.CreatTime = (CString) creatime; // Date and time of creation
				userfile.Name = (CString) name; // Name of owner
				userfile.Firstname = (CString) firstname; // Firstname of owner
				userfile.KeyType = (CString) keyType; // Key Type {EC-xxx, RSA-xxx, DSA-xxx}
				userfile.PersKeyInfo = (CString) keyID; // Prrsönliche Schlüsselkennung des Schlüsselerzeugers

				// Für Definitionen EC_KEYFILE_IDSTRING, RSA_KEYFILE_IDSTRING, DSA_KEYFILE_IDSTRING siehe DlgAsymKeyCreat.h
				if (nKeyType == ASYM_KEY)
				{
					// alle verfügbaren Schlüssel einfügen

					sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
				}
				else
				{
					// Kombination von verschiedenen Schlüsseltypen möglich

					if ((nKeyType & EC_KEY) == EC_KEY)
					{
						if (userfile.KeyType.Find(EC_KEYFILE_IDSTRING) > -1)
							sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
					}
					if ((nKeyType & RSA_KEY) == RSA_KEY)
					{
						if (userfile.KeyType.Find(RSA_KEYFILE_IDSTRING) > -1)
							sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
					}
					if ((nKeyType & DSA_KEY) == DSA_KEY)
					{
						if (userfile.KeyType.Find(DSA_KEYFILE_IDSTRING) > -1)
							sortedAsymKeyList.AddTail(userfile); // Objekt in Liste einfügen
					}
				}
				if (ctstr != NULL){ delete ctstr; ctstr = NULL; }
				if (creatime != NULL){ delete creatime;creatime = NULL; }
				if (name != NULL){ delete name;name = NULL; }
				if (firstname != NULL){ delete firstname;firstname = NULL; }
				if (keyType != NULL){ delete keyType;keyType = NULL; }
				if (keyID != NULL){ delete keyID;keyID = NULL; }
			}
		}
		_findclose(filehandle);
	}
	return 0;
}
예제 #16
0
/*
* Function
*	windowsModLoadDir
*
* Description
*	Load the modules contained in a directory
*
* Parameters
*	dir	directory to search (relative)
*	modlist	list of module description structure
*
* Return
*	>=0	number of modules loaded
*	-1	error
*
* Remarks
*	
*/
static int windowsModLoadDir(unsigned int gfid, char *dir, tModList **modlist)
{
	tfModInfo	fModInfo;	/* init function of the modules */
	char	dname[256];	/* name of the funtions */
	char	sopath[256];	/* path of the lib[x].so */
	HMODULE	handle;		/* */
	int		modnb;		/* number on loaded modules */
	tModList	*curMod;
	tModList	*cMod;
	int		prio;
    
	modnb = 0;
	curMod = (tModList*)calloc(1, sizeof(tModList));

    // parcours du r�pertoire
	_finddata_t FData;
	char Dir_name[ 1024 ];
	sprintf( Dir_name, "%s\\*.dll", dir );
	long Dirent = _findfirst( Dir_name, &FData );
	if ( Dirent != -1 )
		do {
		sprintf(sopath, "%s\\%s", dir, FData.name);
		handle = LoadLibrary( sopath );
		if (handle != NULL) {
			if ((fModInfo = (tfModInfo)GetProcAddress(handle, dname)) != NULL) {
				/* DLL loaded, init function exists, call it... */
				if ((fModInfo(curMod->modInfo) == 0) && (curMod->modInfo[0].gfId == gfid)) {
					GfOut(">>> %s loaded >>>\n", sopath);
					modnb++;
					curMod->handle = handle;
					curMod->sopath = strdup(sopath);
					/* add the module in the list */
					if (*modlist == NULL) {
						*modlist = curMod;
						curMod->next = curMod;
					} else {
						/* sort by prio */
						prio = curMod->modInfo[0].prio;
						if (prio >= (*modlist)->modInfo[0].prio) {
							curMod->next = (*modlist)->next;
							(*modlist)->next = curMod;
							*modlist = curMod;
						} else {
							cMod = *modlist;
							do {
								if (prio < cMod->next->modInfo[0].prio) {
									curMod->next = cMod->next;
									cMod->next = curMod;
									break;
								}
								cMod = cMod->next;
							} while (cMod != *modlist);
						}
					}
					curMod = (tModList*)calloc(1, sizeof(tModList));
				} else {
					FreeLibrary(handle);
					GfTrace("windowsModLoadDir: Module: %s not retained\n", dname);
				}
			} else {
				GfTrace("windowsModLoadDir: ...  can't find proc %s\n", dname);
				FreeLibrary(handle);
				_findclose( Dirent );
				return -1;
			}
		}
		} while ( _findnext( Dirent, &FData ) != -1 );

		_findclose( Dirent );

		free(curMod);
		return modnb;
}
RRESULT OnCreate(void *pParam)
{
	/*
	//	Walk through in debug to trace all routes
	*/
	g_App.PreCheckArguments();

	sprintf( cstrReleaseDate, "Version : %s", ZGetSVNRevision().c_str()); //Possibly
	cclog(cstrReleaseDate); cclog("\n");

	g_DInput.Create(g_hWnd, FALSE, FALSE);
	g_pInput = new ZInput(&g_DInput);
	RSetGammaRamp(Z_VIDEO_GAMMA_VALUE);
	RSetRenderFlags(RRENDER_CLEAR_BACKBUFFER);

	ZGetInitialLoading()->Initialize(  1, 0, 0, RGetScreenWidth(), RGetScreenHeight(), 0, 0, 1024, 768 );

	cclog("InitialLoading success.\n");

	struct _finddata_t c_file;
	intptr_t hFile;
	char szFileName[256];
	#define FONT_DIR	"Font/"
	#define FONT_EXT	"ttf"
	if( (hFile = _findfirst(FONT_DIR"*."FONT_EXT, &c_file )) != -1L ){
		do{
			strcpy(szFileName, FONT_DIR);
			strcat(szFileName, c_file.name);
			AddFontResource(szFileName);
		}while( _findnext( hFile, &c_file ) == 0 );
		_findclose(hFile);
	}

	g_pDefFont = new CCFontR2;

	if( !g_pDefFont->Create("Default", Z_LOCALE_DEFAULT_FONT, DEFAULT_FONT_HEIGHT, 1.0f) )	{
		cclog("Fail to Create default font : CCFontR2 / main.cpp.. onCreate\n" );
		g_pDefFont->Destroy();
		SAFE_DELETE( g_pDefFont );
		g_pDefFont	= NULL;
	}
	g_pDC = new CCDrawContextR2(RGetDevice());

	if( ZGetInitialLoading()->IsUseEnable() )
	{
		ZGetInitialLoading()->AddBitmap( 0, "Interface/Default/LOADING/loading_adult.jpg" );
		ZGetInitialLoading()->AddBitmapBar( "Interface/Default/LOADING/loading.bmp" );
		ZGetInitialLoading()->SetText( g_pDefFont, 5, 5, cstrReleaseDate );
		ZGetInitialLoading()->AddBitmapGrade( "Interface/Default/LOADING/loading_grade_fifteen.jpg" );
		ZGetInitialLoading()->SetPercentage( 0.0f );
		ZGetInitialLoading()->Draw( MODE_FADEIN, 0 , true );
	}


	g_Core.Initialize(800, 600, g_pDC, g_pDefFont);
	Core::GetInstance()->SetHWND(RealSpace2::g_hWnd);

	cclog("interface Initialize success\n");

	ZLoadingProgress appLoading("application");
	if(!g_App.OnCreate(&appLoading))
	{
		ZGetInitialLoading()->Release();
		return R_ERROR_LOADING;
	}

	ZGetSoundEngine()->SetEffectVolume(Z_AUDIO_EFFECT_VOLUME);
	ZGetSoundEngine()->SetMusicVolume(Z_AUDIO_BGM_VOLUME);
	ZGetSoundEngine()->SetEffectMute(Z_AUDIO_EFFECT_MUTE);
	ZGetSoundEngine()->SetMusicMute(Z_AUDIO_BGM_MUTE);

	g_Core.SetWorkspaceSize(g_ModeParams.nWidth, g_ModeParams.nHeight);
	g_Core.GetMainFrame()->SetSize(g_ModeParams.nWidth, g_ModeParams.nHeight);
	ZGetOptionInterface()->Resize(g_ModeParams.nWidth, g_ModeParams.nHeight);

	// Default Key
	for(int i=0; i<ZACTION_COUNT; i++){
		ZACTIONKEYDESCRIPTION& keyDesc = ZGetConfiguration()->GetKeyboard()->ActionKeys[i];
		g_pInput->RegisterActionKey(i, keyDesc.nVirtualKey);
		if(keyDesc.nVirtualKeyAlt!=-1)
			g_pInput->RegisterActionKey(i, keyDesc.nVirtualKeyAlt);
	}

	g_App.SetInitialState();

//	ParseParameter(g_szCmdLine);

//	ZGetFlashBangEffect()->SetDrawCopyScreen(true);

	static const char *szDone = "Done.";
	ZGetInitialLoading()->SetLoadingStr(szDone);
	if( ZGetInitialLoading()->IsUseEnable() )
	{
#ifndef _FASTDEBUG
		ZGetInitialLoading()->SetPercentage( 100.f );
		ZGetInitialLoading()->Draw( MODE_FADEOUT, 0 ,true  );
#endif
		ZGetInitialLoading()->Release();
	}

	cclog("main : OnCreate() done\n");

	SetFocus(g_hWnd);

	return R_OK;
}
예제 #18
0
/*
* Function
*	windowsModInfoDir
*
* Description
*	Load the modules contained in a directory and retrieve info
*
* Parameters
*	dir	directory to search (relative)
*	modlist	list of module description structure
*
* Return
*	>=0	number of modules loaded
*	-1	error
*
* Remarks
*	
*/
static int windowsModInfoDir(unsigned int gfid, char *dir, int level, tModList **modlist)
{
	tfModInfo	fModInfo;	/* init function of the modules */
	char	dname[256];	/* name of the funtions */
	char	sopath[256];	/* path of the lib[x].so */
	HMODULE	handle;		/* */
	int		modnb;		/* number on loaded modules */
	tModList	*curMod;
	tModList	*cMod;
	int		prio;
    
	modnb = 0;
	curMod = (tModList*)calloc(1, sizeof(tModList));
    
	/* open the current directory */
	_finddata_t FData;

	char Dir_name[ 1024 ];
	sprintf( Dir_name, "%s\\*.*", dir );
	GfOut("trying dir info %s\n",dir);
	long Dirent = _findfirst( Dir_name, &FData );
	if ( Dirent != -1 ) {
		do {
			if (((strlen(FData.name) > 5) && 
						   (strcmp(".dll", FData.name+strlen(FData.name)-4) == 0)) || (level == 1)) { /* xxxx.dll */
				if (level == 1) {
					sprintf(sopath, "%s/%s/%s.dll", dir, FData.name, FData.name);
					strcpy(dname, FData.name);
				} else {
					sprintf(sopath, "%s/%s", dir, FData.name);
					strcpy(dname, FData.name);
					dname[strlen(dname) - 4] = 0; /* cut .dll */
				}
				handle = LoadLibrary( sopath );
				if (handle != NULL) {
					if ((fModInfo = (tfModInfo)GetProcAddress(handle, dname)) != NULL) {
						GfOut("Request Info for %s\n", sopath);
						/* DLL loaded, init function exists, call it... */
						if (fModInfo(curMod->modInfo) == 0) {
							modnb++;
							curMod->handle = NULL;
							curMod->sopath = strdup(sopath);
							/* add the module in the list */
							if (*modlist == NULL) {
								*modlist = curMod;
								curMod->next = curMod;
							} else {
								/* sort by prio */
								prio = curMod->modInfo[0].prio;
								if (prio >= (*modlist)->modInfo[0].prio) {
									curMod->next = (*modlist)->next;
									(*modlist)->next = curMod;
									*modlist = curMod;
								} else {
									cMod = *modlist;
									do {
										if (prio < cMod->next->modInfo[0].prio) {
											curMod->next = cMod->next;
											cMod->next = curMod;
											break;
										}
										cMod = cMod->next;
									} while (cMod != *modlist);
								}
							}
							FreeLibrary(handle);
							curMod = (tModList*)calloc(1, sizeof(tModList));
						} else {
							FreeLibrary(handle);
							GfTrace("windowsModInfoDir: Module: %s not retained\n", dname);
						}
					} else {
						GfTrace("windowsModInfoDir: ...  can't find proc %s\n", dname);
						FreeLibrary(handle);
					}
				} else {
					GfTrace("windowsModInfoDir: ...  can't open dll %s\n", sopath);
				}
						   }
		} while ( _findnext( Dirent, &FData ) != -1 );
	}
    
	_findclose( Dirent );
	free(curMod);
	return modnb;
}
예제 #19
0
/* gets the list of mechanisms */
int _sasl_load_plugins(const add_plugin_list_t *entrypoints,
		       const sasl_callback_t *getpath_cb,
		       const sasl_callback_t *verifyfile_cb)
{
    int result;
    char cur_dir[PATH_MAX], full_name[PATH_MAX+2], prefix[PATH_MAX+2];
				/* 1 for '\\' 1 for trailing '\0' */
    char * pattern;
    char c;
    int pos;
    const char *path=NULL;
    int position;
    const add_plugin_list_t *cur_ep;
    struct stat statbuf;		/* filesystem entry information */
    intptr_t fhandle;			/* file handle for _findnext function */
    struct _finddata_t finddata;	/* data returned by _findnext() */
    size_t prefix_len;

    if (! entrypoints
	|| ! getpath_cb
	|| getpath_cb->id != SASL_CB_GETPATH
	|| ! getpath_cb->proc
	|| ! verifyfile_cb
	|| verifyfile_cb->id != SASL_CB_VERIFYFILE
	|| ! verifyfile_cb->proc)
	return SASL_BADPARAM;

    /* get the path to the plugins */
    result = ((sasl_getpath_t *)(getpath_cb->proc))(getpath_cb->context,
						    &path);
    if (result != SASL_OK) return result;
    if (! path) return SASL_FAIL;

    if (strlen(path) >= PATH_MAX) { /* no you can't buffer overrun */
	return SASL_FAIL;
    }

    position=0;
    do {
	pos=0;
	do {
	    c=path[position];
	    position++;
	    cur_dir[pos]=c;
	    pos++;
	} while ((c!=PATHS_DELIMITER) && (c!=0));
	cur_dir[pos-1]='\0';


/* : check to make sure that a valid directory name was passed in */
	if (stat (cur_dir, &statbuf) < 0) {
	    continue;
	}
	if ((statbuf.st_mode & S_IFDIR) == 0) {
	    continue;
	}

	strcpy (prefix, cur_dir);
	prefix_len = strlen (prefix);

/* : Don't append trailing \ unless required */
	if (prefix[prefix_len-1] != '\\') {
	    strcat (prefix,"\\");
	    prefix_len++;
	}

	pattern = prefix;

/* : Check that we have enough space for "*.dll" */
	if ((prefix_len + DLL_MASK_LEN) > (sizeof(prefix) - 1)) {
	    _sasl_log(NULL, SASL_LOG_WARN, "plugin search mask is too big");
            continue;
	}

	strcat (prefix + prefix_len, "*" DLL_SUFFIX);

        fhandle = _findfirst (pattern, &finddata);
        if (fhandle == -1) {	/* no matching files */
            continue;
        }

/* : Truncate "*.dll" */
	prefix[prefix_len] = '\0';

	do {
	    size_t length;
	    void *library;
	    char *c;
	    char plugname[PATH_MAX];
	    int entries;

	    length = strlen(finddata.name);
	    if (length < 5) { /* At least <Ch>.dll */
		continue; /* can not possibly be what we're looking for */
	    }

/* : Check for overflow */
	    if (length + prefix_len >= PATH_MAX) continue; /* too big */

	    if (stricmp(finddata.name + (length - strlen(DLL_SUFFIX)), DLL_SUFFIX) != 0) {
		continue;
	    }

/* : Check that it is not a directory */
	    if ((finddata.attrib & _A_SUBDIR) == _A_SUBDIR) {
		continue;
	    }

/* : Construct full name from prefix and name */

	    strcpy (full_name, prefix);
	    strcat (full_name, finddata.name);
		
/* cut off .dll suffix -- this only need be approximate */
	    strcpy (plugname, finddata.name);
	    c = strrchr(plugname, '.');
	    if (c != NULL) *c = '\0';

	    result = _sasl_get_plugin (full_name, verifyfile_cb, &library);

	    if (result != SASL_OK) {
		continue;
	    }

	    entries = 0;
	    for (cur_ep = entrypoints; cur_ep->entryname; cur_ep++) {
		result = _sasl_plugin_load(plugname,
					   library,
					   cur_ep->entryname,
					   cur_ep->add_plugin);
		if (result == SASL_OK) {
		    ++entries;
		}
		/* If this fails, it's not the end of the world */
	    }
	    if (entries == 0) {
		_sasl_remove_last_plugin();
	    }

	} while (_findnext (fhandle, &finddata) == 0);
	
	_findclose (fhandle);

    } while ((c!='=') && (c!=0));

    return SASL_OK;
}
예제 #20
0
파일: find.c 프로젝트: RareHare/reactos
/* Main program */
int
main (int argc, char **argv)
{
  char *opt, *needle = NULL;
  int ret = 0;
  TCHAR lpMessage[4096];

  int invert_search = 0;		/* flag to invert the search */
  int count_lines = 0;			/* flag to whether/not count lines */
  int number_output = 0;		/* flag to print line numbers */
  int ignore_case = 0;			/* flag to be case insensitive */

  FILE *pfile;				/* file pointer */
  int hfind;				/* search handle */
  struct _finddata_t finddata;		/* _findfirst, filenext block */

  /* Scan the command line */
  while ((--argc) && (needle == NULL))
    {
      if (*(opt = *++argv) == '/')
        {
          switch (opt[1])
	    {
	      case 'c':
	      case 'C':		/* Count */
	        count_lines = 1;
	        break;

	      case 'i':
	      case 'I':		/* Ignore */
	        ignore_case = 1;
	        break;

	      case 'n':
	      case 'N':		/* Number */
	        number_output = 1;
	        break;

	      case 'v':
	      case 'V':		/* Not with */
	        invert_search = 1;
	        break;

	      default:
	        usage ();
	        exit (2);		/* syntax error .. return error 2 */
	        break;
	    }
        }
      else
        {
          /* Get the string */
	  if (needle == NULL)
	    {
              /* Assign the string to find */
              needle = *argv;
	    }
	}
    }

  /* Check for search string */
  if (needle == NULL)
    {
      /* No string? */
      usage ();
      exit (1);
    }

  /* Scan the files for the string */
  if (argc == 0)
    {
      ret = find_str (needle, stdin, invert_search, count_lines,
                      number_output, ignore_case);
    }

  while (--argc >= 0)
    {
      hfind = _findfirst (*++argv, &finddata);
      if (hfind < 0)
	{
	  /* We were not able to find a file. Display a message and
	     set the exit status. */
	  LoadString( GetModuleHandle(NULL), IDS_NO_SUCH_FILE, (LPTSTR)lpMessage, 4096);
	  CharToOem(lpMessage, lpMessage);
	  fprintf (stderr, lpMessage, *argv);//
	}
      else
        {
          /* repeat find next file to match the filemask */
	  do
            {
              /* We have found a file, so try to open it */
	      if ((pfile = fopen (finddata.name, "r")) != NULL)
	        {
	          printf ("---------------- %s\n", finddata.name);
	          ret = find_str (needle, pfile, invert_search, count_lines,
	                          number_output, ignore_case);
	          fclose (pfile);
	        }
 	      else
	        {
	          LoadString(GetModuleHandle(NULL), IDS_CANNOT_OPEN, (LPTSTR)lpMessage, 4096);
	          CharToOem(lpMessage, lpMessage);
	          fprintf (stderr, lpMessage,
		           finddata.name);
                }
	    }
          while (_findnext(hfind, &finddata) > 0);
        }
      _findclose(hfind);
    } /* for each argv */

 /* RETURN: If the string was found at least once, returns 0.
  * If the string was not found at all, returns 1.
  * (Note that find_str.c returns the exact opposite values.)
  */
  exit ( (ret ? 0 : 1) );
}
예제 #21
0
static void
chkparm (struct arginfo *arg, char *str)
{
  char tmpstr[MAX_PATH + 1];
  char *cp;
  char *pnt2;
  short remarg;
  long hFile;
  struct _finddata_t c_file;

  remarg = 0;
  if (*str == '!')
    {
      remarg = 1;
      ++str;
    }
  if (strchr (str, '?') || strchr (str, '*'))
    {
      if (remarg)
	{
	  removearg (arg, str);
	}
      else
	{
	  strcpy (tmpstr, str);
	  if (!(cp = strrchr (tmpstr, '\\')))
	    if (!(cp = strrchr (tmpstr, '/')))
	      if (!(cp = strrchr (tmpstr, ':')))
		cp = tmpstr - 1;
	  pnt2 = cp + 1;
	  hFile = _findfirst (str, &c_file);
	  while (hFile > 0)
	    {
	      if (!(c_file.attrib & _A_SUBDIR))
		{
		  cp = pnt2;
		  strcpy (pnt2, c_file.name);
		  while (*cp)
		    {
		      if (islower (*cp))
			{
			  strcpy (pnt2, c_file.name);
			  break;
			}
		      *cp = tolower (*cp);
		      ++cp;
		    }
		  addarg (arg, tmpstr);
		}
	      if (_findnext (hFile, &c_file))
		{
		  _findclose (hFile);
		  hFile = 0;
		}
	    }
	}
    }
  else
    {
      if (remarg)
	removearg (arg, str);
      else
	addarg (arg, str);
    }
}
예제 #22
0
X509 * InteropResolver::nextFile2Cert(void) {


	if (m_searchFinished)
		return NULL;

	int res;

	if (!m_searchStarted) {

		char * base = XMLString::transcode(mp_baseURI);
		safeBuffer path = base;
		XSEC_RELEASE_XMLCH(base);

		path.sbStrcatIn("/certs/*.crt");

#if defined(_WIN32)

		// Reverse the "backslash" characters

		reverseSlash(path);

		m_handle = (long) _findfirst(path.rawCharBuffer(), &m_finder);
		res = m_handle;
#else
		if (glob(path.rawCharBuffer(), 0, NULL, &m_globbuf) != 0)
			res = -1;
		else
			res = 0;
#endif

		m_searchStarted = true;

	}
	else {

#if defined(_WIN32)
		res = _findnext(m_handle, &m_finder);
#else
		if (m_fcount == (int) m_globbuf.gl_pathc)
			res = -1;
		else
			res = 0;
#endif

	}

	if (res == -1) {

		m_searchFinished = true;
		return NULL;

	}

	/* 
	 * Create the OpenSSL BIOs necessary to read in the X509 cert
	 */

	BIO * bioCert;
	if ((bioCert = BIO_new(BIO_s_file())) == NULL) {

		std::cerr << "Error opening certificate file\n\n";
		exit (1);

	}

	// Create the filename
	safeBuffer fname;
#if defined(_WIN32)
	fname.sbTranscodeIn(mp_baseURI);
	fname.sbStrcatIn("/certs/");
	fname.sbStrcatIn(m_finder.name);
	reverseSlash(fname);
#else
	fname.sbStrcpyIn(m_globbuf.gl_pathv[m_fcount++]);
#endif

	if (BIO_read_filename(bioCert, fname.rawCharBuffer()) <= 0) {

		std::cerr << "Error opening certificate file\n" << fname.rawCharBuffer() << std::endl;
		return NULL;

	}

	X509 * x509 = d2i_X509_bio(bioCert, NULL);
	BIO_free(bioCert);

	return x509;


}
예제 #23
0
FileList::FileList(const FilePath & filepath)
{
    DVASSERT(filepath.IsDirectoryPathname());
    
	path = filepath;

// Windows version
#if defined(__DAVAENGINE_WIN32__)

	//char tmp[_MAX_PATH];
	//_getcwd(tmp, _MAX_PATH);
	//Path = tmp;
	FilePath prevDir = FileSystem::Instance()->GetCurrentWorkingDirectory();
	BOOL res = SetCurrentDirectoryA(path.GetAbsolutePathname().c_str());

	if (res)
	{
		struct _finddata_t c_file;
		intptr_t hFile;
		FileEntry entry;

		if( (hFile = _findfirst( "*", &c_file )) != -1L )
		{
			do
			{
                //TODO: need to check for Win32
				entry.path = filepath + c_file.name;
				entry.name = c_file.name;
				entry.size = c_file.size;
				entry.isDirectory = (_A_SUBDIR & c_file.attrib) != 0;
				if(entry.isDirectory)
				{
					entry.path.MakeDirectoryPathname();
				}

				fileList.push_back(entry);
				//Logger::FrameworkDebug("filelist: %s %s", filepath.c_str(), entry.name.c_str());
			}
			while( _findnext( hFile, &c_file ) == 0 );

			_findclose( hFile );
		}
	}
	FileSystem::Instance()->SetCurrentWorkingDirectory(prevDir);

	//TODO add drives
	//entry.Name = "E:\\";
	//entry.isDirectory = true;
	//Files.push_back(entry);
#elif defined(__DAVAENGINE_MACOS__) || defined(__DAVAENGINE_IPHONE__)
	struct dirent **namelist;
	FileEntry entry;

	int32 n = scandir(path.GetAbsolutePathname().c_str(), &namelist, 0, alphasort);

	if (n >= 0)
	{
		while(n--)
		{
			entry.path = path + namelist[n]->d_name;
			entry.name = namelist[n]->d_name;
			entry.size = 0;
			entry.isDirectory = namelist[n]->d_type == DT_DIR;
            if(entry.isDirectory)
            {
                entry.path.MakeDirectoryPathname();
            }
			fileList.push_back(entry);
			free(namelist[n]);
		}
		free(namelist);
	}
#elif defined (__DAVAENGINE_ANDROID__)
	JniFileList jniFileList;
	Vector<JniFileList::JniFileListEntry> entrys = jniFileList.GetFileList(path.GetAbsoluteAssetPathnameTruncated());
	FileEntry entry;
	for (int32 i = 0; i < entrys.size(); ++i)
	{
		const JniFileList::JniFileListEntry& jniEntry = entrys[i];

		entry.path = path + jniEntry.name;
		entry.name = jniEntry.name;
		entry.size = jniEntry.size;
		entry.isDirectory = jniEntry.isDirectory;

		if(entry.isDirectory)
		{
			entry.path.MakeDirectoryPathname();
		}
		fileList.push_back(entry);
	}
#endif //PLATFORMS

	directoryCount = 0;
	fileCount = 0;
	for (int fi = 0; fi < GetCount(); ++fi)
	{
		if (IsDirectory(fi))
		{
			if (!IsNavigationDirectory(fi))
				directoryCount++;
		}else
			fileCount++;
	}
}
예제 #24
0
void ModuleLoader::setModuleDirectory(const char* directory)
{
  const size_t len = strlen(directory) + 256 + 1;
  char pattern[1024];
  strcpy(pattern, directory);
  strcat(pattern, "/*.*");

  _finddata_t data;
  intptr_t dir = _findfirst(pattern, &data);

  if(!dir)
    return;

  char* fname;
  IServiceManager* servmgr;

  fname = static_cast<char*>(malloc(len));
  servmgr = XPLC_getServiceManager();

  bool first = true;
  while(fname && servmgr) {
	if(!first && _findnext(dir, &data))
      break;
    first = false;
    const char* err;
    void* dlh;
    XPLC_GetModuleFunc getmodule = 0;
    IModule* module;
    ModuleNode* newmodule;

    _snprintf(fname, len, "%s/%s", directory, data.name);

    err = loaderOpen(fname, &dlh);
    if(err)
      continue;

    err = loaderSymbol(dlh, "XPLC_GetModule",
		       reinterpret_cast<void**>(&getmodule));
    if(err || !getmodule) {
      loaderClose(dlh);
      continue;
    }

    module = getmodule(servmgr, XPLC_MODULE_VERSION);
    if(!module) {
      loaderClose(dlh);
      continue;
    }

    newmodule = new ModuleNode(module, dlh, modules);
    if(newmodule)
      modules = newmodule;
  }

  if(servmgr)
    servmgr->release();

  free(fname);

  _findclose(dir);
}
예제 #25
0
/*!
* For a given path, this method lists all files, directories and
* sub-directories it contains and stores the filenames in the fileList vector.
*
* \param fileList list of files in folder
* \param path folder's path to list
* \param symLinks follow Unix links?
*
* \return path exists and is a directory
*/
bool CUtil::GetFileList(StringVector &fileList, const string &path, bool symLinks)
{
    string fullPath;
#ifdef UNIX
    DIR *dir;
    struct dirent *fileRead;
    struct stat inodeData;

    // opening the given path
    dir = opendir(path.c_str());

    // If the dir doesn't exist
    if (dir == NULL)
        return(false);

    // each file is processed until the last one
    while ((fileRead = readdir(dir)) != NULL)
    {
        // '.' & '..' are omitted
        if ((strcmp(fileRead->d_name, ".") != 0) && (strcmp(fileRead->d_name, "..") != 0))
        {
            // fullPath contains the path + the file name.
            fullPath = path + '/' + fileRead->d_name;
            if (symLinks)
            {
                if (stat(fullPath.c_str(), &inodeData) >= 0)
                {
                    // for each file, store the fullPath into the ofstream
                    if (!S_ISDIR(inodeData.st_mode))
                        fileList.push_back(fullPath);
                    else
                    {
                        // for each directory, its file list is obtained
                        GetFileList(fileList, fullPath, symLinks);
                    }
                }
            }
            else
            {
                if (lstat(fullPath.c_str(), &inodeData) >= 0)
                {
                    // for each file, store the fullPath into the ofstream
                    if (!S_ISLNK(inodeData.st_mode))
                    {
                        if (!S_ISDIR(inodeData.st_mode))
                            fileList.push_back(fullPath);
                        else
                        {
                            // for each directory, its file list is obtained
                            GetFileList(fileList, fullPath, symLinks);
                        }
                    }
                }
            }
        }
    }
    // close the directory
    closedir(dir);
#else
    struct _finddata_t c_file;
    ptrdiff_t hFile;
    string findPath = path + "\\*.*";

    // the first file is obtained
    hFile = _findfirst(findPath.c_str(), &c_file);

    // If the dir doesn't exist
    if (hFile == -1)
        return(false);

    // each file is processed until the last one
    while (_findnext(hFile, &c_file) == 0)
    {
        // for each file (not a directory (_A_SUBDIR), store its name into the fileList
        fullPath = path + "\\" + c_file.name;
        if (!(c_file.attrib & _A_SUBDIR))
            fileList.push_back(fullPath);
        else if ((strcmp(".", c_file.name) != 0) && (strcmp("..", c_file.name) != 0))
        {
            // for each directory, except '.' and '..', its file list is obtained
            GetFileList(fileList, fullPath, symLinks);
        }
    }
    // close the directory
    _findclose(hFile);
#endif
    return(true);
}
예제 #26
0
/*
==============
Sys_ListFilteredFiles
==============
*/
void Sys_ListFilteredFiles(const char *basedir, char *subdirs, char *filter, char **list, int *numfiles)
{
	char               search[MAX_OSPATH], newsubdirs[MAX_OSPATH];
	char               filename[MAX_OSPATH];
	intptr_t           findhandle;
	struct _finddata_t findinfo;

	if (*numfiles >= MAX_FOUND_FILES - 1)
	{
		return;
	}

	if (strlen(subdirs))
	{
		Com_sprintf(search, sizeof(search), "%s\\%s\\*", basedir, subdirs);
	}
	else
	{
		Com_sprintf(search, sizeof(search), "%s\\*", basedir);
	}

	findhandle = _findfirst(search, &findinfo);
	if (findhandle == -1)
	{
		return;
	}

	do
	{
		if (findinfo.attrib & _A_SUBDIR)
		{
			if (Q_stricmp(findinfo.name, ".") && Q_stricmp(findinfo.name, ".."))
			{
				if (strlen(subdirs))
				{
					Com_sprintf(newsubdirs, sizeof(newsubdirs), "%s\\%s", subdirs, findinfo.name);
				}
				else
				{
					Com_sprintf(newsubdirs, sizeof(newsubdirs), "%s", findinfo.name);
				}

				Sys_ListFilteredFiles(basedir, newsubdirs, filter, list, numfiles);
			}
		}
		if (*numfiles >= MAX_FOUND_FILES - 1)
		{
			break;
		}
		Com_sprintf(filename, sizeof(filename), "%s\\%s", subdirs, findinfo.name);
		if (!Com_FilterPath(filter, filename, qfalse))
		{
			continue;
		}

		list[*numfiles] = CopyString(filename);
		(*numfiles)++;
	}
	while (_findnext(findhandle, &findinfo) != -1);

	_findclose(findhandle);
}
예제 #27
0
bool get_filename_from_base(
	std::vector<std::string> &in_list,
	std::vector<std::string> &out_list,
	const std::string &path,
	const std::string &base_name,
	const char **filter )
{
#ifdef SFML_SYSTEM_WINDOWS
	std::string temp = path + base_name + "*";

	struct _finddata_t t;
	intptr_t srch = _findfirst( temp.c_str(), &t );

	if  ( srch < 0 )
		return false;

	do
	{
		const char *what = t.name;
		size_t what_len = strlen( what );

		if (( strcmp( what, "." ) != 0 )
				&& ( strcmp( what, ".." ) != 0 ))
		{
#else

	DIR *dir;
	struct dirent *ent;

	if ( (dir = opendir( path.c_str() )) == NULL )
		return false;

	while ((ent = readdir( dir )) != NULL )
	{
		const char *what = ent->d_name;
		size_t what_len = strlen( what );
		size_t base_len = base_name.size();

		if (( strcmp( what, "." ) != 0 )
				&& ( strcmp( what, ".." ) != 0 )
				&& ( what_len >= base_len )
				&& ( strncasecmp( what, base_name.c_str(), base_len ) == 0 ))
		{
#endif // SFML_SYSTEM_WINDOWS
			if ( filter )
			{
				bool add=false;
				int i=0;
				while ( filter[i] != NULL )
				{
					if ( c_tail_compare( what,
						what_len,
						filter[i],
						strlen( filter[i] ) ) )
					{
						add=true;
						break;
					}
					i++;
				}

				if ( add )
					in_list.push_back( path + what );
				else
					out_list.push_back( path + what );
			}
			else
				in_list.push_back( path + what );
#ifdef SFML_SYSTEM_WINDOWS
		}
	} while ( _findnext( srch, &t ) == 0 );
	_findclose( srch );
#else
		}
	}
	closedir( dir );
#endif // SFML_SYSTEM_WINDOWS

	return !(in_list.empty());
}
예제 #28
0
void loadsavescreen_delete( void )
{
	GameInfo	*gameInfo = g_loadsaveWindow->GetGameInfo();

	Assert(gameInfo);
	if (!gameInfo) return;

//	Assert(saveInfo);
//	if (!saveInfo) return;

	SaveInfo	*saveInfo = g_loadsaveWindow->GetSaveInfo();
	if(saveInfo)
	{
		MBCHAR		path[_MAX_PATH];

		sprintf(path, "%s%s%s", gameInfo->path, FILE_SEP, saveInfo->fileName);

#ifdef WIN32
		if ( DeleteFile( path ) )
#elif defined(HAVE_UNISTD_H)
		if ( !unlink( path ) )
#endif
		{
			// FIXME ? Do we want to worry about deleting .gw files?

			// Refill list two.
			sint32 one = g_loadsaveWindow->GetListOne()->GetSelectedItemIndex();
			sint32 two = g_loadsaveWindow->GetListTwo()->GetSelectedItemIndex();

			g_loadsaveWindow->SetType( g_loadsaveWindow->GetType() );

			g_loadsaveWindow->GetListOne()->SelectItem( one );

			if ( two && two == g_loadsaveWindow->GetListTwo()->NumItems() ) --two;
			g_loadsaveWindow->GetListTwo()->SelectItem( two );

	// This wasn't working.
	//  		aui_Item *item = g_loadsaveWindow->GetListTwo()->GetSelectedItem();
	//  		if ( item )
	//  		{
	//  			g_loadsaveWindow->GetListTwo()->RemoveItem( item->Id() );
	//  			delete item;
	//  		}
		}
		else
		{
			Assert( "Couldn't delete file." == 0 );
		}
	}
	else
	{
#ifdef WIN32
		MBCHAR		path[_MAX_PATH];
		sprintf(path, "%s%s*.*", gameInfo->path, FILE_SEP);

		_finddata_t findData;
		int fileHandle=_findfirst(path,&findData);
		while(fileHandle)
		{
			sprintf(path, "%s%s%s", gameInfo->path, FILE_SEP, findData.name);
			DeleteFile(path);
			if(_findnext(fileHandle,&findData))
			{
				_findclose(fileHandle);
				fileHandle=0;
			}
		}
		sprintf(path, "%s", gameInfo->path);
		int retval=_rmdir(path);
		assert(!retval);
		g_loadsaveWindow->FillListTwo(NULL);
		g_loadsaveWindow->SetType(g_loadsaveWindow->GetType());
#endif // WIN32
	}
}
예제 #29
0
파일: NFS3Prog.cpp 프로젝트: philr/winnfsd
nfsstat3 CNFS3Prog::ProcedureREADDIR(void)
{
    char *path;
    cookie3 cookie;
    cookieverf3 cookieverf;
    count3 count;
    post_op_attr dir_attributes;
    fileid3 fileid;
    filename3 name;
    bool eof;
    bool bFollows;
    nfsstat3 stat;
    char filePath[MAXPATHLEN];
    int handle;
    struct _finddata_t fileinfo;

    PrintLog("READDIR");
    path = GetPath();
    Read(&cookie);
    Read(&cookieverf);
    Read(&count);
    stat = CheckFile(path);

    if (stat == NFS3_OK) {
        dir_attributes.attributes_follow = GetFileAttributesForNFS(path, &dir_attributes.attributes);

        if (!dir_attributes.attributes_follow) {
            stat = NFS3ERR_IO;
        }    
    }

    Write(&stat);
    Write(&dir_attributes);

    if (stat == NFS3_OK) {
        Write(&cookieverf);
        sprintf_s(filePath, "%s\\*", path);
        cookie = 0;
        eof = false;
        handle = _findfirst(filePath, &fileinfo);
        bFollows = true;

        if (handle) {
            do {
                Write(&bFollows); //value follows
                sprintf_s(filePath, "%s\\%s", path, fileinfo.name);
                fileid = GetFileID(filePath);
                Write(&fileid); //file id
                name.Set(fileinfo.name);
                Write(&name); //name
                ++cookie;
                Write(&cookie); //cookie
            } while (_findnext(handle, &fileinfo) == 0);

            _findclose(handle);
        }

        bFollows = false;
        Write(&bFollows);
        eof = true;
        Write(&eof); //eof
    }

    return stat;
}
예제 #30
0
char *
AcpiOsGetNextFilename (
    void                    *DirHandle)
{
    EXTERNAL_FIND_INFO      *SearchInfo = DirHandle;
    int                     Status;
    char                    FileTypeNotMatched = 1;


    /*
     * Loop while we have matched files but not found any files of
     * the requested type.
     */
    while (FileTypeNotMatched)
    {
        /* On the first call, we already have the first match */

        if (SearchInfo->State == 0)
        {
            /* No longer the first match */

            SearchInfo->State = 1;
        }
        else
        {
            /* Get the next match */

            Status = _findnext (SearchInfo->FindHandle, &SearchInfo->DosInfo);
            if (Status != 0)
            {
                return (NULL);
            }
        }

        /*
         * Found a match, now check to make sure that the file type
         * matches the requested file type (directory or normal file)
         *
         * NOTE: use of the attrib field saves us from doing a very
         * expensive stat() on the file!
         */
        switch (SearchInfo->RequestedFileType)
        {
        case REQUEST_FILE_ONLY:

            /* Anything other than A_SUBDIR is OK */

            if (!(SearchInfo->DosInfo.attrib & _A_SUBDIR))
            {
                FileTypeNotMatched = 0;
            }
            break;

        case REQUEST_DIR_ONLY:

            /* Must have A_SUBDIR bit set */

            if (SearchInfo->DosInfo.attrib & _A_SUBDIR)
            {
                FileTypeNotMatched = 0;
            }
            break;

        default:

            return (NULL);
        }
    }

    return (SearchInfo->DosInfo.name);
}