FindFiles::~FindFiles() {
if ( findHandle != NULL ) {
closedir( findHandle );
+ findHandle = NULL;
}
}
#else
FindFiles::FindFiles( const char *_directory ) {
+ char endChar;
directory = _directory;
+ if (directory.GetLength() > 0) {
+ endChar = directory.GetAt(directory.GetLength() - 1);
+ if (!(endChar == '/' || endChar == '\\')) {
+ // We're only using '/' as the path separator throughout this code, not '\'.
+ // However, I'd hate to see the code silently fail due to a trailing '\', so
+ // I added the check for it.
+ directory += '/';
+ }
+ }
directory += '*';
findHandle = INVALID_HANDLE_VALUE;
}
FindFiles::~FindFiles() {
- if ( findHandle != NULL ) {
+ if ( findHandle != INVALID_HANDLE_VALUE ) {
FindClose( findHandle );
+ findHandle = INVALID_HANDLE_VALUE;
}
}
}
if ( FindNextFile( findHandle, &findFileData ) == 0 ) {
FindClose( findHandle );
+ findHandle = INVALID_HANDLE_VALUE;
return NULL;
}
return findFileData.cFileName;
}
bool radCreateDirectory( const char *directory ) {
- return CreateDirectory( directory, NULL );
+ return ( CreateDirectory( directory, NULL ) != false );
}
bool radCopyFile( const char *lpExistingFileName, const char *lpNewFileName ) {
- return CopyFile( lpExistingFileName, lpNewFileName, FALSE );
+ return ( CopyFile( lpExistingFileName, lpNewFileName, FALSE ) != false );
}
#endif
switch ( CheckFile( srcEntry.GetBuffer() ) ) {
case PATH_DIRECTORY: {
if ( CheckFile( dstEntry.GetBuffer() ) == PATH_FAIL ) {
- radCreateDirectory( dstEntry.GetBuffer() );
+ if ( !radCreateDirectory( dstEntry.GetBuffer() ) ) {
+ Sys_Printf( "create directory %s failed\n", dstEntry.GetBuffer() );
+ return false;
+ }
}
bool ret;
ret = CopyTree( srcEntry.GetBuffer(), dstEntry.GetBuffer() );