Minishell 1.0
42 School Minishell Project - A simple shell implementation
Yüklüyor...
Arıyor...
Eşleşme Yok
builtin_unset.c
Bu dosyanın dokümantasyonuna git.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* builtin_unset.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: hgenc <hgenc@student.42kocaeli.com.tr> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2026/01/17 18:47:00 by hgenc #+# #+# */
9/* Updated: 2026/01/18 17:25:00 by hgenc ### ########.fr */
10/* */
11/* ************************************************************************** */
12
14#include <stdlib.h>
15
16/*
17** Listeden belirtilen key'e sahip node'u siler
18** Linked list'te önceki ve sonraki bağlantıları düzeltir
19** Bellek sızıntısını önlemek için env ve node'u free eder
20*/
21static void remove_env_node(t_shell *shell, char *key)
22{
23 t_list *curr;
24 t_list *prev;
25 t_env *env;
26
27 curr = shell->env_list;
28 prev = NULL;
29 while (curr)
30 {
31 env = (t_env *)curr->content;
32 if (ft_strcmp(env->key, key) == 0)
33 {
34 if (prev)
35 prev->next = curr->next;
36 else
37 shell->env_list = curr->next;
38 free_env_node(env);
39 free(curr);
40 return ;
41 }
42 prev = curr;
43 curr = curr->next;
44 }
45}
46
47/*
48** unset builtin - ortam değişkenini siler
49** unset VAR -> VAR'ı sil
50** unset A B C -> hepsini sil
51** Geçersiz identifier'larda hata ver ama devam et
52** is_valid_identifier() ve shell_error() ortak fonksiyonlarını kullanır
53*/
54int builtin_unset(t_shell *shell, t_cmd *cmd)
55{
56 int i;
57
58 i = 1;
59 while (cmd->args[i])
60 {
61 if (cmd->args[i][0] == '-')
62 {
63 shell_error("unset", cmd->args[i],
64 "invalid option");
65 return (2);
66 }
67 if (cmd->args[i][0] == '\0')
68 ;
69 else if (!is_valid_identifier(cmd->args[i]))
70 shell_error("unset", cmd->args[i],
71 "not a valid identifier");
72 else
73 remove_env_node(shell, cmd->args[i]);
74 i++;
75 }
76 return (0);
77}
static void remove_env_node(t_shell *shell, char *key)
int builtin_unset(t_shell *shell, t_cmd *cmd)
int is_valid_identifier(char *str)
void free_env_node(void *content)
Ortam değişkeni node'unu serbest bırakır.
void shell_error(char *cmd, char *arg, char *msg)
Minishell ana header dosyası
struct s_cmd t_cmd
struct s_env t_env
-----> EXPANDER <--—
struct s_shell t_shell
char ** args
Definition minishell.h:129
char * key
Definition minishell.h:94
t_list * env_list
Definition minishell.h:149
int ft_strcmp(const char *s1, const char *s2)
Definition utils.c:48