.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de) .\" .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE) .\" Distributed under GPL .\" %%%LICENSE_END .\" .\" based on the description in glibc source and infopages .\" .\" Corrections and additions, aeb .TH ENVZ_ADD 3 2015-03-02 "" "Linux Programmer's Manual" .SH NAME envz_add, envz_entry, envz_get, envz_merge, envz_remove, envz_strip \- environment string support .SH SYNOPSIS .nf .B "#include " .BI "error_t envz_add(char **" envz ", size_t *" envz_len , .BI " const char *" name ", const char *" value ); .BI "char *envz_entry(const char *" envz ", size_t " envz_len \ ", const char *" name ); .BI "char *envz_get(const char *" envz ", size_t " envz_len \ ", const char *" name ); .BI "error_t envz_merge(char **" envz ", size_t *" envz_len , .BI " const char *" envz2 ", size_t " envz2_len \ ", int " override ); .BI "void envz_remove(char **" envz ", size_t *" envz_len \ ", const char *" name ); .BI "void envz_strip(char **" envz ", size_t *" envz_len ); .fi .SH DESCRIPTION These functions are glibc-specific. .LP An argz vector is a pointer to a character buffer together with a length, see .BR argz_add (3). An envz vector is a special argz vector, namely one where the strings have the form "name=value". Everything after the first \(aq=\(aq is considered to be the value. If there is no \(aq=\(aq, the value is taken to be NULL. (While the value in case of a trailing \(aq=\(aq is the empty string "".) .LP These functions are for handling envz vectors. .LP .BR envz_add () adds the string .RI \&" name = value \&" (in case .I value is non-NULL) or .RI \&" name \&" (in case .I value is NULL) to the envz vector .RI ( *envz ,\ *envz_len ) and updates .I *envz and .IR *envz_len . If an entry with the same .I name existed, it is removed. .LP .BR envz_entry () looks for .I name in the envz vector .RI ( envz ,\ envz_len ) and returns the entry if found, or NULL if not. .LP .BR envz_get () looks for .I name in the envz vector .RI ( envz ,\ envz_len ) and returns the value if found, or NULL if not. (Note that the value can also be NULL, namely when there is an entry for .I name without \(aq=\(aq sign.) .LP .BR envz_merge () adds each entry in .I envz2 to .IR *envz , as if with .BR envz_add (). If .I override is true, then values in .I envz2 will supersede those with the same name in .IR *envz , otherwise not. .LP .BR envz_remove () removes the entry for .I name from .RI ( *envz ,\ *envz_len ) if there was one. .LP .BR envz_strip () removes all entries with value NULL. .SH RETURN VALUE All envz functions that do memory allocation have a return type of .IR error_t , and return 0 for success, and .B ENOMEM if an allocation error occurs. .SH ATTRIBUTES For an explanation of the terms used in this section, see .BR attributes (7). .TS allbox; lbw27 lb lb l l l. Interface Attribute Value T{ .BR envz_add (), .BR envz_entry (), .br .BR envz_get (), .BR envz_merge (), .br .BR envz_remove (), .BR envz_strip () T} Thread safety MT-Safe .TE .SH CONFORMING TO These functions are a GNU extension. Handle with care. .SH EXAMPLE .nf #include #include #include int main(int argc, char *argv[], char *envp[]) { int i, e_len = 0; char *str; for (i = 0; envp[i] != NULL; i++) e_len += strlen(envp[i]) + 1; str = envz_entry(*envp, e_len, "HOME"); printf("%s\en", str); str = envz_get(*envp, e_len, "HOME"); printf("%s\en", str); exit(EXIT_SUCCESS); } .fi .SH SEE ALSO .BR argz_add (3) .SH COLOPHON This page is part of release 4.10 of the Linux .I man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at \%https://www.kernel.org/doc/man\-pages/.