Skip to content

Commit 53cdf19

Browse files
authored
Merge pull request #947 from Geode-solutions/fix/expand-folders
fix(Filename): expand predefined folders
2 parents 749a021 + b4b155f commit 53cdf19

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

include/geode/basic/detail/geode_input_impl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ namespace geode
6868
absl::AsciiStrToLower( extension_from_filename( filename ) );
6969
OPENGEODE_EXCEPTION( Factory::has_creator( extension ),
7070
"Unknown extension: ", extension );
71-
return Factory::create( extension, filename );
71+
return Factory::create(
72+
extension, expand_predefined_folders( filename ) );
7273
}
7374

7475
template < typename Factory, typename... Args >

include/geode/basic/detail/geode_output_impl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ namespace geode
4949
absl::AsciiStrToLower( extension_from_filename( filename ) );
5050
OPENGEODE_EXCEPTION( Factory::has_creator( extension ),
5151
"Unknown extension: ", extension );
52-
return Factory::create( extension, filename );
52+
return Factory::create(
53+
extension, expand_predefined_folders( filename ) );
5354
}
5455

5556
template < typename Factory, typename Object >

include/geode/basic/filename.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,7 @@ namespace geode
4141

4242
absl::string_view opengeode_basic_api extension_from_filename(
4343
absl::string_view filename );
44+
45+
std::string opengeode_basic_api expand_predefined_folders(
46+
absl::string_view path );
4447
} // namespace geode

include/geode/basic/io.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <absl/strings/string_view.h>
2828

2929
#include <geode/basic/common.h>
30+
#include <geode/basic/filename.h>
3031
#include <geode/basic/logger.h>
3132

3233
namespace geode
@@ -42,10 +43,13 @@ namespace geode
4243
}
4344

4445
protected:
45-
IOFile( absl::string_view filename ) : filename_( filename ) {}
46+
IOFile( absl::string_view filename )
47+
: filename_( expand_predefined_folders( filename ) )
48+
{
49+
}
4650

4751
private:
48-
absl::string_view filename_;
52+
std::string filename_;
4953
};
5054

5155
template < typename Factory >

src/geode/basic/filename.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#include <geode/basic/filename.h>
2525

26+
#include <absl/strings/string_view.h>
27+
2628
#include <ghc/filesystem.hpp>
2729

2830
namespace geode
@@ -55,4 +57,17 @@ namespace geode
5557
{
5658
return filename.substr( filename.find_last_of( '.' ) + 1 );
5759
}
60+
61+
std::string expand_predefined_folders( absl::string_view path )
62+
{
63+
if( path.empty() )
64+
{
65+
return to_string( path );
66+
}
67+
if( path[0] == '~' )
68+
{
69+
return absl::StrCat( std::getenv( "HOME" ), path.substr( 1 ) );
70+
}
71+
return to_string( path );
72+
}
5873
} // namespace geode

0 commit comments

Comments
 (0)