input/Open: use OpenLocalInputStream()
Make the "open" method of plugins "file" and "archive" dummy methods that always fail. Instead, let InputStream::Open() hard-code access to these two plugins by using OpenLocalInputStream(). This allows simplifyin the algorithm for falling back to probing archive plugins.
This commit is contained in:
@@ -71,25 +71,14 @@ OpenArchiveInputStream(Path path, Mutex &mutex, Cond &cond, Error &error)
|
||||
return is;
|
||||
}
|
||||
|
||||
/**
|
||||
* select correct archive plugin to handle the input stream
|
||||
* may allow stacking of archive plugins. for example for handling
|
||||
* tar.gz a gzip handler opens file (through inputfile stream)
|
||||
* then it opens a tar handler and sets gzip inputstream as
|
||||
* parent_stream so tar plugin fetches file data from gzip
|
||||
* plugin and gzip fetches file from disk
|
||||
*/
|
||||
static InputStream *
|
||||
input_archive_open(const char *pathname,
|
||||
Mutex &mutex, Cond &cond,
|
||||
Error &error)
|
||||
input_archive_open(gcc_unused const char *filename,
|
||||
gcc_unused Mutex &mutex, gcc_unused Cond &cond,
|
||||
gcc_unused Error &error)
|
||||
{
|
||||
if (!PathTraitsFS::IsAbsolute(pathname))
|
||||
return nullptr;
|
||||
/* dummy method; use OpenArchiveInputStream() instead */
|
||||
|
||||
/* TODO: the parameter is UTF-8, not filesystem charset */
|
||||
return OpenArchiveInputStream(Path::FromFS(pathname),
|
||||
mutex, cond, error);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const InputPlugin input_plugin_archive = {
|
||||
|
||||
@@ -68,9 +68,8 @@ OpenFileInputStream(Path path,
|
||||
{
|
||||
const int fd = OpenFile(path, O_RDONLY|O_BINARY, 0);
|
||||
if (fd < 0) {
|
||||
if (errno != ENOTDIR)
|
||||
error.FormatErrno("Failed to open \"%s\"",
|
||||
path.c_str());
|
||||
error.FormatErrno("Failed to open \"%s\"",
|
||||
path.c_str());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -96,17 +95,13 @@ OpenFileInputStream(Path path,
|
||||
}
|
||||
|
||||
static InputStream *
|
||||
input_file_open(const char *filename,
|
||||
Mutex &mutex, Cond &cond,
|
||||
Error &error)
|
||||
input_file_open(gcc_unused const char *filename,
|
||||
gcc_unused Mutex &mutex, gcc_unused Cond &cond,
|
||||
gcc_unused Error &error)
|
||||
{
|
||||
if (!PathTraitsFS::IsAbsolute(filename))
|
||||
return nullptr;
|
||||
/* dummy method; use OpenFileInputStream() instead */
|
||||
|
||||
/* TODO: the parameter is UTF-8, not filesystem charset */
|
||||
const Path path = Path::FromFS(filename);
|
||||
|
||||
return OpenFileInputStream(path, mutex, cond, error);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
Reference in New Issue
Block a user