fix dbl stream.end

This commit is contained in:
Mathias Buus 2023-06-20 12:56:25 +02:00
parent cd05668967
commit 9629b4ab86

20
pack.js
View file

@ -11,7 +11,7 @@ const END_OF_TAR = b4a.alloc(1024)
class Sink extends Writable { class Sink extends Writable {
constructor (pack, header, callback) { constructor (pack, header, callback) {
super({ mapWritable }) super({ mapWritable, eagerOpen: true })
this.written = 0 this.written = 0
this.header = header this.header = header
@ -49,6 +49,10 @@ class Sink extends Writable {
this._pack._encode(this.header) this._pack._encode(this.header)
} }
if (this._isVoid) {
this._finish()
}
cb(null) cb(null)
} }
@ -67,7 +71,10 @@ class Sink extends Writable {
this._pack._drain = cb this._pack._drain = cb
} }
_final (cb) { _finish () {
if (this._finished) return
this._finished = true
if (this._isLinkname) { if (this._isLinkname) {
this.header.linkname = this._linkname ? b4a.toString(this._linkname, 'utf-8') : '' this.header.linkname = this._linkname ? b4a.toString(this._linkname, 'utf-8') : ''
this._pack._encode(this.header) this._pack._encode(this.header)
@ -75,13 +82,15 @@ class Sink extends Writable {
overflow(this._pack, this.header.size) overflow(this._pack, this.header.size)
this._pack._done(this)
}
_final (cb) {
if (this.written !== this.header.size) { // corrupting tar if (this.written !== this.header.size) { // corrupting tar
return cb(new Error('Size mismatch')) return cb(new Error('Size mismatch'))
} }
this._pack._done(this) this._finish()
this._finished = true
cb(null) cb(null)
} }
@ -142,7 +151,6 @@ class Pack extends Readable {
} }
if (sink._isVoid) { if (sink._isVoid) {
sink.end()
return sink return sink
} }