#include <stdlib.h> int putenv(char *string);
Описание для libc4, libc5, glibc: если аргумент string имеет форму name и не содержит символ `=', то переменная name изымается из окружения. Если putenv() выделяет новый массив environ и предыдущий массив также был выделен в putenv(), то данный массив будет освобожден. В любом случае, прежнее пространство, ассоциированное с переменными окружения, не будет освобождено.
Версии для libc4, libc5 и glibc 2.1.2 соответствуют SUSv2: используется указатель string, передаваемый putenv(). Строка, например, становится частью окружения; последующее ее изменение приводит к изменению окружения. Таким образом, ошибочным будет вызывать putenv() с автоматической переменной в качестве аргумента, т.к. после возврата из вызываемой функции строка string по-прежнему останется частью окружения. Однако, версии glibc 2.0-2.1.1 работают по-другому: используется копия строки. С одной стороны, это вызывает утечку памяти, с другой стороны, это не соответствует SUSv2. Эта ошибка исправлена в glibc2.1.2.
Версия BSD4.4, как и glibc 2.0, использует копию строки.
SUSv2 удаляет `const' из прототипа (что также реализовано в glibc 2.1.3).
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |