From 39e161d89391beb2d84ddc19f9b1d39955eb5df1 Mon Sep 17 00:00:00 2001 From: Alon Bar-Lev Date: Sat, 20 May 2023 15:56:06 +0300 Subject: [PATCH] libmycms: mycms-list-str: initial add --- include/mycms/Makefile.am | 1 + include/mycms/mycms-list-str.h | 22 ++++++++++++ include/mycms/mycms.h | 2 +- src/libmycms/Makefile.am | 2 ++ src/libmycms/mycms-list-str.c | 52 +++++++++++++++++++++++++++++ src/libmycms/mycms-list-str.exports | 2 ++ src/mycms-tool/cmd-sign.c | 21 +++--------- 7 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 include/mycms/mycms-list-str.h create mode 100644 src/libmycms/mycms-list-str.c create mode 100644 src/libmycms/mycms-list-str.exports diff --git a/include/mycms/Makefile.am b/include/mycms/Makefile.am index 4ea9b2c..6f4486e 100644 --- a/include/mycms/Makefile.am +++ b/include/mycms/Makefile.am @@ -12,6 +12,7 @@ mycmsinclude_HEADERS = \ mycms-error.h \ mycms-io.h \ mycms-list.h \ + mycms-list-str.h \ mycms-static.h \ mycms-system-driver-core.h \ mycms-system.h \ diff --git a/include/mycms/mycms-list-str.h b/include/mycms/mycms-list-str.h new file mode 100644 index 0000000..82d7318 --- /dev/null +++ b/include/mycms/mycms-list-str.h @@ -0,0 +1,22 @@ +#ifndef __MYCMS_LIST_STR_H +#define __MYCMS_LIST_STR_H + +#include "mycms-system.h" +#include "mycms-list.h" + +MYCMS_LIST_DECLARE(str, char *, str) + +bool +mycms_list_str_add( + const mycms_system system, + mycms_list_str * const head, + const char * const str +); + +bool +mycms_list_str_free( + const mycms_system system, + const mycms_list_str head +); + +#endif diff --git a/include/mycms/mycms.h b/include/mycms/mycms.h index 58e19d1..0bd1515 100644 --- a/include/mycms/mycms.h +++ b/include/mycms/mycms.h @@ -6,6 +6,7 @@ #include "mycms-certificate.h" #include "mycms-io.h" #include "mycms-dict.h" +#include "mycms-list-str.h" #include "mycms-context.h" struct mycms_signer_s { @@ -14,7 +15,6 @@ struct mycms_signer_s { char *digest; }; -MYCMS_LIST_DECLARE(str, char *, str) MYCMS_LIST_DECLARE(signer, struct mycms_signer_s, signer) struct __mycms_s; diff --git a/src/libmycms/Makefile.am b/src/libmycms/Makefile.am index cba3d7f..0e0bda8 100644 --- a/src/libmycms/Makefile.am +++ b/src/libmycms/Makefile.am @@ -17,6 +17,7 @@ MYCMS_COMMON_EXPORTS = \ mycms-dict.exports \ mycms-error.exports \ mycms-io.exports \ + mycms-list-str.exports \ mycms-static.exports \ mycms-system.exports \ mycms.exports \ @@ -57,6 +58,7 @@ libmycms_internal_la_SOURCES = \ mycms-internal.h \ mycms-io-private.h \ mycms-io.c \ + mycms-list-str.c \ mycms-openssl.c \ mycms-openssl.h \ mycms-static.c \ diff --git a/src/libmycms/mycms-list-str.c b/src/libmycms/mycms-list-str.c new file mode 100644 index 0000000..37460e8 --- /dev/null +++ b/src/libmycms/mycms-list-str.c @@ -0,0 +1,52 @@ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +bool +mycms_list_str_add( + const mycms_system system, + mycms_list_str * const head, + const char * const str +) { + bool ret = false; + + mycms_list_str t; + if ((t = mycms_system_zalloc(system, "mycms_list_str_add.new", sizeof(*t))) == NULL) { + goto cleanup; + } + if ((t->str = mycms_system_strdup(system, "mycms_list_str_add.dup", str)) == NULL) { + goto cleanup; + } + + if (*head == NULL) { + *head = t; + } else { + mycms_list_str i; + for (i = *head;i->next != NULL; i = i->next); + i->next = t; + } + + ret = true; + +cleanup: + + return ret; +} + +bool +mycms_list_str_free( + const mycms_system system, + const mycms_list_str head +) { + mycms_list_str h = head; + while (h != NULL) { + mycms_list_str t = h; + h = h->next; + mycms_system_free(system, "mycms_list_str_free.str", t->str); + mycms_system_free(system, "mycms_list_str_free", t); + } + + return true; +} diff --git a/src/libmycms/mycms-list-str.exports b/src/libmycms/mycms-list-str.exports new file mode 100644 index 0000000..711bf8d --- /dev/null +++ b/src/libmycms/mycms-list-str.exports @@ -0,0 +1,2 @@ +mycms_list_str_add +mycms_list_str_free diff --git a/src/mycms-tool/cmd-sign.c b/src/mycms-tool/cmd-sign.c index 7712106..4a977b1 100644 --- a/src/mycms-tool/cmd-sign.c +++ b/src/mycms-tool/cmd-sign.c @@ -83,15 +83,8 @@ _cmd_sign( ret = 0; goto cleanup; case OPT_DIGEST: - { - mycms_list_str t; - - if ((t = mycms_system_zalloc(system, "opt.digest", sizeof(*t))) == NULL) { - goto cleanup; - } - t->next = digests; - digests = t; - t->str = optarg; + if (!mycms_list_str_add(system, &digests, optarg)) { + goto cleanup; } break; case OPT_CMS_IN: @@ -156,8 +149,7 @@ _cmd_sign( } if (digests == NULL) { - digests = mycms_system_zalloc(system, "digests", sizeof(*digests)); - digests->str = "SHA3-256"; + mycms_list_str_add(system, &digests, "SHA3-256"); } if ((certificate_dict = mycms_dict_new(context)) == NULL) { @@ -236,11 +228,8 @@ _cmd_sign( cleanup: - while (digests != NULL) { - mycms_list_str t = digests; - digests = digests->next; - mycms_system_free(system, "digests", t); - } + mycms_list_str_free(system, digests); + digests = NULL; mycms_io_destruct(cms_in); cms_in = NULL;