From a412425bca4bb90a7c1b35acac6b185158f3cd4f Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Tue, 5 Jul 2022 15:41:41 +0200 Subject: Cleanup: move source date epoch code back to libutil Signed-off-by: David Oberhollenzer --- include/util/util.h | 7 +++++ lib/fstree/Makemodule.am | 1 - lib/fstree/fstree.c | 1 + lib/fstree/internal.h | 7 ----- lib/fstree/source_date_epoch.c | 44 --------------------------- lib/util/Makemodule.am | 1 + lib/util/source_date_epoch.c | 44 +++++++++++++++++++++++++++ tests/libfstree/Makemodule.am | 16 ++++------ tests/libfstree/epoch.c | 67 ------------------------------------------ tests/libfstree/fstree_init.c | 1 + tests/libutil/Makemodule.am | 6 +++- tests/libutil/epoch.c | 67 ++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 131 insertions(+), 131 deletions(-) delete mode 100644 lib/fstree/source_date_epoch.c create mode 100644 lib/util/source_date_epoch.c delete mode 100644 tests/libfstree/epoch.c create mode 100644 tests/libutil/epoch.c diff --git a/include/util/util.h b/include/util/util.h index c18a558..6e34a82 100644 --- a/include/util/util.h +++ b/include/util/util.h @@ -62,4 +62,11 @@ SQFS_INTERNAL int canonicalize_name(char *filename); */ SQFS_INTERNAL bool is_filename_sane(const char *name, bool check_os_specific); +/* + If the environment variable SOURCE_DATE_EPOCH is set to a parsable number + that fits into an unsigned 32 bit value, return its value. Otherwise, + default to 0. + */ +SQFS_INTERNAL sqfs_u32 get_source_date_epoch(void); + #endif /* SQFS_UTIL_H */ diff --git a/lib/fstree/Makemodule.am b/lib/fstree/Makemodule.am index fec63b4..a72b820 100644 --- a/lib/fstree/Makemodule.am +++ b/lib/fstree/Makemodule.am @@ -4,7 +4,6 @@ libfstree_a_SOURCES += lib/fstree/post_process.c lib/fstree/get_path.c libfstree_a_SOURCES += lib/fstree/mknode.c lib/fstree/fstree_from_dir.c libfstree_a_SOURCES += lib/fstree/add_by_path.c lib/fstree/get_by_path.c libfstree_a_SOURCES += include/fstree.h lib/fstree/internal.h -libfstree_a_SOURCES += lib/fstree/source_date_epoch.c libfstree_a_SOURCES += lib/fstree/sort_by_file.c libfstree_a_CFLAGS = $(AM_CFLAGS) libfstree_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/lib/fstree/fstree.c b/lib/fstree/fstree.c index 7c00755..2ea5fa2 100644 --- a/lib/fstree/fstree.c +++ b/lib/fstree/fstree.c @@ -5,6 +5,7 @@ * Copyright (C) 2019 David Oberhollenzer */ #include "internal.h" +#include "util/util.h" #include #include diff --git a/lib/fstree/internal.h b/lib/fstree/internal.h index d14fb4f..b876e45 100644 --- a/lib/fstree/internal.h +++ b/lib/fstree/internal.h @@ -10,13 +10,6 @@ #include "config.h" #include "fstree.h" -/* - If the environment variable SOURCE_DATE_EPOCH is set to a parsable number - that fits into an unsigned 32 bit value, return its value. Otherwise, - default to 0. - */ -sqfs_u32 get_source_date_epoch(void); - void fstree_insert_sorted(tree_node_t *root, tree_node_t *n); #endif /* FSTREE_INTERNAL_H */ diff --git a/lib/fstree/source_date_epoch.c b/lib/fstree/source_date_epoch.c deleted file mode 100644 index 1efa688..0000000 --- a/lib/fstree/source_date_epoch.c +++ /dev/null @@ -1,44 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * source_date_epoch.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "internal.h" - -#include -#include -#include - -sqfs_u32 get_source_date_epoch(void) -{ - const char *str, *ptr; - sqfs_u32 x, tval = 0; - - str = getenv("SOURCE_DATE_EPOCH"); - - if (str == NULL || *str == '\0') - return 0; - - for (ptr = str; *ptr != '\0'; ++ptr) { - if (!isdigit(*ptr)) - goto fail_nan; - - x = (*ptr) - '0'; - - if (tval > (UINT32_MAX - x) / 10) - goto fail_ov; - - tval = tval * 10 + x; - } - - return tval; -fail_ov: - fprintf(stderr, "WARNING: SOURCE_DATE_EPOCH=%s does not fit into " - "32 bit integer\n", str); - return 0; -fail_nan: - fprintf(stderr, "WARNING: SOURCE_DATE_EPOCH=%s is not a positive " - "number\n", str); - return 0; -} diff --git a/lib/util/Makemodule.am b/lib/util/Makemodule.am index d37f2b1..b65ebda 100644 --- a/lib/util/Makemodule.am +++ b/lib/util/Makemodule.am @@ -12,6 +12,7 @@ libutil_a_SOURCES += lib/util/is_memory_zero.c libutil_a_SOURCES += lib/util/mkdir_p.c libutil_a_SOURCES += lib/util/canonicalize_name.c libutil_a_SOURCES += lib/util/filename_sane.c +libutil_a_SOURCES += lib/util/source_date_epoch.c libutil_a_CFLAGS = $(AM_CFLAGS) libutil_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/lib/util/source_date_epoch.c b/lib/util/source_date_epoch.c new file mode 100644 index 0000000..26e5530 --- /dev/null +++ b/lib/util/source_date_epoch.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: LGPL-3.0-or-later */ +/* + * source_date_epoch.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "util/util.h" + +#include +#include +#include + +sqfs_u32 get_source_date_epoch(void) +{ + const char *str, *ptr; + sqfs_u32 x, tval = 0; + + str = getenv("SOURCE_DATE_EPOCH"); + + if (str == NULL || *str == '\0') + return 0; + + for (ptr = str; *ptr != '\0'; ++ptr) { + if (!isdigit(*ptr)) + goto fail_nan; + + x = (*ptr) - '0'; + + if (tval > (UINT32_MAX - x) / 10) + goto fail_ov; + + tval = tval * 10 + x; + } + + return tval; +fail_ov: + fprintf(stderr, "WARNING: SOURCE_DATE_EPOCH=%s does not fit into " + "32 bit integer\n", str); + return 0; +fail_nan: + fprintf(stderr, "WARNING: SOURCE_DATE_EPOCH=%s is not a positive " + "number\n", str); + return 0; +} diff --git a/tests/libfstree/Makemodule.am b/tests/libfstree/Makemodule.am index 107a66c..2e22967 100644 --- a/tests/libfstree/Makemodule.am +++ b/tests/libfstree/Makemodule.am @@ -16,14 +16,14 @@ test_gen_inode_numbers_SOURCES = tests/libfstree/gen_inode_numbers.c test_gen_inode_numbers_LDADD = libfstree.a libutil.a libcompat.a test_add_by_path_SOURCES = tests/libfstree/add_by_path.c -test_add_by_path_LDADD = libfstree.a libcompat.a +test_add_by_path_LDADD = libfstree.a libutil.a libcompat.a test_get_path_SOURCES = tests/libfstree/get_path.c -test_get_path_LDADD = libfstree.a libcompat.a +test_get_path_LDADD = libfstree.a libutil.a libcompat.a test_fstree_sort_SOURCES = tests/libfstree/fstree_sort.c test_fstree_sort_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/lib/fstree -test_fstree_sort_LDADD = libfstree.a libio.a libcompat.a +test_fstree_sort_LDADD = libfstree.a libio.a libutil.a libcompat.a test_fstree_from_file_SOURCES = tests/libfstree/fstree_from_file.c test_fstree_from_file_CPPFLAGS = $(AM_CPPFLAGS) @@ -41,12 +41,7 @@ test_fstree_from_dir_LDADD = libfstree.a libutil.a libcompat.a test_fstree_init_SOURCES = tests/libfstree/fstree_init.c test_fstree_init_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/lib/fstree -test_fstree_init_LDADD = libfstree.a libio.a libcompat.a - -test_fstree_epoch_SOURCES = tests/libfstree/epoch.c -test_fstree_epoch_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/lib/fstree -test_fstree_epoch_SOURCES += lib/fstree/source_date_epoch.c -test_fstree_epoch_LDADD = libcompat.a +test_fstree_init_LDADD = libfstree.a libio.a libutil.a libcompat.a test_sort_file_SOURCES = tests/libfstree/sort_file.c test_sort_file_LDADD = libfstree.a libio.a libutil.a libcompat.a @@ -58,8 +53,7 @@ FSTREE_TESTS = \ test_mknode_simple test_mknode_slink \ test_mknode_reg test_mknode_dir test_gen_inode_numbers \ test_add_by_path test_get_path test_fstree_sort test_fstree_from_file \ - test_fstree_init \ - test_fstree_from_dir test_fstree_glob1 test_fstree_epoch \ + test_fstree_init test_fstree_from_dir test_fstree_glob1 \ test_sort_file if BUILD_TOOLS diff --git a/tests/libfstree/epoch.c b/tests/libfstree/epoch.c deleted file mode 100644 index ce7e120..0000000 --- a/tests/libfstree/epoch.c +++ /dev/null @@ -1,67 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * epoch.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "config.h" -#include "internal.h" -#include "util/test.h" - -#if defined(_WIN32) || defined(__WINDOWS__) -static void setenv(const char *key, const char *value, int overwrite) -{ - char buffer[128]; - (void)overwrite; - - snprintf(buffer, sizeof(buffer) - 1, "%s=%s", key, value); - buffer[sizeof(buffer) - 1] = '\0'; - - _putenv(buffer); -} - -static void unsetenv(const char *key) -{ - setenv(key, "", 0); -} -#endif - -int main(int argc, char **argv) -{ - sqfs_u32 ts; - (void)argc; (void)argv; - - unsetenv("SOURCE_DATE_EPOCH"); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 0); - - setenv("SOURCE_DATE_EPOCH", "1337", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 1337); - - setenv("SOURCE_DATE_EPOCH", "0xCAFE", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 0); - - setenv("SOURCE_DATE_EPOCH", "foobar", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 0); - - setenv("SOURCE_DATE_EPOCH", "-12", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 0); - - setenv("SOURCE_DATE_EPOCH", "12", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 12); - - setenv("SOURCE_DATE_EPOCH", "4294967295", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 0xFFFFFFFF); - - setenv("SOURCE_DATE_EPOCH", "4294967296", 1); - ts = get_source_date_epoch(); - TEST_EQUAL_UI(ts, 0); - - return EXIT_SUCCESS; -} diff --git a/tests/libfstree/fstree_init.c b/tests/libfstree/fstree_init.c index 92bbc19..47c24ae 100644 --- a/tests/libfstree/fstree_init.c +++ b/tests/libfstree/fstree_init.c @@ -9,6 +9,7 @@ #include "fstree.h" #include "internal.h" #include "util/test.h" +#include "util/util.h" int main(int argc, char **argv) { diff --git a/tests/libutil/Makemodule.am b/tests/libutil/Makemodule.am index a3853d2..2ea2d43 100644 --- a/tests/libutil/Makemodule.am +++ b/tests/libutil/Makemodule.am @@ -27,9 +27,13 @@ test_filename_sane_w32_SOURCES += lib/util/filename_sane.c test_filename_sane_w32_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_WIN32=1 test_filename_sane_w32_LDADD = libcompat.a +test_sdate_epoch_SOURCES = tests/libutil/epoch.c +test_sdate_epoch_LDADD = libutil.a libcompat.a + LIBUTIL_TESTS = \ test_str_table test_rbtree test_xxhash test_threadpool test_ismemzero \ - test_canonicalize_name test_filename_sane test_filename_sane_w32 + test_canonicalize_name test_filename_sane test_filename_sane_w32 \ + test_sdate_epoch check_PROGRAMS += $(LIBUTIL_TESTS) TESTS += $(LIBUTIL_TESTS) diff --git a/tests/libutil/epoch.c b/tests/libutil/epoch.c new file mode 100644 index 0000000..a04942e --- /dev/null +++ b/tests/libutil/epoch.c @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * epoch.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "config.h" +#include "util/util.h" +#include "util/test.h" + +#if defined(_WIN32) || defined(__WINDOWS__) +static void setenv(const char *key, const char *value, int overwrite) +{ + char buffer[128]; + (void)overwrite; + + snprintf(buffer, sizeof(buffer) - 1, "%s=%s", key, value); + buffer[sizeof(buffer) - 1] = '\0'; + + _putenv(buffer); +} + +static void unsetenv(const char *key) +{ + setenv(key, "", 0); +} +#endif + +int main(int argc, char **argv) +{ + sqfs_u32 ts; + (void)argc; (void)argv; + + unsetenv("SOURCE_DATE_EPOCH"); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 0); + + setenv("SOURCE_DATE_EPOCH", "1337", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 1337); + + setenv("SOURCE_DATE_EPOCH", "0xCAFE", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 0); + + setenv("SOURCE_DATE_EPOCH", "foobar", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 0); + + setenv("SOURCE_DATE_EPOCH", "-12", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 0); + + setenv("SOURCE_DATE_EPOCH", "12", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 12); + + setenv("SOURCE_DATE_EPOCH", "4294967295", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 0xFFFFFFFF); + + setenv("SOURCE_DATE_EPOCH", "4294967296", 1); + ts = get_source_date_epoch(); + TEST_EQUAL_UI(ts, 0); + + return EXIT_SUCCESS; +} -- cgit v1.2.3