.\" 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 <envz.h>"

.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 <stdio.h>
#include <stdlib.h>
#include <envz.h>

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)
