1 /* Routines for dealing with '\0' separated environment vectors 2 Copyright (C) 1995-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #ifndef _ENVZ_H 20 #define _ENVZ_H 1 21 22 #include <features.h> 23 24 #include <errno.h> 25 26 /* Envz's are argz's too, and should be created etc., using the same 27 routines. */ 28 #include <argz.h> 29 30 __BEGIN_DECLS 31 32 /* Returns a pointer to the entry in ENVZ for NAME, or 0 if there is none. */ 33 extern char *envz_entry (const char *__restrict __envz, size_t __envz_len, 34 const char *__restrict __name) 35 __THROW __attribute_pure__; 36 37 /* Returns a pointer to the value portion of the entry in ENVZ for NAME, or 0 38 if there is none. */ 39 extern char *envz_get (const char *__restrict __envz, size_t __envz_len, 40 const char *__restrict __name) 41 __THROW __attribute_pure__; 42 43 /* Adds an entry for NAME with value VALUE to ENVZ & ENVZ_LEN. If an entry 44 with the same name already exists in ENVZ, it is removed. If VALUE is 45 NULL, then the new entry will a special null one, for which envz_get will 46 return NULL, although envz_entry will still return an entry; this is handy 47 because when merging with another envz, the null entry can override an 48 entry in the other one. Null entries can be removed with envz_strip (). */ 49 extern error_t envz_add (char **__restrict __envz, 50 size_t *__restrict __envz_len, 51 const char *__restrict __name, 52 const char *__restrict __value) __THROW; 53 54 /* Adds each entry in ENVZ2 to ENVZ & ENVZ_LEN, as if with envz_add(). If 55 OVERRIDE is true, then values in ENVZ2 will supersede those with the same 56 name in ENV, otherwise not. */ 57 extern error_t envz_merge (char **__restrict __envz, 58 size_t *__restrict __envz_len, 59 const char *__restrict __envz2, 60 size_t __envz2_len, int __override) __THROW; 61 62 /* Remove the entry for NAME from ENVZ & ENVZ_LEN, if any. */ 63 extern void envz_remove (char **__restrict __envz, 64 size_t *__restrict __envz_len, 65 const char *__restrict __name) __THROW; 66 67 /* Remove null entries. */ 68 extern void envz_strip (char **__restrict __envz, 69 size_t *__restrict __envz_len) __THROW; 70 71 __END_DECLS 72 73 #endif /* envz.h */ 74