diff options
| author | ruki <[email protected]> | 2022-05-21 11:14:47 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-05-21 11:14:47 +0800 |
| commit | 6b90b7481d63f5d0c6d9211c1be1ed8dd05ed99e (patch) | |
| tree | c098a23f1a5e47f3467b0494ac56da2e8e1e9a8a | |
| parent | 6eb2c52ef4085dfe1244b2b9f23bdc3a8e52ec28 (diff) | |
improve stream
| -rw-r--r-- | xmake/modules/private/service/stream.lua | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/xmake/modules/private/service/stream.lua b/xmake/modules/private/service/stream.lua index 78527927f..c8f58efad 100644 --- a/xmake/modules/private/service/stream.lua +++ b/xmake/modules/private/service/stream.lua @@ -356,23 +356,32 @@ function stream:recv_file(filepath) if size == 0 then return size end + local result + local tmpfile = os.tmpfile({ramdisk = false}) if bit.band(flags, HEADER_FLAG_COMPRESS_LZ4) == HEADER_FLAG_COMPRESS_LZ4 then - return self:_recv_compressed_file(lz4.decompress_stream(), filepath, size) - end - local buff = self._BUFF - local recv = 0 - local file = io.open(filepath, "wb") - while recv < size do - local data = self:recv(buff, math.min(buff:size(), size - recv)) - if data then - file:write(data) - recv = recv + data:size() + result = self:_recv_compressed_file(lz4.decompress_stream(), tmpfile, size) + else + local buff = self._BUFF + local recv = 0 + local file = io.open(tmpfile, "wb") + while recv < size do + local data = self:recv(buff, math.min(buff:size(), size - recv)) + if data then + file:write(data) + recv = recv + data:size() + end + end + file:close() + if recv == size then + result = recv end end - file:close() - if recv == size then - return recv + if result then + os.mv(tmpfile, filepath) + else + os.tryrm(tmpfile) end + return result end end |
