Changeset 328


Ignore:
Timestamp:
08/15/13 09:07:14 (6 years ago)
Author:
jls17
Message:
Location:
branches/work_304
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/work_304/FileSystemUtil.cpp

    r326 r328  
    501501} 
    502502#endif 
     503 
     504string FileSystemUtil::CombinePath(const std::string &path1, const std::string &path2) 
     505{ 
     506        // if the second path points to the root (starts with PATH_SEPARATOR, we just return the 2nd path) 
     507        if (path2.length() > 0 &&  
     508#ifdef WIN32 
     509                (path2[0] == '/' || path2[0] == '\\') 
     510#else 
     511                path2[0] == '/' 
     512#endif 
     513                ) 
     514        { 
     515                return path2; 
     516        } 
     517 
     518        stringstream result; 
     519 
     520        // add first part 
     521        result << path1; 
     522 
     523        // check if we need to add PATH_SEPARATOR 
     524        if (path1.length() > 0) 
     525        { 
     526                char lastPathChar = path1[path1.length()-1]; 
     527#ifdef WIN32 
     528                if (lastPathChar != '/' && lastPathChar != '\\') 
     529#else 
     530                if (lastPathChar != '/') 
     531#endif 
     532                { 
     533                        result << ARINSIDE_PATH_SEPARATOR; 
     534                } 
     535        } 
     536 
     537        result << path2; 
     538        return result.str(); 
     539} 
  • branches/work_304/FileSystemUtil.h

    r326 r328  
    1818#include "AppConfig.h" 
    1919 
     20#ifdef WIN32 
     21#define ARINSIDE_PATH_SEPARATOR "\\" 
     22#else 
     23#define ARINSIDE_PATH_SEPARATOR "/" 
     24#endif 
     25 
    2026class FileSystemUtil 
    2127{ 
     
    3541        static void CompactFolder(std::string path); 
    3642        static std::string GetExecutableDirectory(const char* argv_0); 
     43        static std::string CombinePath(const std::string &path1, const std::string &path2); 
    3744#if WIN32 
    3845        static std::string GetFormattedMessage(unsigned int error); 
  • branches/work_304/FileSystemUtilTest.cpp

    r327 r328  
    2828        ASSERT_STREQ(expectedDir.c_str(), directory.c_str()); 
    2929} 
     30 
     31TEST(FileSystemUtil, CombinePathSimpleWithoutSeparator) 
     32{ 
     33#ifdef WIN32 
     34        string directory = FileSystemUtil::CombinePath("C:\\Windows", "Temp"); 
     35        ASSERT_STREQ("C:\\Windows\\Temp", directory.c_str()); 
     36#else 
     37        string directory = FileSystemUtil::CombinePath("/c/Windows", "Temp"); 
     38        ASSERT_STREQ("/c/Windows/Temp", directory.c_str()); 
     39#endif 
     40} 
     41 
     42TEST(FileSystemUtil, CombinePathSimpleWithSeparator) 
     43{ 
     44#ifdef WIN32 
     45        string directory = FileSystemUtil::CombinePath("C:\\", "Temp"); 
     46        ASSERT_STREQ("C:\\Temp", directory.c_str()); 
     47#else 
     48        string directory = FileSystemUtil::CombinePath("/tmp/", "test_dir"); 
     49        ASSERT_STREQ("/tmp/test_dir", directory.c_str()); 
     50#endif 
     51} 
     52 
     53TEST(FileSystemUtil, CombinePathSecondPathStartsWithRootDir) 
     54{ 
     55#ifdef WIN32 
     56        string directory = FileSystemUtil::CombinePath("C:\\Windows", "\\Temp"); 
     57        ASSERT_STREQ("\\Temp", directory.c_str()); 
     58#else 
     59        string directory = FileSystemUtil::CombinePath("/tmp/", "/test_dir"); 
     60        ASSERT_STREQ("/test_dir", directory.c_str()); 
     61#endif 
     62} 
     63 
     64#ifdef WIN32 
     65TEST(FileSystemUtil, CombinePathSecondPathStartsWithRootDir2) 
     66{ 
     67        string directory = FileSystemUtil::CombinePath("C:\\Windows", "/Temp"); 
     68        ASSERT_STREQ("/Temp", directory.c_str()); 
     69} 
     70#endif 
     71 
     72TEST(FileSystemUtil, CombinePathWithMixedSeparators) 
     73{ 
     74#ifdef WIN32 
     75        string directory = FileSystemUtil::CombinePath("C:/Windows/Temp", "MyDir"); 
     76        ASSERT_STREQ("C:/Windows/Temp\\MyDir", directory.c_str()); 
     77#else 
     78        string directory = FileSystemUtil::CombinePath("/tmp\\", "MyDir"); 
     79        ASSERT_STREQ("/tmp\\/MyDir", directory.c_str()); 
     80#endif 
     81} 
  • branches/work_304/util/UntarStream.cpp

    r324 r328  
    11#include "stdafx.h" 
    22#include "UntarStream.h" 
     3#include "../FileSystemUtil.h" 
    34#include "../ARApi.h" 
    4  
    5 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    6 // Helper 
    7 void BuildFileName(const std::string &destPath, tar_header &header, /*out*/ stringstream &output) 
    8 { 
    9         output << destPath; 
    10         if (!destPath.empty()) 
    11         { 
    12                 char last = destPath[destPath.length()]; 
    13                 if (last != '\\' && last != '/') 
    14                 { 
    15                         output << "/"; 
    16                 } 
    17         } 
    18         output << header.name; 
    19 } 
    205 
    216///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
     
    4732                case DIRTYPE: 
    4833                        { 
    49                                 //cout << "Directory: " << header.name << endl; 
    50                                 stringstream dirNameStrm; 
    51                                 BuildFileName(destPath, header, dirNameStrm); 
    52                                  
    53                                 string dirName(dirNameStrm.str()); 
     34                                string dirName = FileSystemUtil::CombinePath(destPath, header.name); 
    5435                                if (!this->CreateOutputDirectory(dirName.c_str())) 
    5536                                { 
     
    11293void UntarStream::ExtractFile() 
    11394{ 
    114         stringstream tmpStrm; 
    115         BuildFileName(destPath, header, tmpStrm); 
    116         string fileName = tmpStrm.str(); 
     95        string fileName = FileSystemUtil::CombinePath(destPath, header.name); 
    11796 
    11897        if (FileExists(fileName.c_str())) 
  • branches/work_304/util/UntarStreamTest.cpp

    r324 r328  
    3434        untar.ExtractAllTo("memory"); 
    3535 
     36#ifdef WIN32 
     37        ASSERT_EQ(1, untar.dirNames.size()); 
     38        ASSERT_STREQ("memory\\test/", untar.dirNames[0].c_str()); 
     39 
     40        ASSERT_EQ(2, untar.fileNames.size()); 
     41        ASSERT_STREQ("memory\\test/file1.txt", untar.fileNames[0].c_str()); 
     42        ASSERT_STREQ("memory\\test/file2.txt", untar.fileNames[1].c_str()); 
     43 
     44        ASSERT_EQ(2, untar.fileContent.size()); 
     45        ASSERT_STREQ("Content of file 1", untar.fileContent[0].c_str()); 
     46        ASSERT_STREQ("Content of file 2\n", untar.fileContent[1].c_str()); 
     47#else 
    3648        ASSERT_EQ(1, untar.dirNames.size()); 
    3749        ASSERT_STREQ("memory/test/", untar.dirNames[0].c_str()); 
     
    4456        ASSERT_STREQ("Content of file 1", untar.fileContent[0].c_str()); 
    4557        ASSERT_STREQ("Content of file 2\n", untar.fileContent[1].c_str()); 
     58#endif 
    4659} 
    4760 
Note: See TracChangeset for help on using the changeset viewer.