More check of executable file

This commit is contained in:
ptitSeb 2018-10-14 11:08:57 +02:00
parent fd8aff098f
commit 25b3b57564
3 changed files with 19 additions and 4 deletions

View File

@ -14,12 +14,23 @@
#include "debug.h"
#include "fileutils.h"
int FileExist(const char* filename)
int FileExist(const char* filename, int flags)
{
struct stat sb;
if (stat(filename, &sb) == -1)
return 0;
// check type of file? should be executable, or folder
if(flags&IS_FILE) {
if(!S_ISREG(sb.st_mode))
return 0;
} else {
if(!S_ISDIR(sb.st_mode))
return 0;
}
if(flags&IS_EXECUTABLE) {
if(sb.st_mode&S_IXUSR!=S_IXUSR)
return 0; // nope
}
return 1;
}
@ -29,7 +40,7 @@ char* ResolveFile(const char* filename, path_collection_t* paths)
for (int i=0; i<paths->size; ++i) {
strcpy(p, paths->paths[i]);
strcat(p, filename);
if(FileExist(p))
if(FileExist(p, IS_FILE))
return strdup(p);
}

View File

@ -3,7 +3,11 @@
#include "pathcoll.h"
int FileExist(const char* filename); // 0 : doesn't exist, 1: Does exist
#define IS_EXECUTABLE (1<<0)
#define IS_FILE (1<<1)
int FileExist(const char* filename, int flags); // 0 : doesn't exist, 1: Does exist
char* ResolveFile(const char* filename, path_collection_t* paths); // find a file, using Path if needed
#endif //__FILEUTILS_H_

View File

@ -90,7 +90,7 @@ int main(int argc, const char **argv) {
FreeBox86Context(&context);
return -1;
}
if(!FileExist(context->argv[0])) {
if(!FileExist(context->argv[0], IS_FILE|IS_EXECUTABLE)) {
printf_debug(DEBUG_NONE, "Error, file is not found\n", context->argv[0]);
FreeBox86Context(&context);
return -1;