#include "RakMemoryOverride.h" #include "_FindFirst.h" // For linux #include "FileOperations.h" #include #include #ifdef _WIN32 // For mkdir #include #include #else #include #include #include "_FindFirst.h" #endif #include "errno.h" #ifdef _MSC_VER #pragma warning( push ) #endif #ifdef _MSC_VER #pragma warning( disable : 4966 ) // mkdir declared depreciated by Microsoft in order to make it harder to be cross platform. I don't agree it's depreciated. #endif bool WriteFileWithDirectories( const char *path, char *data, unsigned dataLength ) { int index; FILE *fp; char *pathCopy; int res; if ( path == 0 || path[ 0 ] == 0 ) return false; pathCopy = (char*) rakMalloc( strlen( path ) + 1 ); strcpy( pathCopy, path ); // Ignore first / if there is one if (pathCopy[0]) { index = 1; while ( pathCopy[ index ] ) { if ( pathCopy[ index ] == '/' || pathCopy[ index ] == '\\') { pathCopy[ index ] = 0; #ifdef _WIN32 #pragma warning( disable : 4966 ) // mkdir declared depreciated by Microsoft in order to make it harder to be cross platform. I don't agree it's depreciated. res = mkdir( pathCopy ); #else res = mkdir( pathCopy, 0744 ); #endif if (res<0 && errno!=EEXIST) { rakFree(pathCopy); return false; } pathCopy[ index ] = '/'; } index++; } } if (data) { fp = fopen( path, "wb" ); if ( fp == 0 ) { rakFree(pathCopy); return false; } fwrite( data, 1, dataLength, fp ); fclose( fp ); } else { #ifdef _WIN32 #pragma warning( disable : 4966 ) // mkdir declared depreciated by Microsoft in order to make it harder to be cross platform. I don't agree it's depreciated. res = mkdir( pathCopy ); #else res = mkdir( pathCopy, 0744 ); #endif if (res<0 && errno!=EEXIST) { rakFree(pathCopy); return false; } } rakFree(pathCopy); return true; } bool IsSlash(unsigned char c) { return c=='/' || c=='\\'; } void AddSlash( char *input ) { if (input==0 || input[0]==0) return; int lastCharIndex=(int) strlen(input)-1; if (input[lastCharIndex]=='\\') input[lastCharIndex]='/'; else if (input[lastCharIndex]!='/') { input[lastCharIndex+1]='/'; input[lastCharIndex+2]=0; } } bool DirectoryExists(const char *directory) { _finddata_t fileInfo; intptr_t dir; char baseDirWithStars[560]; strcpy(baseDirWithStars, directory); AddSlash(baseDirWithStars); strcat(baseDirWithStars, "*.*"); dir=_findfirst(baseDirWithStars, &fileInfo ); if (dir==-1) return false; _findclose(dir); return true; } void QuoteIfSpaces(char *str) { unsigned i; bool hasSpace=false; for (i=0; str[i]; i++) { if (str[i]==' ') { hasSpace=true; break; } } if (hasSpace) { int len=(int)strlen(str); memmove(str+1, str, len); str[0]='\"'; str[len]='\"'; str[len+1]=0; } } #ifdef _MSC_VER #pragma warning( pop ) #endif