Add parameter 'use_exact_name' to sg_gzifstream's constructor and open() method
This allows one to be sure about which file is opened.
This commit is contained in:
parent
11c6e5bf04
commit
7837bd0e11
@ -43,10 +43,11 @@ sg_gzifstream::sg_gzifstream()
|
||||
//
|
||||
// Open a possibly gzipped file for reading.
|
||||
//
|
||||
sg_gzifstream::sg_gzifstream( const SGPath& name, ios_openmode io_mode )
|
||||
sg_gzifstream::sg_gzifstream( const SGPath& name, ios_openmode io_mode,
|
||||
bool use_exact_name )
|
||||
: istream(&gzbuf)
|
||||
{
|
||||
this->open( name, io_mode );
|
||||
this->open( name, io_mode, use_exact_name );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -62,17 +63,20 @@ sg_gzifstream::sg_gzifstream( int fd, ios_openmode io_mode )
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Open a possibly gzipped file for reading.
|
||||
// If the initial open fails and the filename has a ".gz" extension then
|
||||
// remove the extension and try again.
|
||||
// If the initial open fails and the filename doesn't have a ".gz" extension
|
||||
// then append ".gz" and try again.
|
||||
// If 'use_exact_name' is true, just try to open the indicated file, nothing
|
||||
// else. Otherwise:
|
||||
// - if the initial open fails and the filename has a ".gz" extension, then
|
||||
// remove it and try again;
|
||||
// - if the initial open fails and the filename doesn't have a ".gz"
|
||||
// extension, then append ".gz" and try again.
|
||||
//
|
||||
void
|
||||
sg_gzifstream::open( const SGPath& name, ios_openmode io_mode )
|
||||
sg_gzifstream::open( const SGPath& name, ios_openmode io_mode,
|
||||
bool use_exact_name )
|
||||
{
|
||||
std::string s = name.utf8Str();
|
||||
gzbuf.open( s.c_str(), io_mode );
|
||||
if ( ! gzbuf.is_open() )
|
||||
if ( ! (gzbuf.is_open() || use_exact_name) )
|
||||
{
|
||||
if ( s.substr( s.length() - 3, 3 ) == ".gz" )
|
||||
{
|
||||
|
@ -54,13 +54,15 @@ public:
|
||||
sg_gzifstream();
|
||||
|
||||
/**
|
||||
* Constructor that attempt to open a file with and without
|
||||
* ".gz" extension.
|
||||
* Constructor that attempts to open a file.
|
||||
* @param name name of file
|
||||
* @param io_mode file open mode(s) "or'd" together
|
||||
* @param use_exact_name if false, try to add or remove a ".gz" extension
|
||||
* in case the indicated file can't be opened
|
||||
*/
|
||||
sg_gzifstream( const SGPath& name,
|
||||
ios_openmode io_mode = ios_in | ios_binary );
|
||||
ios_openmode io_mode = ios_in | ios_binary,
|
||||
bool use_exact_name = false );
|
||||
|
||||
/**
|
||||
* Constructor that attaches itself to an existing file descriptor.
|
||||
@ -70,12 +72,15 @@ public:
|
||||
sg_gzifstream( int fd, ios_openmode io_mode = ios_in|ios_binary );
|
||||
|
||||
/**
|
||||
* Attempt to open a file with and without ".gz" extension.
|
||||
* Attempt to open a file.
|
||||
* @param name name of file
|
||||
* @param io_mode file open mode(s) "or'd" together
|
||||
* @param use_exact_name if false, try to add or remove a ".gz" extension
|
||||
* in case the indicated file can't be opened
|
||||
*/
|
||||
void open( const SGPath& name,
|
||||
ios_openmode io_mode = ios_in|ios_binary );
|
||||
ios_openmode io_mode = ios_in|ios_binary,
|
||||
bool use_exact_name = false );
|
||||
|
||||
/**
|
||||
* Attach to an existing file descriptor.
|
||||
|
Loading…
Reference in New Issue
Block a user