From d0eb376520db8fc2f95547f272fe4727f247d0fa Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Boric Date: Sat, 15 May 2021 12:38:40 +0200 Subject: LibArchive: Move method implementations away from header --- Userland/Libraries/LibArchive/CMakeLists.txt | 1 + Userland/Libraries/LibArchive/Tar.cpp | 33 ++++++++++++++++++++++++++++ Userland/Libraries/LibArchive/Tar.h | 20 ----------------- 3 files changed, 34 insertions(+), 20 deletions(-) create mode 100644 Userland/Libraries/LibArchive/Tar.cpp diff --git a/Userland/Libraries/LibArchive/CMakeLists.txt b/Userland/Libraries/LibArchive/CMakeLists.txt index b6fef50a50..98ffaffb6b 100644 --- a/Userland/Libraries/LibArchive/CMakeLists.txt +++ b/Userland/Libraries/LibArchive/CMakeLists.txt @@ -1,4 +1,5 @@ set(SOURCES + Tar.cpp TarStream.cpp Zip.cpp ) diff --git a/Userland/Libraries/LibArchive/Tar.cpp b/Userland/Libraries/LibArchive/Tar.cpp new file mode 100644 index 0000000000..47626ed93d --- /dev/null +++ b/Userland/Libraries/LibArchive/Tar.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2020, Peter Elliott + * Copyright (c) 2021, Idan Horowitz + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "Tar.h" + +namespace Archive { + +unsigned TarFileHeader::expected_checksum() const +{ + auto checksum = 0u; + const u8* u8_this = reinterpret_cast(this); + const u8* u8_m_checksum = reinterpret_cast(&m_checksum); + for (auto i = 0u; i < sizeof(TarFileHeader); ++i) { + if (u8_this + i >= u8_m_checksum && u8_this + i < u8_m_checksum + sizeof(m_checksum)) { + checksum += ' '; + } else { + checksum += u8_this[i]; + } + } + return checksum; +} + +void TarFileHeader::calculate_checksum() +{ + memset(m_checksum, ' ', sizeof(m_checksum)); + VERIFY(String::formatted("{:06o}", expected_checksum()).copy_characters_to_buffer(m_checksum, sizeof(m_checksum))); +} + +} diff --git a/Userland/Libraries/LibArchive/Tar.h b/Userland/Libraries/LibArchive/Tar.h index de3118b983..8e05ce11a7 100644 --- a/Userland/Libraries/LibArchive/Tar.h +++ b/Userland/Libraries/LibArchive/Tar.h @@ -113,24 +113,4 @@ size_t TarFileHeader::get_tar_field(const char (&field)[N]) return value; } -unsigned TarFileHeader::expected_checksum() const -{ - auto checksum = 0u; - const u8* u8_this = reinterpret_cast(this); - const u8* u8_m_checksum = reinterpret_cast(&m_checksum); - for (auto i = 0u; i < sizeof(TarFileHeader); ++i) { - if (u8_this + i >= u8_m_checksum && u8_this + i < u8_m_checksum + sizeof(m_checksum)) { - checksum += ' '; - } else { - checksum += u8_this[i]; - } - } - return checksum; -} - -void TarFileHeader::calculate_checksum() -{ - memset(m_checksum, ' ', sizeof(m_checksum)); - VERIFY(String::formatted("{:06o}", expected_checksum()).copy_characters_to_buffer(m_checksum, sizeof(m_checksum))); -} } -- cgit v1.2.3