Index: ui/file_manager/zip_archiver/unpacker/cpp/compressor_archive_libarchive.cc |
diff --git a/ui/file_manager/zip_archiver/unpacker/cpp/compressor_archive_libarchive.cc b/ui/file_manager/zip_archiver/unpacker/cpp/compressor_archive_libarchive.cc |
deleted file mode 100644 |
index 92ac415c33ed5aca13d3606d0bba7c6fbe51bb56..0000000000000000000000000000000000000000 |
--- a/ui/file_manager/zip_archiver/unpacker/cpp/compressor_archive_libarchive.cc |
+++ /dev/null |
@@ -1,147 +0,0 @@ |
-// Copyright 2017 The Chromium OS Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "compressor_archive_libarchive.h" |
- |
-#include <cerrno> |
-#include <cstring> |
- |
-#include "archive_entry.h" |
-#include "ppapi/cpp/logging.h" |
- |
-namespace { |
- // Nothing to do here because JavaScript takes care of file open operations. |
- int CustomArchiveOpen(archive* archive_object, void* client_data) { |
- return ARCHIVE_OK; |
- } |
- |
- // Called when any data chunk must be written on the archive. It copies data |
- // from the given buffer processed by libarchive to an array buffer and passes |
- // it to compressor_stream. |
- ssize_t CustomArchiveWrite(archive* archive_object, void* client_data, |
- const void* buffer, size_t length) { |
- CompressorArchiveLibarchive* compressor_libarchive = |
- static_cast<CompressorArchiveLibarchive*>(client_data); |
- |
- const char* char_buffer = static_cast<const char*>(buffer); |
- |
- // Copy the data in buffer to array_buffer. |
- PP_DCHECK(length > 0); |
- pp::VarArrayBuffer array_buffer(length); |
- char* array_buffer_data = static_cast<char*>(array_buffer.Map()); |
- memcpy(array_buffer_data, char_buffer, length); |
- array_buffer.Unmap(); |
- |
- ssize_t written_bytes = |
- compressor_libarchive->compressor_stream()->Write(length, array_buffer); |
- |
- // Negative written_bytes represents an error. |
- if (written_bytes < 0) { |
- // When writing fails, archive_set_error() should be called and -1 should |
- // be returned. |
- archive_set_error( |
- compressor_libarchive->archive(), EIO, "Failed to write a chunk."); |
- return -1; |
- } |
- return written_bytes; |
- } |
- |
- // Nothing to do here because JavaScript takes care of file close operations. |
- int CustomArchiveClose(archive* archive_object, void* client_data) { |
- return ARCHIVE_OK; |
- } |
-} |
- |
-CompressorArchiveLibarchive::CompressorArchiveLibarchive( |
- CompressorStream* compressor_stream) |
- : CompressorArchive(compressor_stream), |
- compressor_stream_(compressor_stream) { |
- destination_buffer_ = |
- new char[compressor_archive_constants::kMaximumDataChunkSize]; |
-} |
- |
-CompressorArchiveLibarchive::~CompressorArchiveLibarchive() { |
- delete destination_buffer_; |
-} |
- |
-void CompressorArchiveLibarchive::CreateArchive() { |
- archive_ = archive_write_new(); |
- archive_write_set_format_zip(archive_); |
- |
- // Passing 1 as the second argument causes the final chunk not to be padded. |
- archive_write_set_bytes_in_last_block(archive_, 1); |
- archive_write_set_bytes_per_block( |
- archive_, compressor_archive_constants::kMaximumDataChunkSize); |
- archive_write_open(archive_, this, CustomArchiveOpen, |
- CustomArchiveWrite, CustomArchiveClose); |
-} |
- |
-void CompressorArchiveLibarchive::AddToArchive( |
- const std::string& filename, |
- int64_t file_size, |
- time_t modification_time, |
- bool is_directory) { |
- entry = archive_entry_new(); |
- |
- archive_entry_set_pathname(entry, filename.c_str()); |
- archive_entry_set_size(entry, file_size); |
- archive_entry_set_mtime(entry, modification_time, 0 /* millisecond */); |
- |
- if (is_directory) { |
- archive_entry_set_filetype(entry, AE_IFDIR); |
- archive_entry_set_perm( |
- entry, compressor_archive_constants::kDirectoryPermission); |
- } else { |
- archive_entry_set_filetype(entry, AE_IFREG); |
- archive_entry_set_perm( |
- entry, compressor_archive_constants::kFilePermission); |
- } |
- archive_write_header(archive_, entry); |
- // If archive_errno() returns 0, the header was written correctly. |
- if (archive_errno(archive_) != 0) { |
- CloseArchive(true /* hasError */); |
- return; |
- } |
- |
- if (!is_directory) { |
- int64_t remaining_size = file_size; |
- while (remaining_size > 0) { |
- int64_t chunk_size = std::min(remaining_size, |
- compressor_archive_constants::kMaximumDataChunkSize); |
- PP_DCHECK(chunk_size > 0); |
- |
- int64_t read_bytes = |
- compressor_stream_->Read(chunk_size, destination_buffer_); |
- // Negative read_bytes indicates an error occurred when reading chunks. |
- if (read_bytes < 0) { |
- CloseArchive(true /* hasError */); |
- break; |
- } |
- |
- int64_t written_bytes = |
- archive_write_data(archive_, destination_buffer_, read_bytes); |
- // If archive_errno() returns 0, the buffer was written correctly. |
- if (archive_errno(archive_) != 0) { |
- CloseArchive(true /* hasError */); |
- break; |
- } |
- PP_DCHECK(written_bytes > 0); |
- |
- remaining_size -= written_bytes; |
- } |
- } |
- |
- archive_entry_free(entry); |
-} |
- |
-void CompressorArchiveLibarchive::CloseArchive(bool has_error) { |
- // If has_error is true, mark the archive object as being unusable and |
- // release resources without writing no more data on the archive. |
- if (has_error) |
- archive_write_fail(archive_); |
- if (archive_) { |
- archive_write_free(archive_); |
- archive_ = NULL; |
- } |
-} |