From 891258b135000eda6f95f2a38db37bc073b0502b Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 15 May 2023 08:18:27 +0200
Subject: Handle strings with length for parsing.

---
 src/common/szstr.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 src/common/szstr.h

diff --git a/src/common/szstr.h b/src/common/szstr.h
new file mode 100644
index 0000000..aadbb28
--- /dev/null
+++ b/src/common/szstr.h
@@ -0,0 +1,76 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * szstr.h - prototypes pour une manipulation de chaînes issues de Flex/Bison
+ *
+ * Copyright (C) 2023 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  Chrysalide is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  Chrysalide is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with Chrysalide.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _COMMON_SZSTR_H
+#define _COMMON_SZSTR_H
+
+
+#include <string.h>
+#include <sys/types.h>
+
+
+
+/* Structure associant une chaîne et sa taille */
+typedef struct _sized_string_t
+{
+    char *data;                         /* Chaîne de caractères        */
+    size_t len;                         /* Taille correspondante       */
+
+} sized_string_t;
+
+
+#define init_szstr(s)       \
+    do                      \
+    {                       \
+        (s)->data = NULL;   \
+        (s)->len = 0;       \
+    }                       \
+    while (0)
+
+#define exit_szstr(s)           \
+    do                          \
+    {                           \
+        if ((s)->data != NULL)  \
+        {                       \
+            free((s)->data);    \
+            init_szstr(s);      \
+        }                       \
+    }                           \
+    while (0)
+            
+#define szstrcmp(ss, rs) \
+    strncmp((ss)->data, rs, (ss)->len)
+
+#define szmemcmp(s1, s2)                                        \
+    ({                                                          \
+        int __result;                                           \
+        size_t __n;                                             \
+        __n = (s1)->len < (s2)->len ? (s1)->len : (s2)->len;    \
+        __result = memcmp((s1)->data, (s2)->data, __n);         \
+        if (__result == 0 && (s1)->len != (s2)->len)            \
+            __result = (s1)->len < (s2)->len ? -1 : 1;          \
+        __result;                                               \
+    })
+
+
+#endif  /* _COMMON_SZSTR_H */
-- 
cgit v0.11.2-87-g4458