From 70d155811d9d1daa6e023ab25402b1a17146a727 Mon Sep 17 00:00:00 2001 From: rick Date: Sat, 20 Feb 2021 12:49:14 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20caract=C3=A8re=20d=E2=80=99=C3=A9c?= =?UTF-8?q?happement=20pour=20'=20'=20et=20'\'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/boitoutil/parser.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/boitoutil/parser.c b/src/boitoutil/parser.c index 143377b..bcedfd8 100644 --- a/src/boitoutil/parser.c +++ b/src/boitoutil/parser.c @@ -54,21 +54,34 @@ void get_command(char *args[], char find) * * La chaine de caractères orig est découpée selon le caractère find * et chaques mots sont mis dans le tableau dest. + * S’il y a un \ avant le caractère find, celui-ce sera ignoré. */ void parse_string(char *orig, char *dest[], char find) { char *token = strtok(orig, &find); + int pred = 0, i = 0; - int i = 0; while (token != NULL && i < MAX_LENGTH) { - strcpy(dest[i], token); - i++; + if (pred) + { + dest[i][strlen(dest[i])-1] = find; + strcat(dest[i], token); + pred = 0; + } + else + strcpy(dest[i], token); + + if (dest[i][strlen(dest[i])-1] == '\\') + pred = 1; + else + i++; + token = strtok(NULL, &find); } - // le dernier argument doit être NULL - // car il est vide et provoque une erreur si non NULL + /** le dernier argument doit être NULL + car il est vide et provoque une erreur si non NULL */ free(dest[i]); dest[i] = NULL;