X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FOS%2FFileSystem.cxx;fp=lib%2FcpPlugins%2FOS%2FFileSystem.cxx;h=0000000000000000000000000000000000000000;hb=2e142df11d6f312a2a2b5097b8da73571ed523e8;hp=334bf2a100c14d9753d43bf9a2dda3357655b4db;hpb=61b3659afe961ed248f30e26f9ca8f28fcfafddc;p=cpPlugins.git diff --git a/lib/cpPlugins/OS/FileSystem.cxx b/lib/cpPlugins/OS/FileSystem.cxx deleted file mode 100644 index 334bf2a..0000000 --- a/lib/cpPlugins/OS/FileSystem.cxx +++ /dev/null @@ -1,202 +0,0 @@ -#include -#include -#include -#include - -// ------------------------------------------------------------------------- -std::string cpPlugins::OS::FileSystem:: -CanonicalPath( const std::string& path ) -{ - std::string ret = ""; -#ifdef cpExtensions_OS_Windows - TCHAR buffer[ 4096 ] = TEXT( "" ); - TCHAR** lppPart = { NULL }; - GetFullPathName( path.c_str( ), 4096, buffer, lppPart ); - ret = std::string( buffer ); -#else // cpExtensions_OS_Windows - char* canonical_path = realpath( path.c_str( ), NULL ); - if( canonical_path != NULL ) - { - ret = canonical_path; - free( canonical_path ); - - } // fi -#endif // cpExtensions_OS_Windows - return( ret ); -} - -// ------------------------------------------------------------------------- -std::pair< std::string, std::string > cpPlugins::OS::FileSystem:: -SplitPath( const std::string& path ) -{ - size_t found = path.find_last_of( "/\\" ); - return( - std::pair< std::string, std::string >( - path.substr( 0, found + 1 ), path.substr( found + 1 ) - ) - ); -} - -// ------------------------------------------------------------------------- -std::set< std::string > cpPlugins::OS::FileSystem:: -LoadDirContents( - const std::string& path, bool recursive, - const std::string& pattern - ) -{ - // Prepare inputs and outputs - std::stringstream path_stream; - path_stream << path << cpPlugins_PATH_SEPARATOR; - std::string path_str = path_stream.str( ); - std::set< std::string > output; - - // Process data - tinydir_dir dir; - if( tinydir_open_sorted( &dir, path.c_str( ) ) != -1 ) - { - for( auto i = 0; i < dir.n_files; i++ ) - { - tinydir_file file; - if( tinydir_readfile_n( &dir, &file , i ) != -1 ) - { - std::string fname = path_str + file.name; - if( file.is_dir ) - { - if( recursive ) - { - if( fname != "." && fname != ".." ) - { - auto tmp = Self::LoadDirContents( fname, true ); - output.insert( tmp.begin( ), tmp.end( ) ); - - } // fi - - } // fi - } - else - { - if( pattern != "" ) - { - if( Self::Glob( fname, path_str + pattern ) ) - output.insert( fname ); - } - else - output.insert( fname ); - - } // fi - - } // fi - - } // rof - - } // fi - tinydir_close( &dir ); - return( output ); -} - -// ------------------------------------------------------------------------- -int cpPlugins::OS::FileSystem:: -GlobMatch( const char* target, const char* pattern ) -{ - char* pat = const_cast< char* >( pattern ); - char* end = strchr( pat, ']' ); - char* ptr; - if( *pat == '[' && end != NULL ) - { - if( end == pat + 1 ) - { - end = strchr( pat + 2, ']' ); - if( end == NULL ) - return( 0 ); - - } // fi - - if( end - pat == 4 && pat[ 2 ] == '-' && pat[ 1 ] <= pattern[ 3 ] ) - { - if( *target >= pat[ 1 ] && *target <= pat[ 3 ] ) - return( 5 ); - else - return( 0 ); - - } // fi - - ptr = strchr( pat + 1, *target ); - if( ptr != NULL && ptr < end ) - return( end - pat + 1 ); - else - return( 0 ); - - } // fi - - if( *pat == '?' && *target != 0 ) - return( 1 ); - if( *pat == '*' ) - return( 0 ); - if( *target == 0 || *pat == 0 ) - return( 0 ); - if( *target == *pat ) - return( 1 ); - return( 0 ); -} - -// ------------------------------------------------------------------------- -bool cpPlugins::OS::FileSystem:: -Glob( const std::string& line, const std::string& pattern ) -{ - const char* target = line.c_str( ); - const char* pat = pattern.c_str( ); - int gobble; - - while( ( gobble = GlobMatch( target, pat ) ) ) - { - target++; - pat += gobble; - - } // elihw - if( *target == 0 && *pat == 0 ) - return( true ); - else if( *pat == '*' ) - { - while( pat[ 1 ] == '*' ) - pat++; - if( pat[ 1 ] == 0 ) - return( true ); - while( *target ) - if( Glob( target++, pat + 1 ) ) - return( 1 ); - - } // fi - return( false ); -} - -// ------------------------------------------------------------------------- -bool cpPlugins::OS::FileSystem:: -Read( std::string& buffer, const std::string& fname ) -{ - buffer = ""; - std::ifstream file_stream( fname.c_str( ) ); - if( !file_stream ) - return( false ); - file_stream.seekg( 0, std::ios::end ); - buffer.reserve( ( unsigned int )( file_stream.tellg( ) ) ); - file_stream.seekg( 0, std::ios::beg ); - buffer.assign( - ( std::istreambuf_iterator< char >( file_stream ) ), - std::istreambuf_iterator< char >( ) - ); - file_stream.close( ); - return( true ); -} - -// ------------------------------------------------------------------------- -bool cpPlugins::OS::FileSystem:: -Write( const std::string& buffer, const std::string& fname ) -{ - std::ofstream file_stream( fname.c_str( ), std::ofstream::binary ); - if( !file_stream ) - return( false ); - file_stream.write( buffer.c_str( ), buffer.size( ) ); - return( true ); -} - -// eof - $RCSfile$