diff -r 4679f67a8324 -r 7471529c0d11 src/PlainFilesystemCommand.h --- a/src/PlainFilesystemCommand.h Fri Jan 24 16:53:31 2020 +0100 +++ b/src/PlainFilesystemCommand.h Fri Jan 24 21:05:10 2020 +0100 @@ -41,26 +41,10 @@ string_t relationName = fetchRelationName(&configuration); writeHeader(writer.get(), attributeFinders, relationName, &configuration.fields); - + for (std::stringstream originalName; readNext(input, originalName); reset(originalName)) { - fs::path file(originalName.str().empty() ? "." : originalName.str()); // interpret empty string as current directory (e.g. result of: find -printf '%P\0') - bool exists = false; - - try { - exists = fs::exists(file); - } catch (const fs::filesystem_error& e) { - // we probably do not have permissions to given directory → pretend that the file does not exist - } - - for (auto& finder : attributeFinders) finder.second->startFile(file, originalName.str(), exists); - - for (RequestedField field : configuration.fields) { - std::shared_ptr finder = attributeFinders[field.group]; // should not be nullptr, because already checked while writing the relation metadata - finder->writeField(writer.get(), relationName, field); - } - - for (auto& finder : attributeFinders) finder.second->endFile(); + processSingleFile(writer, originalName, attributeFinders, configuration, relationName); } } };