mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-06 18:54:13 +00:00
Public release of the DLU server code!
Have fun!
This commit is contained in:
161
thirdparty/raknet/Source/FileOperations.cpp
vendored
Normal file
161
thirdparty/raknet/Source/FileOperations.cpp
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
#include "RakMemoryOverride.h"
|
||||
#include "_FindFirst.h" // For linux
|
||||
#include "FileOperations.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
// For mkdir
|
||||
#include <direct.h>
|
||||
#include <io.h>
|
||||
#else
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#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
|
||||
|
||||
|
Reference in New Issue
Block a user