CS(computer science)

[minishell] - setenv 함수 구현하기

ebang 2023. 1. 13. 23:00
반응형

1. setenv

환경변수를 등록하거나 변경하는 함수이다. 

- 헤더: stdlib.h
- 형태: **int** setenv(**const** **char** *envname, **const** **char** *envval, **int** overwrite)
- 인수: 
**char** *envname 환경 변수 이름
**char** *envval 변수값
**int** overwrite 이미 같은 이름의 변수가 있다면 값을 변경할지의 여부
- 반환: **int** 성공하면 0, 실패하면 -1

 

설계한 pseudo code는 다음과 같다. 

설계한 pseudo code
1. key_finder를 통해 원하는 key를 불러온다. (=이전의 문자열)

2. key를 이용해서 맞는 환경변수의 value를 찾는다. 

3. key는 있으나 value가 없다면 putenv 함수를 이용해서 새롭게 만든다. 

4. 이미 value가 있다면 strdup을 한 후, 본래의 value는 free 해주고 strdup한 문자열로 대체한다.

 

구현한 코드는 다음과 같다. 

t_bool	ft_setenv(const char *key_value, char ***env)
{
	int		idx;
	char	*key;
	char	*tmp;

	key = key_finder(key_value, 0);
	if (key == 0)
		return (1);
	idx = index_of(key, *env);
	free(key);
	if ((*env)[idx] == 0)
		return (ft_putenv(key_value, env));
	tmp = ft_strdup(key_value);
	if (tmp == 0)
		return (1);
	free((*env)[idx]);
	(*env)[idx] = tmp;
	return (0);
}
반응형