From 267d5318e1cbf69a071b5188dda50310af2f2f8b Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Mon, 7 Oct 2019 14:44:17 +0200 Subject: Cleanup: Move padd_file function to libtar It's only ever used for padding tarballs. Signed-off-by: David Oberhollenzer --- lib/tar/Makemodule.am | 2 +- lib/tar/padd_file.c | 40 ++++++++++++++++++++++++++++++++++++++++ lib/tar/write_header.c | 4 ++-- lib/util/Makemodule.am | 3 +-- lib/util/padd_file.c | 42 ------------------------------------------ 5 files changed, 44 insertions(+), 47 deletions(-) create mode 100644 lib/tar/padd_file.c delete mode 100644 lib/util/padd_file.c (limited to 'lib') diff --git a/lib/tar/Makemodule.am b/lib/tar/Makemodule.am index 42f11ae..129d66f 100644 --- a/lib/tar/Makemodule.am +++ b/lib/tar/Makemodule.am @@ -2,7 +2,7 @@ libtar_a_SOURCES = lib/tar/read_header.c lib/tar/write_header.c lib/tar/skip.c libtar_a_SOURCES += lib/tar/number.c lib/tar/checksum.c lib/tar/cleanup.c libtar_a_SOURCES += lib/tar/read_sparse_map.c lib/tar/read_sparse_map_old.c libtar_a_SOURCES += lib/tar/base64.c lib/tar/urldecode.c lib/tar/internal.h -libtar_a_SOURCES += include/tar.h +libtar_a_SOURCES += lib/tar/padd_file.c include/tar.h libtar_a_CFLAGS = $(AM_CFLAGS) libtar_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/lib/tar/padd_file.c b/lib/tar/padd_file.c new file mode 100644 index 0000000..471370d --- /dev/null +++ b/lib/tar/padd_file.c @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * padd_file.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "config.h" +#include "tar.h" + +#include +#include + +int padd_file(int outfd, sqfs_u64 size) +{ + size_t padd_sz = size % TAR_RECORD_SIZE; + int status = -1; + sqfs_u8 *buffer; + + if (padd_sz == 0) + return 0; + + padd_sz = TAR_RECORD_SIZE - padd_sz; + + buffer = calloc(1, padd_sz); + if (buffer == NULL) + goto fail_errno; + + if (write_data("padding output file to block size", + outfd, buffer, padd_sz)) { + goto out; + } + + status = 0; +out: + free(buffer); + return status; +fail_errno: + perror("padding output file to block size"); + goto out; +} diff --git a/lib/tar/write_header.c b/lib/tar/write_header.c index 4c8caa2..14802c0 100644 --- a/lib/tar/write_header.c +++ b/lib/tar/write_header.c @@ -109,7 +109,7 @@ static int write_gnu_header(int fd, const struct stat *orig, return -1; } - return padd_file(fd, payload_len, 512); + return padd_file(fd, payload_len); } static size_t num_digits(size_t num) @@ -152,7 +152,7 @@ static int write_schily_xattr(int fd, const struct stat *orig, dprintf(fd, "%zu %s%s=%s\n", len, prefix, it->key, it->value); } - return padd_file(fd, total_size, 512); + return padd_file(fd, total_size); } int write_tar_header(int fd, const struct stat *sb, const char *name, diff --git a/lib/util/Makemodule.am b/lib/util/Makemodule.am index 58333ac..1ae931b 100644 --- a/lib/util/Makemodule.am +++ b/lib/util/Makemodule.am @@ -2,8 +2,7 @@ libutil_la_SOURCES = lib/util/write_data.c libutil_la_SOURCES += lib/util/read_data.c include/util.h libutil_la_SOURCES += lib/util/mkdir_p.c include/compat.h libutil_la_SOURCES += lib/util/str_table.c include/str_table.h -libutil_la_SOURCES += lib/util/dirstack.c lib/util/padd_file.c -libutil_la_SOURCES += lib/util/alloc.c +libutil_la_SOURCES += lib/util/dirstack.c lib/util/alloc.c libutil_la_SOURCES += lib/util/canonicalize_name.c libutil_la_CFLAGS = $(AM_CFLAGS) libutil_la_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/lib/util/padd_file.c b/lib/util/padd_file.c deleted file mode 100644 index 1803139..0000000 --- a/lib/util/padd_file.c +++ /dev/null @@ -1,42 +0,0 @@ -/* SPDX-License-Identifier: LGPL-3.0-or-later */ -/* - * padd_file.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "config.h" - -#include "sqfs/io.h" -#include "util.h" - -#include -#include - -int padd_file(int outfd, sqfs_u64 size, size_t blocksize) -{ - size_t padd_sz = size % blocksize; - int status = -1; - sqfs_u8 *buffer; - - if (padd_sz == 0) - return 0; - - padd_sz = blocksize - padd_sz; - - buffer = calloc(1, padd_sz); - if (buffer == NULL) - goto fail_errno; - - if (write_data("padding output file to block size", - outfd, buffer, padd_sz)) { - goto out; - } - - status = 0; -out: - free(buffer); - return status; -fail_errno: - perror("padding output file to block size"); - goto out; -} -- cgit v1.2.3