Filesystem abstraction prototype - Filesystem::Cwd()

This commit is contained in:
Emmanuel BENOîT 2017-12-26 13:32:53 +01:00
parent f5b4113806
commit 2e8d460f1f
2 changed files with 24 additions and 3 deletions

View file

@ -5,10 +5,12 @@
#include <p-filesystem.hh> #include <p-filesystem.hh>
using namespace ebcl; using namespace ebcl;
#ifdef _WIN32 #ifdef _WIN32
# define M_PATHSEP_ '\\' # define M_PATHSEP_ '\\'
#else #else
# define M_PATHSEP_ '/' # define M_PATHSEP_ '/'
# include <unistd.h>
#endif #endif
@ -324,3 +326,21 @@ T_FSPath T_FSPath::canonical( ) const noexcept
} }
return np; return np;
} }
/*= Filesystem ===============================================================*/
T_FSPath Filesystem::Cwd( ) noexcept
{
// TODO windows version
T_Buffer< char > buffer{ 256 };
while ( getcwd( &buffer[ 0 ] , buffer.bytes( ) ) == nullptr ) {
assert( errno == ERANGE );
buffer.resize( buffer.size( ) + 256 );
}
T_FSPath path{ &buffer[ 0 ] };
assert( path.isValid( ) );
return path;
}

View file

@ -116,11 +116,12 @@ M_LSHIFT_OP( T_StringBuilder , T_FSPath const& );
/*= FILESYSTEM ===============================================================*/ /*= FILESYSTEM ===============================================================*/
class T_Filesystem class Filesystem final
{ {
Filesystem( ) = delete;
public: public:
// Return the absolute path to the current directory // Return the absolute path to the current working directory
static T_FSPath currentDirectory( ) noexcept; static T_FSPath Cwd( ) noexcept;
}; };