mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/zlib] Fix setting mtime to zero in GzipWriter
Before this change, it was not possible to write out zero for the
timestamp part of a Gzip file's header, as calling GzipWriter#mtime with
zero was ignored.
Judging from the docs for `GzipWriter#mtime=`, it should be possible to
indicate that no timestamp is available by calling the method with zero.
310be39cac
This commit is contained in:
parent
d6ed7a984c
commit
0aaa15f636
2 changed files with 14 additions and 1 deletions
|
@ -2230,6 +2230,7 @@ struct gzfile {
|
||||||
#define GZFILE_FLAG_SYNC ZSTREAM_FLAG_UNUSED
|
#define GZFILE_FLAG_SYNC ZSTREAM_FLAG_UNUSED
|
||||||
#define GZFILE_FLAG_HEADER_FINISHED (ZSTREAM_FLAG_UNUSED << 1)
|
#define GZFILE_FLAG_HEADER_FINISHED (ZSTREAM_FLAG_UNUSED << 1)
|
||||||
#define GZFILE_FLAG_FOOTER_FINISHED (ZSTREAM_FLAG_UNUSED << 2)
|
#define GZFILE_FLAG_FOOTER_FINISHED (ZSTREAM_FLAG_UNUSED << 2)
|
||||||
|
#define GZFILE_FLAG_MTIME_IS_SET (ZSTREAM_FLAG_UNUSED << 3)
|
||||||
|
|
||||||
#define GZFILE_IS_FINISHED(gz) \
|
#define GZFILE_IS_FINISHED(gz) \
|
||||||
(ZSTREAM_IS_FINISHED(&(gz)->z) && ZSTREAM_BUF_FILLED(&(gz)->z) == 0)
|
(ZSTREAM_IS_FINISHED(&(gz)->z) && ZSTREAM_BUF_FILLED(&(gz)->z) == 0)
|
||||||
|
@ -2516,7 +2517,7 @@ gzfile_make_header(struct gzfile *gz)
|
||||||
if (!NIL_P(gz->comment)) {
|
if (!NIL_P(gz->comment)) {
|
||||||
flags |= GZ_FLAG_COMMENT;
|
flags |= GZ_FLAG_COMMENT;
|
||||||
}
|
}
|
||||||
if (gz->mtime == 0) {
|
if (!(gz->z.flags & GZFILE_FLAG_MTIME_IS_SET)) {
|
||||||
gz->mtime = time(0);
|
gz->mtime = time(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3246,6 +3247,7 @@ rb_gzfile_set_mtime(VALUE obj, VALUE mtime)
|
||||||
|
|
||||||
val = rb_Integer(mtime);
|
val = rb_Integer(mtime);
|
||||||
gz->mtime = NUM2UINT(val);
|
gz->mtime = NUM2UINT(val);
|
||||||
|
gz->z.flags |= GZFILE_FLAG_MTIME_IS_SET;
|
||||||
|
|
||||||
return mtime;
|
return mtime;
|
||||||
}
|
}
|
||||||
|
|
|
@ -488,6 +488,17 @@ if defined? Zlib
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_zero_mtime
|
||||||
|
sio = StringIO.new
|
||||||
|
gz = Zlib::GzipWriter.new(sio)
|
||||||
|
gz.mtime = 0
|
||||||
|
gz.write("Hi")
|
||||||
|
gz.close
|
||||||
|
reading_io = StringIO.new(sio.string)
|
||||||
|
reader = Zlib::GzipReader.new(reading_io)
|
||||||
|
assert_equal(0, reader.mtime.to_i)
|
||||||
|
end
|
||||||
|
|
||||||
def test_level
|
def test_level
|
||||||
Tempfile.create("test_zlib_gzip_file_level") {|t|
|
Tempfile.create("test_zlib_gzip_file_level") {|t|
|
||||||
t.close
|
t.close
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue