envz_add(3) envz_strip

ОБЗОР

#include <envz.h>
error_t envz_add(char **envz, size_t *envz_len,
const char *name, const char *value);
char *envz_entry(const char *envz, size_t envz_len, const char *name);
char *envz_get(const char *envz, size_t envz_len, const char *name);
error_t envz_merge(char **envz, size_t *envz_len,
const char *envz2, size_t envz2_len, int override);
void envz_remove(char **envz, size_t *envz_len, const char *name);
void envz_strip(char **envz, size_t *envz_len);

ОПИСАНИЕ

Эти функции есть только в glibc.

Вектор argz представляет собой указатель на символьный буфер и его длину (смотрите argz_add(3)). Вектор envz является особым вектором argz, в нём содержатся строки вида «имя=значение». Всё, что расположено за первым '=', считается значением. Если '=' отсутствует, то значение считается равным NULL (если '=' указано в конце, то значение равно пустой строке "").

Эти функции предназначены для работы с векторами envz.

Функция envz_add() добавляет строку "name=value" (если name не равно NULL) или "name" (если value равно NULL) в вектор envz (*envz*envz_len) и обновляет *envz и *envz_len. Если запись с таким значением name уже существует, то она удаляется.

Функция envz_entry() ищет значение name в векторе envz (envzenvz_len) и возвращает запись, если такое имя найдено, и NULL, если не найдено.

Функция envz_get() ищет значение name в векторе envz (envzenvz_len) и возвращает значение, если такое имя найдено, и NULL, если не найдено (заметим, что значение само по себе может быть равно NULL, особенно, если есть запись для name без знака '=').

Функция envz_merge() добавляет все записи из envz2 в *envz, как если бы это делалось с помощью envz_add(). Если значение override истинно, то значения в envz2 будут заменять значения с такими же именами в *envz, иначе — нет.

Функция envz_remove() удаляет запись для name из (*envz*envz_len), если она есть.

Функция envz_strip() удаляет все записи со значением NULL.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Все функции envz, в которых происходит выделение памяти, возвращают результат, имеющий тип error_t: 0 — при успешном выполнении и ENOMEM — при ошибке выделения памяти.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
ИнтерфейсАтрибутЗначение
envz_add(), envz_entry(),
envz_get(), envz_merge(),
envz_remove(), envz_strip()
безвредность в нитяхбезвредно (MT-Safe)

СООТВЕТСТВИЕ СТАНДАРТАМ

Данные функции являются расширениями GNU. Используйте с осторожностью.

ПРИМЕР

#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\n", str);
    str = envz_get(*envp, e_len, "HOME");
    printf("%s\n", str);
    exit(EXIT_SUCCESS);
}