ARGZ_ADD(3)                                                        ARGZ_ADD(3)

       argz_add, argz_add_sep, argz_append, argz_count, argz_create, argz_cre-
       ate_sep,    argz_delete,    argz_extract,    argz_insert,    argz_next,
       argz_replace, argz_stringify - functions to handle an argz list

       #include <argz.h>

       argz_add(char **argz, size_t *argz_len, const char *str);

       argz_add_sep(char **argz, size_t *argz_len,
                    const char *str, int delim);

       argz_append(char **argz, size_t *argz_len,
                    const char *buf, size_t buf_len);

       argz_count(const char *argz, size_t argz_len);

       argz_create(char * const argv[], char **argz,
                    size_t *argz_len);

       argz_create_sep(const char *str, int sep, char **argz,
                    size_t *argz_len);

       argz_delete(char **argz, size_t *argz_len, char *entry);

       argz_extract(char *argz, size_t argz_len, char  **argv);

       argz_insert (char **argz, size_t *argz_len, char *before,
                    const char *entry);

       char *
       argz_next(char *argz, size_t argz_len, const char *entry);

       argz_replace(char **argz, size_t *argz_len, const char *str,
                    const char *with, unsigned int *replace_count);

       argz_stringify(char *argz, size_t len, int sep);

       These functions are glibc-specific.

       An  argz  vector  is  a  pointer  to a character buffer together with a
       length.  The intended interpretation of the character buffer  is  array
       of  strings,  where  the  strings  are  separated by NUL bytes.  If the
       length is nonzero, the last byte of the buffer must be a NUL.

       These functions are for handling argz vectors.  The pair (NULL,0) is an
       argz  vector,  and, conversely, argz vectors of length 0 must have NULL
       pointer.  Allocation of nonempty argz vectors is done using  malloc(3),
       so that free(3) can be used to dispose of them again.

       argz_add()  adds  the  string  str  at  the end of the array *argz, and
       updates *argz and *argz_len.

       argz_add_sep() is similar, but splits the string  str  into  substrings
       separated by the delimiter delim.  For example, one might use this on a
       Unix search path with delimiter ':'.

       argz_append()   appends   the   argz   vector    (buf,buf_len)    after
       (*argz,*argz_len)  and  updates  *argz and *argz_len.  (Thus, *argz_len
       will be increased by buf_len.)

       argz_count() counts the number of strings, that is, the number  of  NUL
       bytes, in (argz,argz_len).

       argz_create() converts a Unix-style argument vector argv, terminated by
       (char *) 0, into an argz vector (*argz,*argz_len).

       argz_create_sep() converts the NUL-terminated string str into  an  argz
       vector  (*argz,*argz_len)  by breaking it up at every occurrence of the
       separator sep.

       argz_delete() removes the substring pointed to by entry from  the  argz
       vector (*argz,*argz_len) and updates *argz and *argz_len.

       argz_extract()  is  the  opposite  of argz_create().  It takes the argz
       vector (argz,argz_len) and fills the array starting at argv with point-
       ers  to the substrings, and a final NULL, making a Unix-style argv vec-
       tor.  The array argv must have room for argz_count(argz,argz_len)  +  1

       argz_insert()  is  the opposite of argz_delete().  It inserts the argu-
       ment entry at position before into the  argz  vector  (*argz,*argz_len)
       and  updates  *argz  and *argz_len.  If before is NULL, then entry will
       inserted at the end.

       argz_next() is a function to step trough the argz vector. If  entry  is
       NULL,  the  first  entry is returned. Otherwise, the entry following is
       returned. It returns NULL if there is no following entry.

       argz_replace() replaces each occurrence of str with with,  reallocating
       argz as necessary. If replace_count is non-NULL, *replace_count will be
       incremented by the number of replacements.

       argz_stringify() is the opposite of argz_create_sep().   It  transforms
       the  argz  vector into a normal string by replacing all NULs except the
       last by sep.

       All argz functions that do memory allocation  have  a  return  type  of
       error_t,  and  return  0 for success, and ENOMEM if an allocation error

       Argz vectors without final NUL may lead to Segmentation Faults.

       These functions are a GNU extension. Handle with care.