37 return "SgExternalFilter";
53 if ((p=popen(qPrintable(cmd +
" \"" + fileName +
"\""), popenFlag)))
55 file.open(p, d==
FLTD_Input?QIODevice::ReadOnly:(QIODevice::WriteOnly|QIODevice::Truncate));
60 "::openFlt(): got an error: " + QString(strerror(errno)));
87 QString strWrite(
"QWERTY1234567890qwerty"), strRead, tmpNam;
91 const char *sFileTemplate=
"/tmp/SgLib_XXXXXX";
92 char *tmpl=strdup(sFileTemplate);
113 if (unlink(qPrintable(tmpNam)) == -1)
115 "::selfCheck(): file \"" + tmpNam +
"\" cannot be deleted: " + QString(strerror(errno)));
121 return strWrite==strRead;
138 return "SgIoExtFilterHandler";
146 addFilter(
"GZIP",
"gz",
"gzip -dc",
"gzip -c >");
147 addFilter(
"BZIP2",
"bz2",
"bzip2 -dc",
"bzip2 -c >");
156 for (QMap<QString, const SgIoExternalFilter*>::iterator it=
filterByExt_.begin();
170 "::addFilter(): the filter is NULL");
176 "::addFilter(): the default file extension of the filter is empty");
183 "\" already registered");
199 "::removeFilter(): the filter is NULL");
205 "::removeFilter(): the default file extension of the filter is empty");
212 "\" is not registered");
226 if (!extension.size())
229 "::removeFilter(): the default file extension is empty");
236 "\" is not registered");
254 int idx=fileName.lastIndexOf(
'.');
255 QString ext(-1<idx?fileName.mid(idx + 1):
"");
270 return filter->
openFlt(fileName, file, ts, d);
273 file.setFileName(fileName);
274 if (file.open(d==
FLTD_Input?QIODevice::ReadOnly:(QIODevice::WriteOnly|QIODevice::Truncate)))
279 "::openFlt(): cannot open file \"" + file.fileName() +
"\"");
SgIoExtFilterHandler compressors
bool addFilter(const SgIoExternalFilter *filter)
static const QString className()
const SgIoExternalFilter * lookupFilterByFileName(const QString &fileName)
bool removeFilter(const SgIoExternalFilter *filter)
QMap< QString, const SgIoExternalFilter * > filterByExt_
FILE * openFlt(const QString &fileName, QFile &file, QTextStream &ts, FilterDirection)
const QString & getDefaultExtension() const
static void closeFlt(FILE *&p, QFile &file, QTextStream &ts)
FILE * openFlt(const QString &fileName, QFile &file, QTextStream &ts, FilterDirection) const
static const QString className()
virtual void write(LogLevel, quint32, const QString &, bool=false)