aboutsummaryrefslogtreecommitdiffstats
path: root/src/gpg-error.h.in
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2025-04-01 08:26:30 +0000
committerWerner Koch <[email protected]>2025-04-01 08:26:30 +0000
commit47097806f13d93daffb73b4221f3f18a99f66b2b (patch)
treef461610d9566dfe2c7b4c7708a4a523022ea8c8e /src/gpg-error.h.in
parentAdd source file strlist.c (diff)
downloadlibgpg-error-47097806f13d93daffb73b4221f3f18a99f66b2b.tar.gz
libgpg-error-47097806f13d93daffb73b4221f3f18a99f66b2b.zip
New public API gpgrt_strlist_*
* src/strlist.c: Rename all functions to have a _gpgrt_strlist prefix. (append_to_strlist2, strlist_length): Remove. (_gpgrt_strlist_free): rtake care of the wipe flag. (_gpgrt_strlist_add): Add a flags arg to use it for prepend and append. Return an error on failure. (_gpgrt_strlist_tokenize): Ditto. (_gpgrt_strlist_copy): Chnage to return an error on failure. (_gpgrt_strlist_pop): Ditto. * src/Makefile.am (libgpg_error_la_SOURCES): Add strlist.c. * src/argparse.c (trim_spaces): Move to ... * src/stringutils.c (_gpgrt_trim_spaces): here and rename. * src/visibility.c: Add wrappers for all exported functions. * src/visibility.h: MArk exported functions as visisble. * src/gpg-error.def.in: Export new functions * src/gpg-error.vers: Ditto. * src/gpg-error.h.in (GPGRT_STRLIST_APPEND): New. (GPGRT_STRLIST_WIPE): New. (gpgrt_strlist_free): New. (gpgrt_strlist_add): New. (gpgrt_strlist_tokenize): New. (gpgrt_strlist_copy): New. (gpgrt_strlist_rev): New. (gpgrt_strlist_prev): New. (gpgrt_strlist_last): New. (gpgrt_strlist_pop): New. (gpgrt_strlist_find): New. (gpgrt_strlist_count): New inline function. -- This is a modified set of function as used by gpg for ages. These are quite useful functions and will be needed internally for some other planned features. The idea is to make their counterparts in gnupg wrapper around those new functions. After we have moved the secure memory stuff from Libgcrypt to here we can also implement a GPGRT_STRLICT_SECMEM flag to allow allocating strings here ion secure memory. For now we only have the WIPE flag which wipes the memory on free.
Diffstat (limited to 'src/gpg-error.h.in')
-rw-r--r--src/gpg-error.h.in73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/gpg-error.h.in b/src/gpg-error.h.in
index 8d4dd66..16b2c44 100644
--- a/src/gpg-error.h.in
+++ b/src/gpg-error.h.in
@@ -970,6 +970,79 @@ gpg_err_code_t gpgrt_b64dec_finish (gpgrt_b64state_t state);
/*
+ * Simple string list
+ */
+struct _gpgrt_strlist_s
+{
+ struct _gpgrt_strlist_s *next;
+ unsigned int flags;
+ unsigned char _private_flags; /* Not of your business. */
+ char d[1];
+};
+typedef struct _gpgrt_strlist_s *gpgrt_strlist_t;
+
+
+#define GPGRT_STRLIST_APPEND 1 /* Append and not prepend to the list. */
+#define GPGRT_STRLIST_WIPE 2 /* Wipe the string on free. */
+
+
+/* Free the string list SL. */
+void gpgrt_strlist_free (gpgrt_strlist_t sl);
+
+/* Add STRING to the LIST. This function returns NULL and sets ERRNO
+ * on memory shortage. If STRING is NULL an empty string is stored
+ * instead. FLAGS */
+gpgrt_strlist_t gpgrt_strlist_add (gpgrt_strlist_t *list, const char *string,
+ unsigned int flags);
+
+/* Tokenize STRING using the delimiters from DELIM and append each
+ * token to the string list LIST. On success a pointer into LIST with
+ * the first new token is returned. Returns NULL on error and sets
+ * ERRNO. Take care, an error with ENOENT set mean that no tokens
+ * were found in STRING. */
+gpgrt_strlist_t gpgrt_strlist_tokenize (gpgrt_strlist_t *list,
+ const char *string,
+ const char *delim, unsigned int flags);
+
+/* Return a copy of LIST. On error ERRNO is set and NULL
+ * returned. */
+gpgrt_strlist_t gpgrt_strlist_copy (gpgrt_strlist_t list);
+
+/* Reverse the list *LIST in place. Will not fail. */
+gpgrt_strlist_t gpgrt_strlist_rev (gpgrt_strlist_t *list);
+
+/* In the list starting with HEAD return the item previous to NODE.
+ * Returns NULL if no previous item exists. */
+gpgrt_strlist_t gpgrt_strlist_prev (gpgrt_strlist_t head, gpgrt_strlist_t node);
+
+/* Return the last item in the list starting at NODE. */
+gpgrt_strlist_t gpgrt_strlist_last (gpgrt_strlist_t node);
+
+/* Remove the first item from LIST and return its content in an
+ * allocated buffer. This function returns NULl and sets ERRNO on
+ * error. */
+char *gpgrt_strlist_pop (gpgrt_strlist_t *list);
+
+/* Return the first item of the string list HAYSTACK whose value
+ * matches NEEDLE. If no items match, return NULL. */
+gpgrt_strlist_t gpgrt_strlist_find (gpgrt_strlist_t haystack,
+ const char *needle);
+
+/* Return the number of items in LIST. */
+static GPG_ERR_INLINE unsigned int
+gpgrt_strlist_count (gpgrt_strlist_t list)
+{
+ unsigned int i = 0;
+
+ for (i = 0; list; list = list->next)
+ i++;
+
+ return i;
+}
+
+
+
+/*
* Logging functions
*/