summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2013-12-29 14:07:38 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2013-12-29 14:07:38 (GMT)
commit944461f7af1995b08783dc761772908ec7c204a6 (patch)
tree21a50208c650390e9649bb0892f94bab26d5fc8f /src/common
parent11634a93003e7b5dd339bb52f2cde04f29f4c4e4 (diff)
Handled Itanium demangling with C code (first part).
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@361 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/common')
-rw-r--r--src/common/cpp.h6
-rw-r--r--src/common/extstr.c41
-rw-r--r--src/common/extstr.h3
3 files changed, 48 insertions, 2 deletions
diff --git a/src/common/cpp.h b/src/common/cpp.h
index b5e09c0..a658559 100644
--- a/src/common/cpp.h
+++ b/src/common/cpp.h
@@ -31,6 +31,12 @@
/**
+ * Fournit la taille d'un tableau statique.
+ */
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+
+
+/**
* Détermine la taille de la plus longue chaîne de caractères
* correspondant à un type donné.
*/
diff --git a/src/common/extstr.c b/src/common/extstr.c
index 8249515..309f487 100644
--- a/src/common/extstr.c
+++ b/src/common/extstr.c
@@ -47,9 +47,46 @@ char *stradd(char *str1, const char *str2)
{
char *result; /* Chaîne à renvoyer */
- result = (char *)realloc(str1, (strlen(str1) + strlen(str2) + 1) * sizeof(char));
+ if (str1 == NULL)
+ result = strdup(str2);
+
+ else
+ {
+ result = (char *)realloc(str1, (strlen(str1) + strlen(str2) + 1) * sizeof(char));
+ strcat(result, str2);
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : str1 = chaîne de caractères à compléter. *
+* str2 = chaîne de caractères à ajouter. *
+* n = taille de la seconde chaîne. *
+* *
+* Description : Complète une chaîne de caractères avec une autre. *
+* *
+* Retour : Chaîne de caractères complétée, à libérer de la mémoire. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+char *strnadd(char *str1, const char *str2, size_t n)
+{
+ char *result; /* Chaîne à renvoyer */
- strcat(result, str2);
+ if (str1 == NULL)
+ result = strndup(str2, n);
+
+ else
+ {
+ result = (char *)realloc(str1, (strlen(str1) + n + 1) * sizeof(char));
+ strncat(result, str2, n);
+ }
return result;
diff --git a/src/common/extstr.h b/src/common/extstr.h
index 592719e..830e1fa 100644
--- a/src/common/extstr.h
+++ b/src/common/extstr.h
@@ -32,6 +32,9 @@
/* Complète une chaîne de caractères avec une autre. */
char *stradd(char *str1, const char *str2);
+/* Complète une chaîne de caractères avec une autre. */
+char *strnadd(char *, const char *, size_t);
+
/* Fait précéder une chaîne de caractères par une autre. */
char *strprep(char *, const char *);