summaryrefslogtreecommitdiff
path: root/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'decoder')
-rw-r--r--decoder/filelib.h10
-rw-r--r--decoder/gzstream.cc6
-rwxr-xr-xdecoder/stringlib_test.cc2
3 files changed, 11 insertions, 7 deletions
diff --git a/decoder/filelib.h b/decoder/filelib.h
index 85e1c29a..9f6bd0a9 100644
--- a/decoder/filelib.h
+++ b/decoder/filelib.h
@@ -58,9 +58,10 @@ class ReadFile : public BaseFile<std::istream> {
std::cerr << "File does not exist: " << filename << std::endl;
abort();
}
+ char const* file=filename_.c_str(); // just in case the gzstream keeps using the filename for longer than the constructor, e.g. inflateReset2. warning in valgrind that I'm hoping will disappear - it makes no sense.
ps_.reset(EndsWith(filename, ".gz") ?
- static_cast<std::istream*>(new igzstream(filename.c_str())) :
- static_cast<std::istream*>(new std::ifstream(filename.c_str())));
+ static_cast<std::istream*>(new igzstream(file)) :
+ static_cast<std::istream*>(new std::ifstream(file)));
if (!*ps_) {
std::cerr << "Failed to open " << filename << std::endl;
abort();
@@ -79,9 +80,10 @@ class WriteFile : public BaseFile<std::ostream> {
if (is_std()) {
ps_=PS(&std::cout,file_null_deleter());
} else {
+ char const* file=filename_.c_str(); // just in case the gzstream keeps using the filename for longer than the constructor, e.g. inflateReset2. warning in valgrind that I'm hoping will disappear - it makes no sense.
ps_.reset(EndsWith(filename, ".gz") ?
- static_cast<std::ostream*>(new ogzstream(filename.c_str())) :
- static_cast<std::ostream*>(new std::ofstream(filename.c_str())));
+ static_cast<std::ostream*>(new ogzstream(file)) :
+ static_cast<std::ostream*>(new std::ofstream(file)));
if (!*ps_) {
std::cerr << "Failed to open " << filename << std::endl;
abort();
diff --git a/decoder/gzstream.cc b/decoder/gzstream.cc
index 9678355b..88cd1bd2 100644
--- a/decoder/gzstream.cc
+++ b/decoder/gzstream.cc
@@ -51,14 +51,16 @@ gzstreambuf* gzstreambuf::open( const char* name, int open_mode) {
if ((mode & std::ios::ate) || (mode & std::ios::app)
|| ((mode & std::ios::in) && (mode & std::ios::out)))
return (gzstreambuf*)0;
- char fmode[10];
+ const int Nmode=10;
+ char fmode[Nmode];
char* fmodeptr = fmode;
if ( mode & std::ios::in)
*fmodeptr++ = 'r';
else if ( mode & std::ios::out)
*fmodeptr++ = 'w';
*fmodeptr++ = 'b';
- *fmodeptr = '\0';
+ while (fmodeptr<fmode+Nmode) // hopefully wil help valgrind
+ *fmodeptr++ = '\0';
file = gzopen( name, fmode);
if (!file) handle_gzerror();
if (file == 0)
diff --git a/decoder/stringlib_test.cc b/decoder/stringlib_test.cc
index ea39f30f..f66cdbeb 100755
--- a/decoder/stringlib_test.cc
+++ b/decoder/stringlib_test.cc
@@ -9,8 +9,8 @@ struct print {
}
};
+char p[]=" 1 are u 2 serious?";
int main(int argc, char *argv[]) {
- char *p=" 1 are u 2 serious?";
std::string const& w="verylongword";
VisitTokens(p,print());
VisitTokens(w,print());