#include <argz.h> error_t argz_add(char **argz, size_t *argz_len, const char *str); error_t argz_add_sep(char **argz, size_t *argz_len,
const char *str, int delim); error_t argz_append(char **argz, size_t *argz_len,
const char *buf, size_t buf_len); size_t argz_count(const char *argz, size_t argz_len); error_t argz_create(char * const argv[], char **argz,
size_t *argz_len); error_t argz_create_sep(const char *str, int sep, char **argz,
size_t *argz_len); error_t argz_delete(char **argz, size_t *argz_len, char *entry); void argz_extract(char *argz, size_t argz_len, char **argv); error_t 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); error_t argz_replace(char **argz, size_t *argz_len, const char *str,
const char *with, unsigned int *replace_count); void argz_stringify(char *argz, size_t len, int sep);
argz vector は長さ情報付きの文字バッファへのポインタである。 文字バッファでは、複数の文字列が NULL バイト ('\0') で区切られており、 文字列の配列として解釈されるようになっている。 長さが 0 でない場合、バッファの最後のバイトは NULL バイトでなければならない。
これらの関数は argz vector を操作するためのものである。 ペア (NULL,0) は argz vector であり、逆に言えば 長さ 0 の argz vectorは NULL ポインタを持たなければならない。 空でない argz vector の割り当ては malloc(3) を使って行われる。したがって、argz vector を解放するのに free(3) を使うことができる。
argz_add() は、文字列 str を配列 *argz の末尾に追加し、 *argz と *argz_len を更新する。
argz_add_sep() も同様の動作をするが、区切り文字 delim にしたがって文字列 str を複数の文字列に分割する点が異なる。 例えば、区切り文字 ':' を指定して、Unix サーチ・パスに対して この関数を使うことができるだろう。
argz_append() は argz vector (buf,buf_len) の後ろに (*argz,*argz_len) を付け加え、 *argz と *argz_len を更新する。 (したがって、 *argz_len は buf_len だけ増加する。)
argz_count() は (argz,argz_len) 内の文字列の数を数える。実際には NULL バイト ('\0') の数を数えている。
argz_create() は、Unix 流の引き数ベクトルである argv ((char *) 0 で終端される) を、argz vector (*argz,*argz_len) に変換する。
argz_create_sep() は、NULL 終端された文字列 str を区切り文字 sep が現れる毎に分割しながら、argz vector (*argz,*argz_len) に変換する。
argz_delete() は、 entry で指し示された文字列を argz vector (*argz,*argz_len) から削除し、 *argz と *argz_len を更新する。
argz_extract() は argz_create() の反対の操作を行う。argz vector (argz,argz_len) を調べ、 argv から始まる配列をサブ文字列へのポインタで埋めていき、 一番最後に NULL を入れて、Unix 流の argv ベクトルを作成する。 配列 argv は argz_count(argz,argz_len) + 1 個のポインタを収容できる空間を持っていなければならない。
argz_insert() は argz_delete() の反対の操作を行う。argz vector (*argz,*argz_len) の位置 before に引き数 entry を挿入し、 *argz と *argz_len を更新する。 before が NULL の場合、 entry は末尾に挿入される。
argz_next() は argz vector を順番に調べるための関数である。 entry が NULL の場合、最初のエントリを返す。 そうでない場合、次のエントリを返す。 次のエントリがない場合、NULL を返す。
argz_replace() は、 str をすべて with で置き換える (必要に応じて argz の再割り当てを行う)。 replace_count が NULL でない場合、 *replace_count を置き換えを行った数だけ増やす。
argz_stringify() は argz_create_sep() の反対の操作を行う。 末尾の NULL バイト以外の全ての NULL バイト ('\0') を sep で置き換えて、 argz vector を通常の文字列に変換する。