diff options
author | Clifford Wolf <clifford@clifford.at> | 2019-09-27 09:57:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-27 09:57:28 +0200 |
commit | 7bde555481e4492bb0d133ea6fcec59af95fbbbe (patch) | |
tree | 8fedcce7a8b2b3e05dff670bf7ab2b0fa4cc7a96 | |
parent | 143f82def2030527a4fa92b7ba60b704aad08e53 (diff) | |
parent | 435300f9304a230680bdc054d0f0b3a3205b05f7 (diff) | |
download | yosys-7bde555481e4492bb0d133ea6fcec59af95fbbbe.tar.gz yosys-7bde555481e4492bb0d133ea6fcec59af95fbbbe.tar.bz2 yosys-7bde555481e4492bb0d133ea6fcec59af95fbbbe.zip |
Merge pull request #1404 from YosysHQ/fix_gzip_macos
Make read/write gzip files on macos works, fixes #1357
-rw-r--r-- | kernel/register.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/register.cc b/kernel/register.cc index 1fd1bad1d..8131fa279 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -48,7 +48,7 @@ using zlib to write gzip-compressed data every time the stream is flushed. */ class gzip_ostream : public std::ostream { public: - gzip_ostream() + gzip_ostream() : std::ostream(nullptr) { rdbuf(&outbuf); } @@ -71,7 +71,7 @@ private: str(""); return 0; } - ~gzip_streambuf() + virtual ~gzip_streambuf() { sync(); gzclose(gzf); @@ -498,7 +498,15 @@ void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<s if (f != NULL) { // Check for gzip magic unsigned char magic[3]; - int n = readsome(*ff, reinterpret_cast<char*>(magic), 3); + int n = 0; + while (n < 3) + { + int c = ff->get(); + if (c != EOF) { + magic[n] = (unsigned char) c; + } + n++; + } if (n == 3 && magic[0] == 0x1f && magic[1] == 0x8b) { #ifdef YOSYS_ENABLE_ZLIB log("Found gzip magic in file `%s', decompressing using zlib.\n", filename.c_str()); |