From 536baed85dd1d7fd0f99dfe0aa549f11a96afd85 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Fri, 19 Aug 2022 00:01:55 +0200
Subject: Create a function extending strings thanks to a format and its
 arguments.

---
 src/common/extstr.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 src/common/extstr.h |  3 +++
 2 files changed, 46 insertions(+)

diff --git a/src/common/extstr.c b/src/common/extstr.c
index 9142bd9..3041be0 100644
--- a/src/common/extstr.c
+++ b/src/common/extstr.c
@@ -26,7 +26,9 @@
 
 #include <malloc.h>
 #include <regex.h>
+#include <stdio.h>
 #include <string.h>
+#include <stdarg.h>
 
 
 
@@ -96,6 +98,47 @@ char *strnadd(char *str1, const char *str2, size_t n)
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : str1 = chaîne de caractères à compléter.                     *
+*                fmt  = description de la forme de la chaîne complémentaire.  *
+*                ...  = éléments associés au format à construire.             *
+*                                                                             *
+*  Description : Complète une chaîne de caractères avec une chaîne à formater.*
+*                                                                             *
+*  Retour      : Chaîne de caractères complétée, à libérer de la mémoire.     *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+char *straddfmt(char *str1, const char *fmt, ...)
+{
+    char *result;                           /* Chaîne à renvoyer           */
+    va_list ap;                             /* Liste des arguments         */
+    char *tmp;                              /* Conservation temporaire     */
+    int ret;                                /* Bilan intermédiaire         */
+
+    va_start(ap, fmt);
+
+    ret = vasprintf(&tmp, fmt, ap);
+
+    if (ret != -1)
+    {
+        result = stradd(str1, tmp);
+        free(tmp);
+    }
+
+    else
+        result = str1;
+
+    va_end(ap);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : str1 = chaîne de caractères à compléter.                     *
 *                str2 = chaîne de caractères à ajouter.                       *
 *                                                                             *
 *  Description : Fait précéder une chaîne de caractères par une autre.        *
diff --git a/src/common/extstr.h b/src/common/extstr.h
index 1c39603..c4e671e 100644
--- a/src/common/extstr.h
+++ b/src/common/extstr.h
@@ -37,6 +37,9 @@ char *stradd(char *, const char *);
 /* Complète une chaîne de caractères avec une autre. */
 char *strnadd(char *, const char *, size_t);
 
+/* Complète une chaîne de caractères avec une chaîne à formater. */
+char *straddfmt(char *, const char *, ...);
+
 /* Fait précéder une chaîne de caractères par une autre. */
 char *strprep(char *, const char *);
 
-- 
cgit v0.11.2-87-g4458