From eafaffa0f09b7c22eed906ef5356b1460d44da55 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Fri, 22 Nov 2019 11:01:09 +0100 Subject: Cleanup: move all the compatibillity fluff to a dedicated "libcompat" Signed-off-by: David Oberhollenzer --- lib/compat/Makemodule.am | 4 ++++ lib/compat/getline.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/compat/getsubopt.c | 45 +++++++++++++++++++++++++++++++++++++++++++ lib/compat/strndup.c | 31 ++++++++++++++++++++++++++++++ lib/sqfs/id_table.c | 2 +- lib/sqfs/readdir.c | 2 +- lib/sqfs/write_inode.c | 2 +- lib/util/Makemodule.am | 8 +++----- lib/util/getline.c | 50 ------------------------------------------------ lib/util/getsubopt.c | 45 ------------------------------------------- lib/util/strndup.c | 31 ------------------------------ 11 files changed, 136 insertions(+), 134 deletions(-) create mode 100644 lib/compat/Makemodule.am create mode 100644 lib/compat/getline.c create mode 100644 lib/compat/getsubopt.c create mode 100644 lib/compat/strndup.c delete mode 100644 lib/util/getline.c delete mode 100644 lib/util/getsubopt.c delete mode 100644 lib/util/strndup.c (limited to 'lib') diff --git a/lib/compat/Makemodule.am b/lib/compat/Makemodule.am new file mode 100644 index 0000000..c197fb0 --- /dev/null +++ b/lib/compat/Makemodule.am @@ -0,0 +1,4 @@ +libcompat_a_SOURCES = lib/compat/getline.c lib/compat/getsubopt.c +libcompat_a_SOURCES += lib/compat/strndup.c include/compat.h + +noinst_LIBRARIES += libcompat.a diff --git a/lib/compat/getline.c b/lib/compat/getline.c new file mode 100644 index 0000000..f330c6d --- /dev/null +++ b/lib/compat/getline.c @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * getline.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "config.h" +#include "compat.h" + +#include +#include + +#ifndef HAVE_GETLINE +ssize_t getline(char **line, size_t *n, FILE *fp) +{ + size_t new_cap, len = 0, cap = 0; + char *buffer = NULL, *new; + int c; + + if (feof(fp) || ferror(fp)) + return -1; + + do { + c = fgetc(fp); + + if (ferror(fp)) + return -1; + + if (c == EOF) + c = '\n'; + + if (len == cap) { + new_cap = cap ? cap * 2 : 32; + new = realloc(buffer, new_cap); + + if (new == NULL) + return -1; + + buffer = new; + cap = new_cap; + } + + buffer[len++] = c; + } while (c != '\n'); + + *line = buffer; + *n = len; + return len; +} +#endif diff --git a/lib/compat/getsubopt.c b/lib/compat/getsubopt.c new file mode 100644 index 0000000..d53a37d --- /dev/null +++ b/lib/compat/getsubopt.c @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * getsubopt.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "config.h" +#include "compat.h" + +#include +#include + +#ifndef HAVE_GETSUBOPT +int getsubopt(char **opt, char *const *keys, char **val) +{ + char *str = *opt; + size_t i, len; + + *val = NULL; + *opt = strchr(str, ','); + + if (*opt == NULL) { + *opt = str + strlen(str); + } else { + *(*opt)++ = '\0'; + } + + for (i = 0; keys[i]; ++i) { + len = strlen(keys[i]); + + if (strncmp(keys[i], str, len) != 0) + continue; + + if (str[len] != '=' && str[len] != '\0') + continue; + + if (str[len] == '=') + *val = str + len + 1; + + return i; + } + + return -1; +} +#endif diff --git a/lib/compat/strndup.c b/lib/compat/strndup.c new file mode 100644 index 0000000..dff79d7 --- /dev/null +++ b/lib/compat/strndup.c @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * strndup.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "config.h" +#include "compat.h" + +#include +#include + +#ifndef HAVE_STRNDUP +char *strndup(const char *str, size_t max_len) +{ + size_t len = 0; + char *out; + + while (len < max_len && str[len] != '\0') + ++len; + + out = malloc(len + 1); + + if (out != NULL) { + memcpy(out, str, len); + out[len] = '\0'; + } + + return out; +} +#endif diff --git a/lib/sqfs/id_table.c b/lib/sqfs/id_table.c index 4080015..a320eca 100644 --- a/lib/sqfs/id_table.c +++ b/lib/sqfs/id_table.c @@ -11,7 +11,7 @@ #include "sqfs/super.h" #include "sqfs/table.h" #include "sqfs/error.h" -#include "util/compat.h" +#include "compat.h" #include #include diff --git a/lib/sqfs/readdir.c b/lib/sqfs/readdir.c index d800cb7..8899475 100644 --- a/lib/sqfs/readdir.c +++ b/lib/sqfs/readdir.c @@ -10,7 +10,7 @@ #include "sqfs/meta_reader.h" #include "sqfs/error.h" #include "sqfs/dir.h" -#include "util/compat.h" +#include "compat.h" #include #include diff --git a/lib/sqfs/write_inode.c b/lib/sqfs/write_inode.c index f1f8abf..5f0ef4c 100644 --- a/lib/sqfs/write_inode.c +++ b/lib/sqfs/write_inode.c @@ -11,7 +11,7 @@ #include "sqfs/error.h" #include "sqfs/inode.h" #include "sqfs/dir.h" -#include "util/compat.h" +#include "compat.h" #include diff --git a/lib/util/Makemodule.am b/lib/util/Makemodule.am index b5fef29..6a1a6a8 100644 --- a/lib/util/Makemodule.am +++ b/lib/util/Makemodule.am @@ -1,8 +1,6 @@ -libutil_la_SOURCES = include/util/util.h include/util/compat.h -libutil_la_SOURCES += lib/util/str_table.c include/util/str_table.h -libutil_la_SOURCES += lib/util/alloc.c lib/util/canonicalize_name.c -libutil_la_SOURCES += lib/util/strndup.c lib/util/getline.c -libutil_la_SOURCES += lib/util/getsubopt.c +libutil_la_SOURCES = include/util/util.h include/util/str_table.h +libutil_la_SOURCES += lib/util/str_table.c lib/util/canonicalize_name.c +libutil_la_SOURCES += lib/util/alloc.c libutil_la_CFLAGS = $(AM_CFLAGS) libutil_la_CPPFLAGS = $(AM_CPPFLAGS) libutil_la_LDFLAGS = $(AM_LDFLAGS) diff --git a/lib/util/getline.c b/lib/util/getline.c deleted file mode 100644 index 996bef2..0000000 --- a/lib/util/getline.c +++ /dev/null @@ -1,50 +0,0 @@ -/* SPDX-License-Identifier: LGPL-3.0-or-later */ -/* - * getline.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "config.h" -#include "util/compat.h" - -#include -#include - -#ifndef HAVE_GETLINE -ssize_t getline(char **line, size_t *n, FILE *fp) -{ - size_t new_cap, len = 0, cap = 0; - char *buffer = NULL, *new; - int c; - - if (feof(fp) || ferror(fp)) - return -1; - - do { - c = fgetc(fp); - - if (ferror(fp)) - return -1; - - if (c == EOF) - c = '\n'; - - if (len == cap) { - new_cap = cap ? cap * 2 : 32; - new = realloc(buffer, new_cap); - - if (new == NULL) - return -1; - - buffer = new; - cap = new_cap; - } - - buffer[len++] = c; - } while (c != '\n'); - - *line = buffer; - *n = len; - return len; -} -#endif diff --git a/lib/util/getsubopt.c b/lib/util/getsubopt.c deleted file mode 100644 index 5cf19d1..0000000 --- a/lib/util/getsubopt.c +++ /dev/null @@ -1,45 +0,0 @@ -/* SPDX-License-Identifier: LGPL-3.0-or-later */ -/* - * getsubopt.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "config.h" -#include "util/compat.h" - -#include -#include - -#ifndef HAVE_GETSUBOPT -int getsubopt(char **opt, char *const *keys, char **val) -{ - char *str = *opt; - size_t i, len; - - *val = NULL; - *opt = strchr(str, ','); - - if (*opt == NULL) { - *opt = str + strlen(str); - } else { - *(*opt)++ = '\0'; - } - - for (i = 0; keys[i]; ++i) { - len = strlen(keys[i]); - - if (strncmp(keys[i], str, len) != 0) - continue; - - if (str[len] != '=' && str[len] != '\0') - continue; - - if (str[len] == '=') - *val = str + len + 1; - - return i; - } - - return -1; -} -#endif diff --git a/lib/util/strndup.c b/lib/util/strndup.c deleted file mode 100644 index 8031d23..0000000 --- a/lib/util/strndup.c +++ /dev/null @@ -1,31 +0,0 @@ -/* SPDX-License-Identifier: LGPL-3.0-or-later */ -/* - * strndup.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "config.h" -#include "util/compat.h" - -#include -#include - -#ifndef HAVE_STRNDUP -char *strndup(const char *str, size_t max_len) -{ - size_t len = 0; - char *out; - - while (len < max_len && str[len] != '\0') - ++len; - - out = malloc(len + 1); - - if (out != NULL) { - memcpy(out, str, len); - out[len] = '\0'; - } - - return out; -} -#endif -- cgit v1.2.3