diff options
Diffstat (limited to 'src/common')
-rwxr-xr-x | src/common/Makefile.am | 1 | ||||
-rw-r--r-- | src/common/dllist.h | 7 | ||||
-rw-r--r-- | src/common/environment.c | 94 | ||||
-rw-r--r-- | src/common/environment.h | 40 |
4 files changed, 140 insertions, 2 deletions
diff --git a/src/common/Makefile.am b/src/common/Makefile.am index c4937dd..7aa255e 100755 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -4,6 +4,7 @@ lib_LTLIBRARIES = libcommon.la libcommon_la_SOURCES = \ dllist.h dllist.c \ endianness.h endianness.c \ + environment.h environment.c \ extstr.h extstr.c \ macros.h \ xml.h xml.c diff --git a/src/common/dllist.h b/src/common/dllist.h index 499151e..504291e 100644 --- a/src/common/dllist.h +++ b/src/common/dllist.h @@ -121,6 +121,10 @@ void __dl_list_del(dl_list_item *, dl_list_head *); (iter->member.next == &head->member ? \ NULL : container_of(iter->member.next, type, member)) +#define dl_list_prev_iter(iter, head, type, member) \ + (&iter->member == &head->member ? \ + NULL : container_of(iter->member.prev, type, member)) + #define dl_list_for_each(pos, head, type, member) \ for (pos = head; \ pos != NULL; \ @@ -140,8 +144,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *); #define dl_list_for_each_rev(pos, head, type, member) \ for (pos = dl_list_last(head, type, member); \ pos != NULL; \ - pos = (pos == head ? \ - NULL : container_of(pos->member.prev, type, member))) + pos = dl_list_prev_iter(pos, (head), type, member)) diff --git a/src/common/environment.c b/src/common/environment.c new file mode 100644 index 0000000..a0fa568 --- /dev/null +++ b/src/common/environment.c @@ -0,0 +1,94 @@ + +/* OpenIDA - Outil d'analyse de fichiers binaires + * environment.c - manipulations des variables d'environnement. + * + * Copyright (C) 2010 Cyrille Bagard + * + * This file is part of OpenIDA. + * + * OpenIDA 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. + * + * OpenIDA 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 Foobar. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "environment.h" + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +#include "extstr.h" + + + +/****************************************************************************** +* * +* Paramètres : name = désignation de la variable à traiter. * +* * +* Description : Fournit le contenu d'une variable d'environnement. * +* * +* Retour : Chaîne à libérer de la mémoire après usage. * +* * +* Remarques : - * +* * +******************************************************************************/ + +char *get_env_var(const char *name) +{ + char *result; /* Chaîne à retourner */ + + result = getenv(name); + + if (result == NULL) result = strdup(""); + else result = strdup(name); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : name = désignation de la variable à traiter. * +* value = valeur à ajouter à la variable. * +* sep = séparateur entre champs. * +* * +* Description : Complète le contenu d'une variable d'environnement. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool add_to_env_var(const char *name, const char *value, const char *sep) +{ + char *content; /* Contenu final à définir */ + int ret; /* Bilan d'un appel système */ + + content = get_env_var(name); + + if (strlen(content) > 0) content = stradd(content, sep); + + content = stradd(content, value); + + ret = setenv(name, content, 1); + if (ret != 0) perror(setenv); + + free(content); + + return (ret == 0); + +} diff --git a/src/common/environment.h b/src/common/environment.h new file mode 100644 index 0000000..a96c6eb --- /dev/null +++ b/src/common/environment.h @@ -0,0 +1,40 @@ + +/* OpenIDA - Outil d'analyse de fichiers binaires + * environment.h - prototypes pour la manipulations des variables d'environnement. + * + * Copyright (C) 2010 Cyrille Bagard + * + * This file is part of OpenIDA. + * + * OpenIDA 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. + * + * OpenIDA 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 Foobar. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _COMMON_ENVIRONMENT_H +#define _COMMON_ENVIRONMENT_H + + +#include <stdbool.h> + + + +/* Fournit le contenu d'une variable d'environnement. */ +char *get_env_var(const char *); + +/* Complète le contenu d'une variable d'environnement. */ +bool add_to_env_var(const char *, const char *, const char *); + + + +#endif /* _COMMON_ENVIRONMENT_H */ |