diff options
Diffstat (limited to 'decoder')
| -rw-r--r-- | decoder/filelib.h | 10 | ||||
| -rw-r--r-- | decoder/gzstream.cc | 6 | ||||
| -rwxr-xr-x | decoder/stringlib_test.cc | 2 | 
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()); | 
