]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/missing.cpp
use q3map2 from NetRadiant (VOLUNTEERS: split this commit into functional parts!)
[xonotic/netradiant.git] / radiant / missing.cpp
index 0245ec1e01758e215eb6ef6d6bc4a99f5502c434..246946830125efd01f88b14dc1ae80f9bda25f8e 100644 (file)
@@ -149,6 +149,7 @@ FindFiles::FindFiles( const char *_directory ) {
 FindFiles::~FindFiles() {
        if ( findHandle != NULL ) {
                closedir( findHandle );
+               findHandle = NULL;
        }
 }
 
@@ -167,14 +168,25 @@ const char* FindFiles::NextFile() {
 #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;
        }
 }
 
@@ -188,6 +200,7 @@ const char* FindFiles::NextFile() {
        }
        if ( FindNextFile( findHandle, &findFileData ) == 0 ) {
                FindClose( findHandle );
+               findHandle = INVALID_HANDLE_VALUE;
                return NULL;
        }
        return findFileData.cFileName;
@@ -205,11 +218,11 @@ EPathCheck CheckFile( const char *path ) {
 }
 
 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
@@ -236,7 +249,10 @@ bool CopyTree( const char *source, const char *dest ) {
                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() );