[Bug libstdc++/98001] ext/stdio_filebuf/char/79820.cc is broken

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Nov 26 11:24:17 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98001

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Yes, when the filebuf is given a FILE* it doesn't own it, and so the destructor
doesn't touch it:

  __basic_file<char>*
  __basic_file<char>::close()
  {
    __basic_file* __ret = static_cast<__basic_file*>(NULL);
    if (this->is_open())
      {
        int __err = 0;
        if (_M_cfile_created)
          __err = fclose(_M_cfile);
        _M_cfile = 0;
        if (!__err)
          __ret = this;
      }
    return __ret;
  }

_M_cfile_created is only true when it's opened using a filename (because it
calls fopen) or a file descriptor (because it calls fdopen).


More information about the Gcc-bugs mailing list