#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 является указателем на символьный буфер вместе с его длиной. Запланированной интерпретацией символьного буфера является массив строк, разделенных байтами NUL. Если длина ненулевая, то последний байт в буфере должен быть NUL.
Эти функции предназначены для обработки векторов argz. Пары (NULL,0) являются вектором argz и, наоборот векторы argz длиной 0 должны иметь указатель NULL. Распределение непустых векторов argz осуществляется через использование malloc(3), так что потом может использоваться free(3) для их высвобождения.
argz_add() добавляет строку str в конец массива *argz, и обновляет *argz и *argz_len.
argz_add_sep() похоже, но разделяет строку str в подстроки, разделенные символом delim. Например, можно использовать это для путей поиска Unix с разделителем ':'.
argz_append() добавляет вектор argz (buf,buf_len) после (*argz,*argz_len) и обновляет *argz и *argz_len. (Таким образом, *argz_len будет увеличено на buf_len.)
argz_count() подсчитывает число строк, то есть число байтов NUL в (argz,argz_len).
argz_create() преобразует аргумент вектора argv в стиле Unix, заканчивающийся на (char *) 0, в вектор argz (*argz,*argz_len).
argz_create_sep() преобразует строку, заканчивающуюся на NUL str в вектор argz (*argz,*argz_len) разделяя его при каждой встрече разделителя sep.
argz_delete() удаляет подстроки, на которые указывают entry из вектора argz (*argz,*argz_len) и обновляет *argz и *argz_len.
argz_extract() является противоположностью для argz_create(). Берется вектор argz (argz,argz_len) и заполняет массив, начиная с argv указателями на подстроки и завершая его NULL, тем самым создавая вектор argv в стиле Unix. Массив argv должен иметь пространство для argz_count(argz,argz_len) + 1 указателей.
argz_insert() является противоположностью для argz_delete(). Она вставляет аргумент entry с позиции before в вектор argz (*argz,*argz_len) и обновляет *argz и *argz_len. Если before равно NULL, то entry будет вставлено в конец.
argz_next() является функцией для прохода через argz на следующий вектор. Если entry равно NULL, то возвращается первый элемент. Иначе возвращается следующий элемент. Если последующего элемента нет, то возвращается NULL.
argz_replace() заменяет каждую найденную строку str на with, перераспределяя argz при необходимости. Если replace_count не равно NULL, то *replace_count будет увеличено на число этих вхождений.
argz_stringify() является противоположностью для argz_create_sep(). Она преобразует вектор argz в обычные строки, заменяя все NUL за исключением последнего за позицией sep.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |