From 28e53c2498903090182ebeb128347fcd92896cd9 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Wed, 8 May 2019 00:00:09 +0200
Subject: Appended a suffix to temporary files.

---
 src/analysis/contents/memory.c |  2 +-
 src/common/io.c                | 20 ++++++++++++++++----
 src/common/io.h                |  2 +-
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/analysis/contents/memory.c b/src/analysis/contents/memory.c
index 7406a3a..70003bf 100644
--- a/src/analysis/contents/memory.c
+++ b/src/analysis/contents/memory.c
@@ -286,7 +286,7 @@ GBinContent *g_memory_content_new(const bin_t *data, phys_t size)
 
     result = g_object_new(G_TYPE_MEMORY_CONTENT, NULL);
 
-    fd = make_tmp_file("memcnt", &result->storage);
+    fd = make_tmp_file("memcnt", ".bin", &result->storage);
     if (fd == -1) goto gmcn_error;
 
     status = safe_write(fd, data, size);
diff --git a/src/common/io.c b/src/common/io.c
index 3ff8278..cfc6b80 100644
--- a/src/common/io.c
+++ b/src/common/io.c
@@ -332,7 +332,8 @@ int ensure_path_exists(const char *path)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : base     = préfixe du nom du fichier temporaire à créer.     *
+*  Paramètres  : prefix   = préfixe du nom du fichier temporaire à créer.     *
+*                suffix   = éventuel suffixe à coller au nom de fichier.      *
 *                filename = chemin d'accès complet au nouveau fichier. [OUT]  *
 *                                                                             *
 *  Description : Met en place un fichier temporaire.                          *
@@ -343,23 +344,34 @@ int ensure_path_exists(const char *path)
 *                                                                             *
 ******************************************************************************/
 
-int make_tmp_file(const char *base, char **filename)
+int make_tmp_file(const char *prefix, const char *suffix, char **filename)
 {
     int result;                             /* Flux ou code à retourner    */
     const char *tmpdir;                     /* Répertoire d'accueil        */
     bool status;                            /* Bilan d'un consultation     */
+    size_t slen;                            /* Taille du suffixe           */
 
     status = g_generic_config_get_value(get_main_configuration(), MPK_TMPDIR, &tmpdir);
     if (!status) return -1;
 
-    asprintf(filename, "%s" G_DIR_SEPARATOR_S "%s-%d.XXXXXX", tmpdir, base, getpid());
+    slen = strlen(suffix);
+
+    if (slen > 0)
+        asprintf(filename, "%s" G_DIR_SEPARATOR_S "%s-%d.XXXXXX.%s", tmpdir, prefix, getpid(), suffix);
+    else
+        asprintf(filename, "%s" G_DIR_SEPARATOR_S "%s-%d.XXXXXX", tmpdir, prefix, getpid());
 
     result = ensure_path_exists(*filename);
 
     if (result == 0)
     {
-        result = mkstemp(*filename);
+        if (slen > 0)
+            result = mkstemps(*filename, strlen(suffix) + 1);
+        else
+            result = mkstemp(*filename);
+
         if (result == -1) perror("mkstemp");
+
     }
 
     if (result == -1)
diff --git a/src/common/io.h b/src/common/io.h
index f6b7e51..b4e2211 100644
--- a/src/common/io.h
+++ b/src/common/io.h
@@ -51,7 +51,7 @@ bool safe_send(int, const void *, size_t, int);
 int ensure_path_exists(const char *);
 
 /* Met en place un fichier temporaire. */
-int make_tmp_file(const char *, char **);
+int make_tmp_file(const char *, const char *, char **);
 
 /* Met en place un canal UNIX temporaire. */
 bool build_tmp_socket(const char *, struct sockaddr_un *);
-- 
cgit v0.11.2-87-g4458