summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2023-07-07 06:32:43 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2023-07-07 06:32:43 (GMT)
commit4c10dfa2a95cea6fc704d68066d0c284cfd79342 (patch)
tree5827bbc411459800747e21929daecdf99fde7dfd /src/common
parent3f996be1e5858b54740bf92515795982a16b169a (diff)
Rewrite core parts of the ROST API.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/extstr.c104
-rw-r--r--src/common/extstr.h6
-rw-r--r--src/common/szstr.h23
3 files changed, 121 insertions, 12 deletions
diff --git a/src/common/extstr.c b/src/common/extstr.c
index 3041be0..ac93f5d 100644
--- a/src/common/extstr.c
+++ b/src/common/extstr.c
@@ -24,6 +24,7 @@
#include "extstr.h"
+#include <ctype.h>
#include <malloc.h>
#include <regex.h>
#include <stdio.h>
@@ -565,3 +566,106 @@ bool _endswith(const char *str, const char *suffix, const char **end)
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : haystack = botte de foin composant l'espace de recherche. *
+* haystacklen = taille de cet espace. *
+* needle = aiguille visée, cible des recherches. *
+* needlelen = taille de l'aiguille à rechercher. *
+* *
+* Description : Recherche une séquence d'octets dans un ensemble de données. *
+* *
+* Retour : Adresse de l'éventuelle trouvaille ou NULL. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+const void *memcasemem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen)
+{
+ const void *result; /* Trouvaille à renvoyer */
+ const char *_haystack; /* Autre version de la botte */
+ const char *_needle; /* Autre version de l'aiguille */
+ size_t i; /* Boucle de parcours #1 */
+ size_t k; /* Boucle de parcours #2 */
+ int c1; /* Caractère de la chaîne #1 */
+ int c2; /* Caractère de la chaîne #2 */
+
+ result = NULL;
+
+ if (needlelen > haystacklen)
+ goto done;
+
+ _haystack = (const char *)haystack;
+ _needle = (const char *)needle;
+
+ for (i = 0; i <= (haystacklen - needlelen); i++, _haystack++)
+ {
+ for (k = 0; k < needlelen; k++)
+ {
+ c1 = toupper(_haystack[k]);
+ c2 = toupper(_needle[k]);
+
+ if (c1 != c2)
+ break;
+
+ }
+
+ if (k == needlelen)
+ {
+ result = _haystack;
+ break;
+ }
+
+ }
+
+ done:
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : s1 = première séquence d'octets à consulter. *
+* s2 = second séquence d'octets à consulter. *
+* n = quantité d'octets à comparer. *
+* *
+* Description : Compare sans casse deux série d'octets entre elles. *
+* *
+* Retour : Status de la comparaison des séries d'octets. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+int memcasecmp(const void *s1, const void *s2, size_t n)
+{
+ int result; /* Statut à retourner */
+ size_t i; /* Boucle de parcours */
+ const char *_s1; /* Séquence avec taille #1 */
+ const char *_s2; /* Séquence avec taille #2 */
+ int c1; /* Caractère de la chaîne #1 */
+ int c2; /* Caractère de la chaîne #2 */
+
+ result = 0;
+
+ _s1 = (const char *)s1;
+ _s2 = (const char *)s2;
+
+ for (i = 0; i < n; i++)
+ {
+ c1 = toupper(_s1[i]);
+ c2 = toupper(_s2[i]);
+
+ result = c1 - c2;
+ if (result != 0) break;
+
+ }
+
+ return result;
+
+}
diff --git a/src/common/extstr.h b/src/common/extstr.h
index c4e671e..a2293be 100644
--- a/src/common/extstr.h
+++ b/src/common/extstr.h
@@ -79,6 +79,12 @@ bool _endswith(const char *, const char *, const char **);
#define startswith(str, prefix) _startswith(str, prefix, NULL)
#define endswith(str, suffix) _endswith(str, suffix, NULL)
+/* Recherche une séquence d'octets dans un ensemble de données. */
+const void *memcasemem(const void *, size_t, const void *, size_t);
+
+/* Compare sans casse deux série d'octets entre elles. */
+int memcasecmp(const void *, const void *, size_t);
+
#endif /* _COMMON_EXTSTR_H */
diff --git a/src/common/szstr.h b/src/common/szstr.h
index aadbb28..54beb9a 100644
--- a/src/common/szstr.h
+++ b/src/common/szstr.h
@@ -47,6 +47,15 @@ typedef struct _sized_string_t
} \
while (0)
+#define szstrdup(dst, src) \
+ do \
+ { \
+ (dst)->data = malloc((src)->len); \
+ memcpy((dst)->data, (src)->data, (src)->len); \
+ (dst)->len = (src)->len; \
+ } \
+ while (0)
+
#define exit_szstr(s) \
do \
{ \
@@ -59,18 +68,8 @@ typedef struct _sized_string_t
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; \
- })
+ strncmp((ss)->data, (rs)/*->data*/, (ss)->len)
+
#endif /* _COMMON_SZSTR_H */