Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Unified Diff: ui/file_manager/zip_archiver/unpacker/cpp/compressor_archive_libarchive.cc

Issue 2804453002: Move files from zip_archiver/unpacker/ to zip_archiver/. (Closed)
Patch Set: Move files from zip_archiver/unpacker/ to zip_archiver/. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698