Minishell 1.0
42 School Minishell Project - A simple shell implementation
Yüklüyor...
Arıyor...
Eşleşme Yok
minishell.h Dosya Referansı

Minishell ana header dosyası Ayrıntılar...

#include "../libft/libft.h"
#include "garbage_collector.h"
#include <signal.h>
#include <stddef.h>
#include <stdio.h>
minishell.h için içerme bağımlılık grafiği:
Bu şekil hangi dosyaların doğrudan ya da dolaylı olarak bu dosyayı içerdiğini gösterir:

Bu dosyanın kaynak koduna git.

Veri Yapıları

struct  s_token
struct  s_env
 -----> EXPANDER <--— Ayrıntılar...
struct  s_expansion_parts
struct  s_token_cleaner
struct  s_redir
struct  s_cmd
struct  s_ast
struct  s_shell

Makrolar

#define TRUE   1
#define FALSE   0
#define LLONG_MAX_VAL   9223372036854775807ULL

Typedef'ler

typedef enum e_token_type t_token_type
 -----> LEXER <--—
typedef enum e_char_category t_char_category
typedef enum e_operator_type t_operator_type
typedef enum e_quote_type t_quote_type
typedef struct s_token t_token
typedef struct s_env t_env
 -----> EXPANDER <--—
typedef struct s_expansion_parts t_expansion_parts
typedef struct s_token_cleaner t_token_cleaner
typedef enum e_redir_type t_redir_type
 -----> PARSER <--—
typedef struct s_redir t_redir
typedef struct s_cmd t_cmd
typedef enum e_node_type t_node_type
typedef struct s_ast t_ast
typedef struct s_shell t_shell

Enümerasyonlar

enum  e_token_type {
  TOKEN_WORD , TOKEN_PIPE , TOKEN_REDIR_IN , TOKEN_REDIR_OUT ,
  TOKEN_HEREDOC , TOKEN_REDIR_APPEND , TOKEN_EOF , TOKEN_ERROR ,
  TOKEN_NEWLINE
}
 -----> LEXER <--— Ayrıntılar...
enum  e_char_category { CHAR_CATEGORY_WORD , CHAR_CATEGORY_QUOTE , CHAR_CATEGORY_OPERATOR }
enum  e_operator_type {
  OP_PIPE , OP_REDIR_IN , OP_REDIR_OUT , OP_HEREDOC ,
  OP_REDIR_APPEND , OP_NONE
}
enum  e_quote_type { QUOTE_NONE , QUOTE_SINGLE , QUOTE_DOUBLE }
enum  e_redir_type { REDIR_IN , REDIR_OUT , REDIR_HEREDOC , REDIR_APPEND }
 -----> PARSER <--— Ayrıntılar...
enum  e_node_type { NODE_PIPE , NODE_CMD , NODE_SEQ }

Fonksiyonlar

void free_env_node (void *content)
 Ortam değişkeni node'unu serbest bırakır.
t_envcreate_env_content (char *key, char *value)
 Ortam değişkeni içeriği oluşturur.
int append_env_node (t_list **env_list, char *key, char *value)
 Ortam değişkeni node'u listeye ekler.
int init_default_env (t_shell *shell)
 Varsayılan ortam değişkenlerini oluşturur (envp boşsa).
int init_env_list (t_shell *shell)
 Ortam değişkenleri listesini başlatır.
int parse_env_line (t_shell *shell, char *env_str)
 Tek bir ortam değişkeni satırını ayrıştırıp listeye ekler.
int parse_env_variables (t_shell *shell)
 Tüm ortam değişkenlerini (envp) ayrıştırarak listeye ekler.
t_envfind_env_by_key (t_list *env_list, char *key)
 Env listesinde key'e göre arama yapar.
int update_env_value (t_list *env_list, char *key, char *new_value)
 Mevcut env değişkeninin değerini günceller.
char * env_to_str (t_env *env)
 t_env yapısını "KEY=VALUE" formatına çevir
char ** create_envp (t_shell *shell)
 shell->env_list'i char **envp formatına çevir
int process_next_token (t_shell *shell, int i)
 Bir sonraki token'ı işler.
int lexer (t_shell *shell)
 Lexer ana fonksiyonu — komut satırını token'lara ayırır.
t_quote_type assess_quote_type (char c)
int handle_quote (t_shell *shell, int i)
int handle_word (t_shell *shell, int i)
t_char_category assess_char_category (char c)
int category_dispatcher (t_shell *shell, t_char_category category, int i)
t_operator_type assess_operator_type (char *cmd, int i)
int consume_operator (t_shell *shell, t_token_type type, char *val, int len)
int operator_dispatcher (t_shell *shell, t_operator_type op_type)
int handle_operator (t_shell *shell, int i)
t_tokencreate_token (t_token_type type, char *value, t_quote_type quote_type)
int append_token (t_shell *shell, t_token_type type, char *value, t_quote_type quote_type)
void mark_last_token_adjacent (t_shell *shell)
void merge_adjacent_tokens (t_shell *shell)
int expand_variable (t_shell *shell, t_token *token)
 Bir token'ın içeriğindeki değişkenleri ($VAR) tarar ve değiştirir.
int expander_dispatcher (t_shell *shell, t_token *current, t_token *prev)
 Token'ın genişletilip genişletilmeyeceğine karar veren dağıtıcı.
int expander (t_shell *shell)
 Expander modülünün giriş noktası ve ana döngüsü.
t_envextract_variable_info (t_shell *shell, char *str)
 Değişken ismini ve değerini bulup bir t_env paketi içinde döndürür.
int check_var_extraction (t_env *var, int *i)
 Çıkarılan değişken paketinin durumunu kontrol eder.
int apply_variable_replacement (t_token *token, t_env *var, int *i)
 Değişken değişimini token üzerinde uygular ve indeksi günceller.
int process_variable_replacement (t_shell *shell, t_token *token, int *i)
 Tek bir genişletme işleminin tüm sürecini yöneten orkestra şefi.
int replace_token_value (t_token *token, char *var_value, int index, int len_name)
 Token'ın string değerindeki bir değişkeni, gerçek değeriyle değiştirir.
int can_expand (char next_c)
 '$' işaretinden sonra gelen karakterin genişletmeye uygun olup olmadığını kontrol eder.
int get_var_name_len (char *str)
 Değişken isminin uzunluğunu hesaplar.
char * get_env_value (t_list *env_list, char *key)
 Environment listesinde key'e göre değer döndürür.
char * get_var_value (t_shell *shell, char *var_name)
 Bir değişkenin değerini bulur ve kopyasını döndürür.
void process_token_cleanup (t_shell *shell, t_token_cleaner *vars)
 Tek bir token düğümü için silme veya ilerleme mantığını yürütür.
void remove_empty_tokens (t_shell *shell)
 Expander sonrası oluşan boş ve tırnaksız tokenları listeden temizler.
int handle_redir (t_ast *node, t_list **tokens)
 Yönlendirme token'ını işler.
t_astparse_simple_command (t_list **tokens)
 Basit komutu parse eder.
t_astparse_pipe (t_list **tokens)
 Pipe ifadesini parse eder: simple_command | parse_pipe.
t_astparse_sequence (t_list **tokens)
 Ardışık komutları (newline ile ayrılmış) parse eder.
t_astconstruct_ast (t_shell *shell, t_list **token_list)
 Token listesinden AST oluşturur.
int parser (t_shell *shell)
 Parser ana fonksiyonu.
int is_parsing_success (t_ast *root, t_list *curr_token)
 Parsing işleminin başarılı olup olmadığını kontrol eder.
int handle_parser_success (t_shell *shell, t_ast *root)
 Başarılı parsing sonrası AST'yi shell'e atar.
int count_cmd_args (char **args)
 Komut argüman sayısını hesaplar.
t_redir_type token_to_redir_type (t_token_type type)
 Token tipini redirection tipine dönüştürür.
t_tokenpeek_token (t_list *tokens)
 Token listesinin başındaki token'a bakar (ilerletmez).
void advance_token (t_list **tokens)
 Token listesini bir ileri taşır.
int handle_parser_error (t_shell *shell, t_ast *root, t_list *tok)
 Parser hata durumunda temizlik yapar.
void free_redir (void *redir)
 Tek bir yönlendirme yapısını serbest bırakır.
void free_cmd (t_cmd *cmd)
 Komut yapısını ve içindeki tüm verileri serbest bırakır.
void clean_ast (t_ast *node)
 AST ağacını recursive olarak temizler.
int check_token_context (t_shell *shell, t_list *node, int *p_count)
 Tek bir token düğümü için bağlam ve sıra kontrollerini yürütür.
int validate_token_seq (t_shell *shell, t_list *tokens)
 Token listesini baştan sona gezerek sıralama hatalarını kontrol eder.
int validate_syntax (t_shell *shell, t_list *tokens)
 Sözdizimi doğrulama işleminin giriş noktası (Main Validator).
int validate_first_token (t_shell *shell, t_list *tokens)
 Token listesinin başlangıcındaki yasaklı durumları kontrol eder.
int validate_last_token (t_shell *shell, t_list *tokens)
 Token listesinin sonundaki yasaklı durumları kontrol eder.
int validate_redirection_seq (t_shell *shell, t_list *current_node)
 Yönlendirme operatörlerinin ardışıklığını kontrol eder.
int validate_operator_seq (t_shell *shell, t_list *current_node)
 İkili operatörlerin (|, &&, ||) ardışıklığını kontrol eder.
int is_redirection (t_token_type type)
 Bir token tipinin yönlendirme (Redirection) olup olmadığını kontrol eder.
int is_binary_operator (t_token_type type)
 Bir token tipinin ikili (binary) operatör olup olmadığını kontrol eder.
int is_input_complete (char *line)
 Girdi satırının tamamlanıp tamamlanmadığını kontrol eder.
char * complete_input (t_shell *shell, char *line)
 Eksik girdiyi tamamlamak için ek satırlar okur.
t_astcreate_ast_node (t_node_type type)
 Yeni bir Soyut Sözdizimi Ağacı (AST) düğümü oluşturur.
t_cmdcreate_cmd_content (void)
 Boş bir komut yapısı (t_cmd) oluşturur ve başlatır.
t_redircreate_redir_content (t_redir_type type, char *file, int quoted)
 Yönlendirme (Redirection) verisini tutan yapıyı oluşturur.
int add_redir_node (t_list **redir_list, t_redir *redir_content)
 Oluşturulan yönlendirme içeriğini (t_redir) komutun listesine ekler.
char ** fill_new_args (char **new_args, t_cmd *cmd, char *arg, int arg_count)
 Yeni oluşturulan argüman dizisini dolduran yardımcı fonksiyon.
int add_arg_to_cmd (t_cmd *cmd, char *arg, t_quote_type qt)
 Komutun argüman listesine (argv) yeni bir argüman ekler.
int handle_syntax_error (t_shell *shell, char *unexpected_token)
void shell_error (char *cmd, char *arg, char *msg)
int is_valid_identifier (char *str)
void print_env_declare (t_env *env)
 Tek bir env değişkenini declare -x formatında yazdırır.
t_envfind_min_env (t_list *list, char *last_printed)
 Listedeki en küçük (alfabetik) env'i bulur (zaten yazdırılmamış).
void print_export_list (t_shell *shell)
 Argümansız export - tüm değişkenleri alfabetik sıralı yazdırır.
int process_export_arg (t_shell *shell, char *arg)
int skip_whitespace (char *cmd, int i)
int is_delimiter (char c)
void free_token_content (void *content)
int ft_strcmp (const char *s1, const char *s2)
void setup_signals (void)
void reset_signals (void)
int is_builtin (char *cmd)
int execute_builtin (t_shell *shell, t_cmd *cmd)
int builtin_echo (t_cmd *cmd)
int builtin_pwd (t_shell *shell)
int builtin_env (t_shell *shell, t_cmd *cmd)
char * normalize_logical_path (char *path)
char * compute_logical_pwd (t_shell *shell, char *arg)
void update_pwd_vars (t_shell *shell, char *old_pwd, char *new_pwd)
int change_dir (t_shell *shell, char *new_pwd)
int builtin_cd (t_shell *shell, t_cmd *cmd)
int builtin_export (t_shell *shell, t_cmd *cmd)
int builtin_unset (t_shell *shell, t_cmd *cmd)
int builtin_exit (t_shell *shell, t_cmd *cmd)
int wait_for_child (pid_t pid)
 Child process'i bekle ve exit status al EINTR: sinyal gelirse waitpid'i tekrar dene (zombie bırakma).
int save_std_fds (int *saved_fds)
 stdin ve stdout'u kaydet (builtin için)
int restore_std_fds (int *saved_fds)
 Kaydedilen fd'leri geri yükle.
int is_executable (char *path)
 Dosyanın var olup olmadığını ve çalıştırılabilir olup olmadığını kontrol et.
char * join_path (char *dir, char *cmd)
 Dizin ve komut adını birleştir.
char ** get_path_dirs (t_shell *shell)
 PATH environment değişkenini parse et.
char * search_path (char **dirs, char *cmd)
 PATH dizinlerinde komutu ara.
char * find_cmd_path (t_shell *shell, char *cmd)
 Ana PATH arama fonksiyonu.
int redir_input (t_redir *redir)
int redir_output (t_redir *redir)
int redir_append (t_redir *redir)
int apply_redir (t_shell *shell, t_redir *redir)
 Tek bir redirection uygula.
int setup_redirs (t_shell *shell, t_cmd *cmd)
 Tüm redirectionları uygula.
int redir_heredoc (t_shell *shell, t_redir *redir)
 Heredoc redirection uygula (fork tabanlı).
int create_heredoc_pipe (int *pipefd)
 Heredoc için pipe oluştur.
int write_heredoc_line (int fd, char *line)
 Heredoc satırını pipe'a yaz.
char * append_char (char *str, char c)
 Tek karakteri string sonuna ekle.
char * expand_dollar (t_shell *shell, char *line, char *result, int *i)
 Tek bir $VAR genişletmesi yap ve result'a ekle.
char * expand_heredoc_line (t_shell *shell, char *line)
 Heredoc satırındaki $VAR değişkenlerini genişlet.
int run_builtin_parent (t_shell *shell, t_cmd *cmd)
 Builtin'i parent process'te çalıştır (fork yok).
int execute_external (t_shell *shell, t_cmd *cmd)
 Harici komutu çalıştır — path kontrolü fork öncesi yapılır böylece "command not found" hatası parent'ta sırayla basılır.
int execute_cmd (t_shell *shell, t_cmd *cmd)
 Ana komut çalıştırma dispatcher.
void close_pipe (int *pipefd)
 Pipe fd'lerini kapat.
int execute_pipe (t_shell *shell, t_ast *node)
 Pipe node'unu çalıştır Her iki taraf da child process'te çalışır.
void pipe_left_child (t_shell *shell, t_ast *node, int *pipefd)
 Pipe'ın sol tarafını çalıştır.
void pipe_right_child (t_shell *shell, t_ast *node, int *pipefd)
 Pipe'ın sağ tarafını çalıştır.
int wait_pipe (pid_t left_pid, pid_t right_pid)
 İki child'ı bekle, sağ tarafın exit status'unu döndür.
int execute_ast (t_shell *shell, t_ast *node)
 AST node'unu tipine göre çalıştır.
int executor (t_shell *shell)
 Ana executor entry point.
void cleanup_shell (t_shell *shell)
 Tüm t_shell kaynaklarını serbest bırakır.
void shell_exit (t_shell *shell, int exit_code)
 Shell'i temizleyip programdan çıkar.
void free_str_array (char **arr)
 NULL-terminated string dizisini serbest bırakır.

Değişkenler

volatile sig_atomic_t g_signal
volatile sig_atomic_t g_readline_active

Ayrıntılı tanımlama

Minishell ana header dosyası

Tüm veri yapıları, enum tanımları ve fonksiyon prototiplerini içerir. Proje genelinde kullanılan ortak tanımlar burada bulunur.

Veri Tipleri

Modüller

  • Lexer: Sözcüksel analiz
  • Expander: Değişken genişletme
  • Parser: Sözdizimi analizi
  • Executor: Komut çalıştırma
  • Builtins: Yerleşik komutlar

minishell.h dosyasında tanımlanmıştır.

Makro Dokümantasyonu

◆ TRUE

#define TRUE   1

minishell.h dosyasının 44 numaralı satırında tanımlanmıştır.

◆ FALSE

#define FALSE   0

minishell.h dosyasının 45 numaralı satırında tanımlanmıştır.

◆ LLONG_MAX_VAL

#define LLONG_MAX_VAL   9223372036854775807ULL

minishell.h dosyasının 46 numaralı satırında tanımlanmıştır.

Referans veren check_overflow().

Typedef Dokümantasyonu

◆ t_token_type

typedef enum e_token_type t_token_type

-----> LEXER <--—

◆ t_char_category

◆ t_operator_type

◆ t_quote_type

typedef enum e_quote_type t_quote_type

◆ t_token

typedef struct s_token t_token

◆ t_env

typedef struct s_env t_env

-----> EXPANDER <--—

◆ t_expansion_parts

◆ t_token_cleaner

◆ t_redir_type

typedef enum e_redir_type t_redir_type

-----> PARSER <--—

◆ t_redir

typedef struct s_redir t_redir

◆ t_cmd

typedef struct s_cmd t_cmd

◆ t_node_type

typedef enum e_node_type t_node_type

◆ t_ast

typedef struct s_ast t_ast

◆ t_shell

typedef struct s_shell t_shell

Enümerasyon Tipi Dokümantasyonu

◆ e_token_type

-----> LEXER <--—

Enümeratör
TOKEN_WORD 
TOKEN_PIPE 
TOKEN_REDIR_IN 
TOKEN_REDIR_OUT 
TOKEN_HEREDOC 
TOKEN_REDIR_APPEND 
TOKEN_EOF 
TOKEN_ERROR 
TOKEN_NEWLINE 

minishell.h dosyasının 49 numaralı satırında tanımlanmıştır.

◆ e_char_category

Enümeratör
CHAR_CATEGORY_WORD 
CHAR_CATEGORY_QUOTE 
CHAR_CATEGORY_OPERATOR 

minishell.h dosyasının 61 numaralı satırında tanımlanmıştır.

◆ e_operator_type

Enümeratör
OP_PIPE 
OP_REDIR_IN 
OP_REDIR_OUT 
OP_HEREDOC 
OP_REDIR_APPEND 
OP_NONE 

minishell.h dosyasının 67 numaralı satırında tanımlanmıştır.

◆ e_quote_type

Enümeratör
QUOTE_NONE 
QUOTE_SINGLE 
QUOTE_DOUBLE 

minishell.h dosyasının 76 numaralı satırında tanımlanmıştır.

◆ e_redir_type

-----> PARSER <--—

Enümeratör
REDIR_IN 
REDIR_OUT 
REDIR_HEREDOC 
REDIR_APPEND 

minishell.h dosyasının 115 numaralı satırında tanımlanmıştır.

◆ e_node_type

Enümeratör
NODE_PIPE 
NODE_CMD 
NODE_SEQ 

minishell.h dosyasının 134 numaralı satırında tanımlanmıştır.

Fonksiyon Dokümantasyonu

◆ free_env_node()

void free_env_node ( void * content)

Ortam değişkeni node'unu serbest bırakır.

Parametreler
contentt_env yapısı (void* olarak)

env_initialization.c dosyasının 26 numaralı satırında tanımlanmıştır.

Referanslar s_env::key ve s_env::value.

Referans veren append_env_node(), check_var_extraction(), cleanup_shell(), create_env_content(), extract_variable_info(), init_env_list(), parse_env_variables(), process_variable_replacement() ve remove_env_node().

Bu fonksiyon için çağırılma şeması:

◆ create_env_content()

t_env * create_env_content ( char * key,
char * value )

Ortam değişkeni içeriği oluşturur.

Parametreler
keyDeğişken adı
valueDeğişken değeri
Döndürdüğü değer
t_env* Yeni oluşturulan yapı veya NULL

env_initialization.c dosyasının 46 numaralı satırında tanımlanmıştır.

Referanslar free_env_node(), s_env::key ve s_env::value.

Referans veren append_env_node().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ append_env_node()

int append_env_node ( t_list ** env_list,
char * key,
char * value )

Ortam değişkeni node'u listeye ekler.

env_initialization.c dosyasının 76 numaralı satırında tanımlanmıştır.

Referanslar create_env_content() ve free_env_node().

Referans veren init_default_env(), parse_env_line() ve update_or_add_env().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ init_default_env()

int init_default_env ( t_shell * shell)

Varsayılan ortam değişkenlerini oluşturur (envp boşsa).

env_initialization.c dosyasının 123 numaralı satırında tanımlanmıştır.

Referanslar append_env_node() ve s_shell::env_list.

Referans veren init_env_list().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ init_env_list()

int init_env_list ( t_shell * shell)

Ortam değişkenleri listesini başlatır.

Parametreler
shellShell yapısı
Döndürdüğü değer
int Başarı: 0, Hata: -1

env_initialization.c dosyasının 148 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, s_shell::envp, free_env_node(), init_default_env(), parse_env_variables() ve update_shlvl().

Referans veren init_shell().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ parse_env_line()

int parse_env_line ( t_shell * shell,
char * env_str )

Tek bir ortam değişkeni satırını ayrıştırıp listeye ekler.

Parametreler
shellShell yapısı
env_str"KEY=VALUE" formatında ortam değişkeni stringi
Döndürdüğü değer
int Başarı: 1, Hata: 0

env_parser.c dosyasının 27 numaralı satırında tanımlanmıştır.

Referanslar append_env_node() ve s_shell::env_list.

Referans veren parse_env_variables().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ parse_env_variables()

int parse_env_variables ( t_shell * shell)

Tüm ortam değişkenlerini (envp) ayrıştırarak listeye ekler.

Parametreler
shellShell yapısı
Döndürdüğü değer
int Başarı: 1, Hata: 0

env_parser.c dosyasının 60 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, s_shell::envp, free_env_node() ve parse_env_line().

Referans veren init_env_list().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ find_env_by_key()

t_env * find_env_by_key ( t_list * env_list,
char * key )

Env listesinde key'e göre arama yapar.

Parametreler
env_listOrtam değişkenleri listesi
keyAranacak key
Döndürdüğü değer
Bulunan t_env pointer, bulunamazsa NULL

env_utils.c dosyasının 29 numaralı satırında tanımlanmıştır.

Referanslar ft_strcmp() ve s_env::key.

Referans veren get_env_value(), update_env_value(), update_or_add_env() ve update_shlvl().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ update_env_value()

int update_env_value ( t_list * env_list,
char * key,
char * new_value )

Mevcut env değişkeninin değerini günceller.

Parametreler
env_listOrtam değişkenleri listesi
keyGüncellenecek değişken adı
new_valueYeni değer (NULL olabilir, strdup yapılır)
Döndürdüğü değer
0 = başarılı, 1 = bulunamadı

env_utils.c dosyasının 52 numaralı satırında tanımlanmıştır.

Referanslar find_env_by_key() ve s_env::value.

Referans veren execute_cmd(), execute_external(), update_pwd_vars() ve update_underscore().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ env_to_str()

char * env_to_str ( t_env * env)

t_env yapısını "KEY=VALUE" formatına çevir

Parametreler
envEnvironment node
Döndürdüğü değer
char* malloc'lanmış string

env_utils.c dosyasının 88 numaralı satırında tanımlanmıştır.

Referanslar s_env::key ve s_env::value.

Referans veren create_envp().

Bu fonksiyon için çağırılma şeması:

◆ create_envp()

char ** create_envp ( t_shell * shell)

shell->env_list'i char **envp formatına çevir

Parametreler
shellShell structure
Döndürdüğü değer
char** NULL-terminated array

env_utils.c dosyasının 111 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, env_to_str() ve free_str_array().

Referans veren child_exec().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ process_next_token()

int process_next_token ( t_shell * shell,
int i )

Bir sonraki token'ı işler.

Parametreler
shellShell yapısı
iMevcut indeks
Döndürdüğü değer
int Tüketilen karakter sayısı veya hata için -1

lexer.c dosyasının 31 numaralı satırında tanımlanmıştır.

Referanslar assess_char_category(), category_dispatcher() ve s_shell::cmd_line.

Referans veren lexer().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ lexer()

int lexer ( t_shell * shell)

Lexer ana fonksiyonu — komut satırını token'lara ayırır.

Döndürdüğü değer
int Başarı: 1, Hata: 0

lexer.c dosyasının 60 numaralı satırında tanımlanmıştır.

Referanslar append_token(), s_shell::cmd_line, handle_newline(), mark_last_token_adjacent(), process_next_token(), QUOTE_NONE, skip_whitespace() ve TOKEN_EOF.

Referans veren process_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ assess_quote_type()

t_quote_type assess_quote_type ( char c)

lexer_category_utils.c dosyasının 4 numaralı satırında tanımlanmıştır.

Referanslar QUOTE_DOUBLE, QUOTE_NONE ve QUOTE_SINGLE.

Referans veren handle_quote().

Bu fonksiyon için çağırılma şeması:

◆ handle_quote()

int handle_quote ( t_shell * shell,
int i )

lexer_category_utils.c dosyasının 17 numaralı satırında tanımlanmıştır.

Referanslar append_token(), assess_quote_type(), s_shell::cmd_line ve TOKEN_WORD.

Referans veren category_dispatcher().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ handle_word()

int handle_word ( t_shell * shell,
int i )

lexer_category_utils.c dosyasının 48 numaralı satırında tanımlanmıştır.

Referanslar append_token(), s_shell::cmd_line, is_delimiter(), QUOTE_NONE ve TOKEN_WORD.

Referans veren category_dispatcher().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ assess_char_category()

t_char_category assess_char_category ( char c)

lexer_category_utils.c dosyasının 71 numaralı satırında tanımlanmıştır.

Referanslar CHAR_CATEGORY_OPERATOR, CHAR_CATEGORY_QUOTE ve CHAR_CATEGORY_WORD.

Referans veren process_next_token().

Bu fonksiyon için çağırılma şeması:

◆ category_dispatcher()

int category_dispatcher ( t_shell * shell,
t_char_category category,
int i )

lexer_category_utils.c dosyasının 81 numaralı satırında tanımlanmıştır.

Referanslar CHAR_CATEGORY_OPERATOR, CHAR_CATEGORY_QUOTE, CHAR_CATEGORY_WORD, handle_operator(), handle_quote() ve handle_word().

Referans veren process_next_token().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ assess_operator_type()

t_operator_type assess_operator_type ( char * cmd,
int i )

lexer_operator_utils.c dosyasının 3 numaralı satırında tanımlanmıştır.

Referanslar OP_HEREDOC, OP_NONE, OP_PIPE, OP_REDIR_APPEND, OP_REDIR_IN ve OP_REDIR_OUT.

Referans veren handle_operator().

Bu fonksiyon için çağırılma şeması:

◆ consume_operator()

int consume_operator ( t_shell * shell,
t_token_type type,
char * val,
int len )

lexer_operator_utils.c dosyasının 18 numaralı satırında tanımlanmıştır.

Referanslar append_token() ve QUOTE_NONE.

Referans veren operator_dispatcher().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ operator_dispatcher()

int operator_dispatcher ( t_shell * shell,
t_operator_type op_type )

lexer_operator_utils.c dosyasının 25 numaralı satırında tanımlanmıştır.

Referanslar consume_operator(), OP_HEREDOC, OP_PIPE, OP_REDIR_APPEND, OP_REDIR_IN, OP_REDIR_OUT, TOKEN_HEREDOC, TOKEN_PIPE, TOKEN_REDIR_APPEND, TOKEN_REDIR_IN ve TOKEN_REDIR_OUT.

Referans veren handle_operator().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ handle_operator()

int handle_operator ( t_shell * shell,
int i )

lexer_operator_utils.c dosyasının 50 numaralı satırında tanımlanmıştır.

Referanslar assess_operator_type(), s_shell::cmd_line, handle_operator_error(), OP_NONE ve operator_dispatcher().

Referans veren category_dispatcher().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ create_token()

t_token * create_token ( t_token_type type,
char * value,
t_quote_type quote_type )

lexer_token_utils.c dosyasının 4 numaralı satırında tanımlanmıştır.

Referanslar s_token::quote_type, s_token::type ve s_token::value.

Referans veren append_token().

Bu fonksiyon için çağırılma şeması:

◆ append_token()

int append_token ( t_shell * shell,
t_token_type type,
char * value,
t_quote_type quote_type )

lexer_token_utils.c dosyasının 27 numaralı satırında tanımlanmıştır.

Referanslar create_token(), s_shell::token_list ve s_token::value.

Referans veren consume_operator(), handle_newline(), handle_quote(), handle_word() ve lexer().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ mark_last_token_adjacent()

void mark_last_token_adjacent ( t_shell * shell)

lexer_token_utils.c dosyasının 47 numaralı satırında tanımlanmıştır.

Referanslar s_token::adjacent ve s_shell::token_list.

Referans veren lexer().

Bu fonksiyon için çağırılma şeması:

◆ merge_adjacent_tokens()

void merge_adjacent_tokens ( t_shell * shell)

lexer_token_utils.c dosyasının 76 numaralı satırında tanımlanmıştır.

Referanslar s_token::adjacent, merge_token_pair(), s_shell::token_list, TOKEN_WORD ve s_token::type.

Referans veren process_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ expand_variable()

int expand_variable ( t_shell * shell,
t_token * token )

Bir token'ın içeriğindeki değişkenleri ($VAR) tarar ve değiştirir.

Bu fonksiyon, token'ın string değeri üzerinde bir döngü kurar. '$' işareti bulduğunda, bunun geçerli bir değişken başlangıcı olup olmadığına bakar (can_expand). Geçerliyse, değiştirme işlemini yapan 'process_variable_replacement' fonksiyonunu çağırır.

Parametreler
shellÇevre değişkenlerine ve çıkış koduna erişim sağlayan ana yapı.
tokenİçeriği taranacak ve güncellenecek olan token.
Döndürdüğü değer
int Başarılıysa 1, malloc hatası oluşursa 0.

expander.c dosyasının 27 numaralı satırında tanımlanmıştır.

Referanslar can_expand(), process_variable_replacement(), QUOTE_NONE, s_token::quote_type ve s_token::value.

Referans veren expander_dispatcher().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ expander_dispatcher()

int expander_dispatcher ( t_shell * shell,
t_token * current,
t_token * prev )

Token'ın genişletilip genişletilmeyeceğine karar veren dağıtıcı.

Bu fonksiyon iki temel kuralı kontrol eder:

  1. Heredoc Koruması: Eğer önceki token '<<' ise, şimdiki token bir sınırlayıcıdır (delimiter) ve ASLA genişletilmez.
  2. Tırnak Kuralı: Sadece WORD tipindeki ve TEK TIRNAK içinde olmayan tokenlar genişletilir.
Parametreler
shellAna yapı.
currentİşlem sırasındaki mevcut token.
prevBir önceki token (Heredoc kontrolü için gereklidir).
Döndürdüğü değer
int Başarılıysa (veya işlem gerekmiyorsa) 1, hata varsa 0.

expander.c dosyasının 72 numaralı satırında tanımlanmıştır.

Referanslar expand_variable(), QUOTE_SINGLE, s_token::quote_type, TOKEN_HEREDOC, TOKEN_WORD ve s_token::type.

Referans veren expander().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ expander()

int expander ( t_shell * shell)

Expander modülünün giriş noktası ve ana döngüsü.

Token listesini baştan sona gezer. Her adımda bir önceki token'ı (prev_token) hafızasında tutarak ilerler. Bu "takipçi pointer" mantığı, Heredoc durumlarını tespit etmek için kullanılır.

Parametreler
shellToken listesini ve env listesini içeren ana yapı.
Döndürdüğü değer
int Tüm işlemler başarılıysa 1, herhangi bir malloc hatasında 0.

expander.c dosyasının 94 numaralı satırında tanımlanmıştır.

Referanslar expander_dispatcher(), remove_empty_tokens() ve s_shell::token_list.

Referans veren process_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ extract_variable_info()

t_env * extract_variable_info ( t_shell * shell,
char * str )

Değişken ismini ve değerini bulup bir t_env paketi içinde döndürür.

'$' işaretinden sonra gelen stringi analiz eder. Geçerli değişken ismini (key) çıkarır ve shell'in env listesinden değerini (value) bulur. Bu verileri geçici bir t_env yapısında saklar.

Parametreler
shellAna yapı (env listesine erişim için).
strDolar işaretinden hemen sonra başlayan string.
Döndürdüğü değer
t_env* Doldurulmuş paket veya malloc hatasında NULL.

expander_env_replacement.c dosyasının 27 numaralı satırında tanımlanmıştır.

Referanslar free_env_node(), get_var_name_len(), get_var_value(), s_env::key ve s_env::value.

Referans veren process_variable_replacement().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ check_var_extraction()

int check_var_extraction ( t_env * var,
int * i )

Çıkarılan değişken paketinin durumunu kontrol eder.

Bu fonksiyon bir "Kapı Bekçisi" (Gatekeeper) gibidir. Ana fonksiyona ne yapması gerektiğini söyleyen bir durum kodu döndürür.

Parametreler
varextract_variable_info'dan dönen paket.
iAna döngüdeki indeksin adresi (güncellemek için).
Döndürdüğü değer
int 0: Hata (Malloc başarısız, var NULL). 1: Atla (Geçersiz değişken ismi, $ literal olarak kalmalı). -1: Devam et (Geçerli değişken, işleme devam).

expander_env_replacement.c dosyasının 71 numaralı satırında tanımlanmıştır.

Referanslar free_env_node() ve s_env::key.

Referans veren process_variable_replacement().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ apply_variable_replacement()

int apply_variable_replacement ( t_token * token,
t_env * var,
int * i )

Değişken değişimini token üzerinde uygular ve indeksi günceller.

replace_token_value fonksiyonunu çağırarak string manipülasyonunu yapar. Ardından ana döngünün sonsuz döngüye girmemesi veya yeni eklenen değerin tekrar genişletilmemesi için indeksi (*i) ayarlar.

Parametreler
tokenÜzerinde işlem yapılan token.
varDeğişken bilgilerini tutan paket.
iAna döngüdeki indeksin adresi.
Döndürdüğü değer
int Başarılıysa 1, malloc hatasında 0.

expander_env_replacement.c dosyasının 100 numaralı satırında tanımlanmıştır.

Referanslar s_env::key, replace_token_value() ve s_env::value.

Referans veren process_variable_replacement().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ process_variable_replacement()

int process_variable_replacement ( t_shell * shell,
t_token * token,
int * i )

Tek bir genişletme işleminin tüm sürecini yöneten orkestra şefi.

  1. Extract: Bilgiyi çek.
  2. Check: Durumu kontrol et.
  3. Apply: Değişikliği uygula.
  4. Cleanup: Geçici belleği temizle.
Parametreler
shellAna yapı.
tokenİşlenen token.
iAna döngüdeki indeksin adresi.
Döndürdüğü değer
int Başarılıysa 1, hata varsa 0.

expander_env_replacement.c dosyasının 130 numaralı satırında tanımlanmıştır.

Referanslar apply_variable_replacement(), check_var_extraction(), extract_variable_info(), free_env_node() ve s_token::value.

Referans veren expand_variable().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ replace_token_value()

int replace_token_value ( t_token * token,
char * var_value,
int index,
int len_name )

Token'ın string değerindeki bir değişkeni, gerçek değeriyle değiştirir.

Bu fonksiyon, eski stringi üç parçaya bölerek işlem yapar:

  1. Prefix: '$' işaretinden önceki kısım.
  2. Value: Değişkenin yeni değeri.
  3. Suffix: Değişken isminin bitiminden sonraki kısım.

Bu parçaları ft_strjoin ile birleştirir ve eski token değerini güvenli bir şekilde yenisiyle değiştirir.

Parametreler
tokenDeğeri değiştirilecek olan token.
var_valueDeğişkenin listeden bulunan değeri (Araya girecek parça).
index'$' işaretinin bulunduğu indeks (Prefix'in sonu).
   @param len_name Değişken isminin uzunluğu (Suffix'in başlangıcını
bulmak için).
Döndürdüğü değer
int Başarılıysa 1, herhangi bir malloc hatasında 0.

expander_str_manipulation.c dosyasının 66 numaralı satırında tanımlanmıştır.

Referanslar free_expansion_parts(), s_expansion_parts::new_value, s_expansion_parts::prefix, s_expansion_parts::suffix, s_expansion_parts::temp ve s_token::value.

Referans veren apply_variable_replacement().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ can_expand()

int can_expand ( char next_c)

'$' işaretinden sonra gelen karakterin genişletmeye uygun olup olmadığını kontrol eder.

Bash kurallarına göre '$' işaretinden sonra boşluk, çift tırnak veya string sonu gelirse, bu bir değişken değildir; literal '$' işaretidir.

Parametreler
next_cDolar işaretinden sonra gelen karakter.
Döndürdüğü değer
int Genişletilebilir ise 1, değilse 0.

expander_utils.c dosyasının 28 numaralı satırında tanımlanmıştır.

Referans veren expand_heredoc_line() ve expand_variable().

Bu fonksiyon için çağırılma şeması:

◆ get_var_name_len()

int get_var_name_len ( char * str)

Değişken isminin uzunluğunu hesaplar.

'$' işaretinden sonraki karakterleri tarar.

  • '$?' -> Uzunluk 1.
  • '$1' (Rakam) -> Uzunluk 1.
  • '$VAR' -> Alfanümerik veya '_' bitene kadar sayar.
Parametreler
strDolar işaretinden hemen sonra başlayan string.
Döndürdüğü değer
int Değişken isminin uzunluğu.

expander_utils.c dosyasının 46 numaralı satırında tanımlanmıştır.

Referans veren expand_dollar() ve extract_variable_info().

Bu fonksiyon için çağırılma şeması:

◆ get_env_value()

char * get_env_value ( t_list * env_list,
char * key )

Environment listesinde key'e göre değer döndürür.

Parametreler
env_listOrtam değişkenleri listesi
keyAranacak key
Döndürdüğü değer
char* Bulunursa değerin orijinal pointer'ı, bulunamazsa NULL

env_utils.c dosyasının 73 numaralı satırında tanımlanmıştır.

Referanslar find_env_by_key() ve s_env::value.

Referans veren builtin_pwd(), cd_home(), cd_oldpwd(), change_dir(), compute_logical_pwd(), get_path_dirs() ve get_var_value().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ get_var_value()

char * get_var_value ( t_shell * shell,
char * var_name )

Bir değişkenin değerini bulur ve kopyasını döndürür.

Bu fonksiyon, '$?' özel durumunu ve normal değişkenleri yönetir. Dönen değer her zaman malloc ile ayrılmıştır, çağıran free etmelidir.

Parametreler
shellAna yapı (env listesi ve exit status için).
var_nameDeğişkenin adı (Örn: "USER" veya "?").
Döndürdüğü değer
char* Değerin kopyası veya bulunamazsa boş string ("").

expander_utils.c dosyasının 82 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, s_shell::exit_status ve get_env_value().

Referans veren expand_dollar() ve extract_variable_info().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ process_token_cleanup()

void process_token_cleanup ( t_shell * shell,
t_token_cleaner * vars )

Tek bir token düğümü için silme veya ilerleme mantığını yürütür.

Token içeriğini kontrol eder. Eğer boş ve tırnaksız bir kelimeyse, düğümü listeden çıkarır, belleği temizler ve 'current' pointerını ilerletir. Değilse, 'prev' ve 'current' pointerlarını bir adım ileri taşır.

Parametreler
shellListenin başını (head) güncellemek için gerekli.
varsDöngü değişkenlerini tutan struct.

expander_utils.c dosyasının 114 numaralı satırında tanımlanmıştır.

Referanslar s_token_cleaner::current, free_token_content(), s_token_cleaner::prev, QUOTE_NONE, s_token::quote_type, s_token_cleaner::temp, s_shell::token_list, TOKEN_WORD, s_token::type ve s_token::value.

Referans veren remove_empty_tokens().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ remove_empty_tokens()

void remove_empty_tokens ( t_shell * shell)

Expander sonrası oluşan boş ve tırnaksız tokenları listeden temizler.

Örn: "echo $olmayan" -> Token listesinde boş bir düğüm oluşturur. Bu fonksiyon o düğümü siler ki komutlar (örn: echo -n) argümanları doğru algılayabilsin.

Parametreler
shellAna yapı.

expander_utils.c dosyasının 148 numaralı satırında tanımlanmıştır.

Referanslar s_token_cleaner::current, process_token_cleanup() ve s_shell::token_list.

Referans veren expander().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ handle_redir()

int handle_redir ( t_ast * node,
t_list ** tokens )

Yönlendirme token'ını işler.

Parametreler
nodeYönlendirmenin ekleneceği AST node
tokensToken listesi pointer'ı
Döndürdüğü değer
int Başarı: 1, Hata: 0

Yönlendirme tipini alır, dosya adını okur ve redir listesine ekler.

parser.c dosyasının 31 numaralı satırında tanımlanmıştır.

Referanslar add_redir_node(), advance_token(), s_ast::cmd, create_redir_content(), peek_token(), QUOTE_NONE, s_token::quote_type, s_cmd::redirections, token_to_redir_type(), TOKEN_WORD, s_token::type ve s_token::value.

Referans veren process_token().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ parse_simple_command()

t_ast * parse_simple_command ( t_list ** tokens)

Basit komutu parse eder.

Parametreler
tokensToken listesi pointer'ı
Döndürdüğü değer
t_ast* Başarılı AST node veya NULL
// Örnek: "ls -la > output.txt"
// args = ["ls", "-la"]
// redirections = [REDIR_OUT, "output.txt"]

parser.c dosyasının 94 numaralı satırında tanımlanmıştır.

Referanslar clean_ast(), s_ast::cmd, create_ast_node(), create_cmd_content(), is_redirection(), NODE_CMD, peek_token(), process_token(), TOKEN_WORD ve s_token::type.

Referans veren parse_pipe().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ parse_pipe()

t_ast * parse_pipe ( t_list ** tokens)

Pipe ifadesini parse eder: simple_command | parse_pipe.

Right-recursive: pipe'ın sağ tarafı recursive çağrı ile bağlanır.

parser_expr.c dosyasının 20 numaralı satırında tanımlanmıştır.

Referanslar advance_token(), clean_ast(), create_ast_node(), s_ast::left, NODE_PIPE, parse_pipe(), parse_simple_command(), peek_token(), s_ast::right, TOKEN_PIPE ve s_token::type.

Referans veren parse_pipe() ve parse_sequence().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ parse_sequence()

t_ast * parse_sequence ( t_list ** tokens)

Ardışık komutları (newline ile ayrılmış) parse eder.

En üst seviye parse fonksiyonu. TOKEN_NEWLINE ile ayrılmış komutları NODE_SEQ düğümleri ile birleştirir.

parser_expr.c dosyasının 53 numaralı satırında tanımlanmıştır.

Referanslar advance_token(), clean_ast(), create_ast_node(), s_ast::left, NODE_SEQ, parse_pipe(), peek_token(), s_ast::right, TOKEN_EOF, TOKEN_NEWLINE ve s_token::type.

Referans veren construct_ast().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ construct_ast()

t_ast * construct_ast ( t_shell * shell,
t_list ** token_list )

Token listesinden AST oluşturur.

Parametreler
shellShell yapısı
token_listToken listesi pointer'ı
Döndürdüğü değer
t_ast* AST root node veya NULL

Önce syntax doğrulaması yapar, sonra parse_sequence ile AST oluşturur.

parser.c dosyasının 123 numaralı satırında tanımlanmıştır.

Referanslar parse_sequence() ve validate_syntax().

Referans veren parser().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ parser()

int parser ( t_shell * shell)

Parser ana fonksiyonu.

Parametreler
shellShell yapısı
Döndürdüğü değer
int Başarı: 1, Hata: 0

Token listesini alıp AST oluşturur ve shell->ast_root'a atar. Lexer -> Expander -> Parser -> Executor zincirinin 3. adımı.

parser.c dosyasının 141 numaralı satırında tanımlanmıştır.

Referanslar construct_ast(), handle_parser_error(), handle_parser_success(), is_parsing_success() ve s_shell::token_list.

Referans veren process_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ is_parsing_success()

int is_parsing_success ( t_ast * root,
t_list * curr_token )

Parsing işleminin başarılı olup olmadığını kontrol eder.

Parametreler
rootAST root node
curr_tokenKalan token listesi
Döndürdüğü değer
int Başarılı (EOF'a ulaşıldı): 1, Başarısız: 0

parser_utils.c dosyasının 30 numaralı satırında tanımlanmıştır.

Referanslar TOKEN_EOF ve s_token::type.

Referans veren parser().

Bu fonksiyon için çağırılma şeması:

◆ handle_parser_success()

int handle_parser_success ( t_shell * shell,
t_ast * root )

Başarılı parsing sonrası AST'yi shell'e atar.

Parametreler
shellShell yapısı
rootAST root node
Döndürdüğü değer
int Her zaman 1

parser_utils.c dosyasının 48 numaralı satırında tanımlanmıştır.

Referanslar s_shell::ast_root.

Referans veren parser().

Bu fonksiyon için çağırılma şeması:

◆ count_cmd_args()

int count_cmd_args ( char ** args)

Komut argüman sayısını hesaplar.

Parametreler
argsNULL-terminated argüman dizisi
Döndürdüğü değer
int Argüman sayısı

parser_utils.c dosyasının 59 numaralı satırında tanımlanmıştır.

Referans veren add_arg_to_cmd().

Bu fonksiyon için çağırılma şeması:

◆ token_to_redir_type()

t_redir_type token_to_redir_type ( t_token_type type)

Token tipini redirection tipine dönüştürür.

Parametreler
typeToken tipi
Döndürdüğü değer
t_redir_type Karşılık gelen yönlendirme tipi

parser_utils.c dosyasının 76 numaralı satırında tanımlanmıştır.

Referanslar REDIR_APPEND, REDIR_HEREDOC, REDIR_IN, REDIR_OUT, TOKEN_HEREDOC, TOKEN_REDIR_IN ve TOKEN_REDIR_OUT.

Referans veren handle_redir().

Bu fonksiyon için çağırılma şeması:

◆ peek_token()

t_token * peek_token ( t_list * tokens)

Token listesinin başındaki token'a bakar (ilerletmez).

Parametreler
tokensToken listesi
Döndürdüğü değer
t_token* Mevcut token veya NULL

parser_utils.c dosyasının 92 numaralı satırında tanımlanmıştır.

Referans veren handle_redir(), parse_pipe(), parse_sequence(), parse_simple_command() ve process_token().

Bu fonksiyon için çağırılma şeması:

◆ advance_token()

void advance_token ( t_list ** tokens)

Token listesini bir ileri taşır.

Parametreler
tokensToken listesi pointer'ı

parser_utils.c dosyasının 103 numaralı satırında tanımlanmıştır.

Referans veren handle_redir(), parse_pipe(), parse_sequence() ve process_token().

Bu fonksiyon için çağırılma şeması:

◆ handle_parser_error()

int handle_parser_error ( t_shell * shell,
t_ast * root,
t_list * tok )

Parser hata durumunda temizlik yapar.

Parametreler
shellShell yapısı
rootTemizlenecek AST (NULL olabilir)
tokHata konumundaki token (kullanılmıyor)
Döndürdüğü değer
int Her zaman 0 (hata kodu)

parser_utils.c dosyasının 116 numaralı satırında tanımlanmıştır.

Referanslar s_shell::ast_root ve clean_ast().

Referans veren parser().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ free_redir()

void free_redir ( void * redir)

Tek bir yönlendirme yapısını serbest bırakır.

ft_lstclear ile uyumlu olması için void* parametre alır.

Parametreler
redirSerbest bırakılacak t_redir yapısı.

parser_cleanup.c dosyasının 23 numaralı satırında tanımlanmıştır.

Referanslar s_redir::file.

Referans veren free_cmd().

Bu fonksiyon için çağırılma şeması:

◆ free_cmd()

void free_cmd ( t_cmd * cmd)

Komut yapısını ve içindeki tüm verileri serbest bırakır.

args dizisi ve redirections listesi temizlenir.

Parametreler
cmdSerbest bırakılacak t_cmd yapısı.

parser_cleanup.c dosyasının 42 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::arg_quotes, s_cmd::args, free_redir() ve s_cmd::redirections.

Referans veren clean_ast().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ clean_ast()

void clean_ast ( t_ast * node)

AST ağacını recursive olarak temizler.

Sol ve sağ alt ağaçları temizledikten sonra node'un kendisini siler.

Parametreler
nodeTemizlenecek AST düğümü.

parser_cleanup.c dosyasının 72 numaralı satırında tanımlanmıştır.

Referanslar clean_ast(), s_ast::cmd, free_cmd(), s_ast::left ve s_ast::right.

Referans veren clean_ast(), cleanup_shell(), handle_parser_error(), parse_pipe(), parse_sequence(), parse_simple_command() ve process_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ check_token_context()

int check_token_context ( t_shell * shell,
t_list * node,
int * p_count )

Tek bir token düğümü için bağlam ve sıra kontrollerini yürütür.

Yönlendirme, Operatör ve Parantez kurallarını ilgili yardımcı fonksiyonlara dağıtır. Ayrıca parantez dengesini (negatife düşme durumu) kontrol eder.

Parametreler
shellAna yapı.
nodeŞu an incelenen liste düğümü.
p_countParantez sayacının adresi.
Döndürdüğü değer
int Geçerliyse 1, hata varsa 0.

syntax_validation.c dosyasının 14 numaralı satırında tanımlanmıştır.

Referanslar is_binary_operator(), is_redirection(), s_token::type, validate_operator_seq() ve validate_redirection_seq().

Referans veren validate_token_seq().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ validate_token_seq()

int validate_token_seq ( t_shell * shell,
t_list * tokens )

Token listesini baştan sona gezerek sıralama hatalarını kontrol eder.

check_token_context fonksiyonunu her düğüm için çağırır. Döngü sonunda parantezlerin tamamen kapanıp kapanmadığını kontrol eder.

Parametreler
shellAna yapı.
tokensToken listesi.
Döndürdüğü değer
int Geçerliyse 1, hata varsa 0.

syntax_validation.c dosyasının 43 numaralı satırında tanımlanmıştır.

Referanslar check_token_context().

Referans veren validate_syntax().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ validate_syntax()

int validate_syntax ( t_shell * shell,
t_list * tokens )

Sözdizimi doğrulama işleminin giriş noktası (Main Validator).

Sırasıyla Başlangıç, Bitiş ve Sıralama kontrollerini çalıştırır.

Parametreler
shellAna yapı.
tokensToken listesi.
Döndürdüğü değer
int Syntax doğruysa 1, hatalıysa 0.

syntax_validation.c dosyasının 72 numaralı satırında tanımlanmıştır.

Referanslar validate_first_token(), validate_last_token() ve validate_token_seq().

Referans veren construct_ast().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ validate_first_token()

int validate_first_token ( t_shell * shell,
t_list * tokens )

Token listesinin başlangıcındaki yasaklı durumları kontrol eder.

Bir komut satırı Pipe (|), Mantıksal Operatörler (&&, ||) veya Kapanış Parantezi ')' ile başlayamaz.

Parametreler
shellAna yapı (Hata durumunda exit_status güncellemek için).
tokensKontrol edilecek token listesinin başı.
Döndürdüğü değer
int Geçerliyse 1, hata varsa 0.

syntax_validation_2.c dosyasının 13 numaralı satırında tanımlanmıştır.

Referanslar handle_syntax_error(), TOKEN_PIPE ve s_token::type.

Referans veren validate_syntax().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ validate_last_token()

int validate_last_token ( t_shell * shell,
t_list * tokens )

Token listesinin sonundaki yasaklı durumları kontrol eder.

Bir komut satırı Yönlendirme (<, >), İkili Operatörler (|, &&, ||) veya Açılış Parantezi '(' ile bitemez.

Parametreler
shellAna yapı.
tokensToken listesi.
Döndürdüğü değer
int Geçerliyse 1, hata varsa 0.

syntax_validation_2.c dosyasının 35 numaralı satırında tanımlanmıştır.

Referanslar handle_syntax_error(), is_binary_operator(), is_redirection(), TOKEN_EOF, s_token::type ve s_token::value.

Referans veren validate_syntax().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ validate_redirection_seq()

int validate_redirection_seq ( t_shell * shell,
t_list * current_node )

Yönlendirme operatörlerinin ardışıklığını kontrol eder.

Yönlendirme operatörlerinden (<, >, <<, >>) sonra MUTLAKA bir kelime (WORD) gelmelidir. Operatör veya NULL gelirse hatadır.

Parametreler
shellAna yapı.
current_nodeŞu anki token düğümü (Yönlendirme operatörü).
Döndürdüğü değer
int Geçerliyse 1, hata varsa 0.

syntax_validation_2.c dosyasının 69 numaralı satırında tanımlanmıştır.

Referanslar handle_syntax_error(), TOKEN_WORD, s_token::type ve s_token::value.

Referans veren check_token_context().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ validate_operator_seq()

int validate_operator_seq ( t_shell * shell,
t_list * current_node )

İkili operatörlerin (|, &&, ||) ardışıklığını kontrol eder.

İkili operatörlerden sonra başka bir ikili operatör veya kapanış parantezi ')' gelemez.

Parametreler
shellAna yapı.
current_nodeŞu anki token düğümü (Operatör).
Döndürdüğü değer
int Geçerliyse 1, hata varsa 0.

syntax_validation_2.c dosyasının 93 numaralı satırında tanımlanmıştır.

Referanslar handle_syntax_error(), is_binary_operator(), s_token::type ve s_token::value.

Referans veren check_token_context().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ is_redirection()

int is_redirection ( t_token_type type)

Bir token tipinin yönlendirme (Redirection) olup olmadığını kontrol eder.

Yönlendirme operatörleri:

  • TOKEN_REDIR_IN (<)
  • TOKEN_REDIR_OUT (>)
  • TOKEN_HEREDOC (<<)
  • TOKEN_REDIR_APPEND (>>)
Parametreler
typeKontrol edilecek token tipi.
Döndürdüğü değer
int Yönlendirme ise 1, değilse 0 döner.

syntax_validation_utils.c dosyasının 16 numaralı satırında tanımlanmıştır.

Referanslar TOKEN_HEREDOC, TOKEN_REDIR_APPEND, TOKEN_REDIR_IN ve TOKEN_REDIR_OUT.

Referans veren check_token_context(), parse_simple_command(), process_token() ve validate_last_token().

Bu fonksiyon için çağırılma şeması:

◆ is_binary_operator()

int is_binary_operator ( t_token_type type)

Bir token tipinin ikili (binary) operatör olup olmadığını kontrol eder.

İkili operatörler, iki komut arasında bağlaç görevi gören sembollerdir:

  • TOKEN_PIPE (|)
Parametreler
typeKontrol edilecek token tipi.
Döndürdüğü değer
int İkili operatör ise 1, değilse 0 döner.

syntax_validation_utils.c dosyasının 40 numaralı satırında tanımlanmıştır.

Referanslar TOKEN_PIPE.

Referans veren check_token_context(), validate_last_token() ve validate_operator_seq().

Bu fonksiyon için çağırılma şeması:

◆ is_input_complete()

int is_input_complete ( char * line)

Girdi satırının tamamlanıp tamamlanmadığını kontrol eder.

Parantez ve tırnak dengesine bakar. Tüm açılan parantezler kapatılmış ve tırnaklar kapalıysa girdi tamamlanmıştır.

Parametreler
lineKontrol edilecek satır
Döndürdüğü değer
int 1 = tamamlanmış, 0 = eksik girdi var

input_completion.c dosyasının 40 numaralı satırında tanımlanmıştır.

Referans veren complete_input() ve main().

Bu fonksiyon için çağırılma şeması:

◆ complete_input()

char * complete_input ( t_shell * shell,
char * line )

Eksik girdiyi tamamlamak için ek satırlar okur.

> promptu ile readline çağırır, okunan satırı mevcut girdiye ekler. Ctrl-D (NULL) gelirse NULL döner ve mevcut girdiyi free eder.

Parametreler
shellShell yapısı (sinyal kontrolü için)
lineMevcut (eksik) girdi satırı
Döndürdüğü değer
char* Tamamlanmış girdi veya NULL (Ctrl-D)

input_completion.c dosyasının 94 numaralı satırında tanımlanmıştır.

Referanslar is_input_complete() ve join_lines().

Referans veren main().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ create_ast_node()

t_ast * create_ast_node ( t_node_type type)

Yeni bir Soyut Sözdizimi Ağacı (AST) düğümü oluşturur.

Bu fonksiyon, Parser'ın ağacı inşa ederken kullanacağı temel yapı taşlarını (Node) üretir. Belleği ft_calloc ile ayırdığı için, düğümün içindeki left, right ve cmd pointerları otomatik olarak NULL başlatılır.

Parametreler
typeDüğümün türü (NODE_PIPE, NODE_CMD, vb.).
Döndürdüğü değer
t_ast* Yeni oluşturulan düğümün adresi veya malloc hatasında NULL.

parser_constructors.c dosyasının 14 numaralı satırında tanımlanmıştır.

Referanslar s_ast::type.

Referans veren parse_pipe(), parse_sequence() ve parse_simple_command().

Bu fonksiyon için çağırılma şeması:

◆ create_cmd_content()

t_cmd * create_cmd_content ( void )

Boş bir komut yapısı (t_cmd) oluşturur ve başlatır.

Bu fonksiyon, Parser'ın yaprak düğümleri (NODE_CMD) için gereken veri kutusunu üretir. Belleği ft_calloc ile ayırdığı için, yapının içindeki 'args' dizisi ve 'redirections' listesi otomatik olarak NULL ile başlatılır. Bu, ileride "argüman var mı?" kontrolü yaparken çöp değerlerle (garbage value) karşılaşmayı engeller.

Döndürdüğü değer
t_cmd* Oluşturulan yapının adresi veya malloc hatasında NULL.

parser_constructors.c dosyasının 36 numaralı satırında tanımlanmıştır.

Referans veren parse_simple_command().

Bu fonksiyon için çağırılma şeması:

◆ create_redir_content()

t_redir * create_redir_content ( t_redir_type type,
char * file,
int quoted )

Yönlendirme (Redirection) verisini tutan yapıyı oluşturur.

Bu fonksiyon, Parser'ın bir yönlendirme işlemi (<, >, <<, >>) tespit ettiğinde, bu işlemin detaylarını saklamak için t_redir yapısını allocate eder.

Not
Parametre olarak gelen file stringi ft_strdup ile kopyalanır. Bu, Token listesi silindiğinde dosya isminin kaybolmamasını sağlar (Deep Copy).
Parametreler
typeYönlendirme türü (REDIR_IN, REDIR_OUT, HEREDOC, vb.).
fileYönlendirilecek dosya adı veya Heredoc delimiter'ı.
Döndürdüğü değer
t_redir* Oluşturulan yapının adresi veya malloc hatasında NULL.

parser_constructors.c dosyasının 61 numaralı satırında tanımlanmıştır.

Referanslar s_redir::file, s_redir::quoted ve s_redir::type.

Referans veren handle_redir().

Bu fonksiyon için çağırılma şeması:

◆ add_redir_node()

int add_redir_node ( t_list ** redir_list,
t_redir * redir_content )

Oluşturulan yönlendirme içeriğini (t_redir) komutun listesine ekler.

Bu fonksiyon, create_redir_content ile hazırlanan veri paketini alır, onu t_list vagonuna (node) sarar ve redirections listesinin sonuna ekler.

Not
Malloc Koruması: Eğer liste düğümü (vagon) oluşturulamazsa, eldeki redir_content verisi (ve içindeki file stringi) sızıntı olmaması için bu fonksiyon içinde serbest bırakılır (free).
Parametreler
redir_listKomut yapısındaki 'redirections' listesinin adresi.
redir_contentEklenecek olan t_redir yapısı.
Döndürdüğü değer
int Başarılıysa 1, hata varsa (malloc vb.) 0.

parser_append.c dosyasının 18 numaralı satırında tanımlanmıştır.

Referanslar s_redir::file.

Referans veren handle_redir().

Bu fonksiyon için çağırılma şeması:

◆ fill_new_args()

char ** fill_new_args ( char ** new_args,
t_cmd * cmd,
char * arg,
int arg_count )

Yeni oluşturulan argüman dizisini dolduran yardımcı fonksiyon.

Bu fonksiyon iki aşamalı bir kopyalama işlemi yapar:

  1. Mevcut argümanların (varsa) sadece adreslerini (pointer) yeni diziye taşır. (Shallow Copy - Performans için).
  2. Yeni eklenecek argümanı ft_strdup ile kopyalayarak diziye ekler. (Deep Copy - Veri güvenliği için).
Not
Eğer ft_strdup başarısız olursa, sadece yeni oluşturulan boş diziyi (new_args) temizler ve NULL döner. Eski veriler cmd yapısında güvende kalır.
Parametreler
new_argscalloc ile ayrılmış boş, yeni dizi.
cmdEski argümanların bulunduğu komut yapısı.
argEklenecek yeni argüman stringi.
arg_countEski argüman sayısı.
Döndürdüğü değer
char** Başarılıysa doldurulmuş dizi, hata varsa NULL.

parser_append.c dosyasının 52 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args.

Referans veren add_arg_to_cmd().

Bu fonksiyon için çağırılma şeması:

◆ add_arg_to_cmd()

int add_arg_to_cmd ( t_cmd * cmd,
char * arg,
t_quote_type qt )

Komutun argüman listesine (argv) yeni bir argüman ekler.

C dilinde dinamik dizi (vector) olmadığı için bu fonksiyon manuel bir "Re-allocation" işlemi gerçekleştirir:

  1. Mevcut eleman sayısını bulur.
  2. Yeni boyut için (Eski + Yeni + NULL) yer ayırır.
  3. fill_new_args ile verileri taşır/ekler.
  4. Eski dizi pointer'ını (içeriğini değil, kabını) serbest bırakır.
  5. Komut yapısındaki args pointer'ını günceller.
Parametreler
cmdArgümanın ekleneceği komut yapısı.
argEklenecek argüman stringi.
Döndürdüğü değer
int Başarılıysa 1, malloc hatası varsa 0.

parser_append.c dosyasının 86 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::arg_quotes, s_cmd::args, count_cmd_args() ve fill_new_args().

Referans veren process_token().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ handle_syntax_error()

int handle_syntax_error ( t_shell * shell,
char * unexpected_token )

error_handling.c dosyasının 4 numaralı satırında tanımlanmıştır.

Referanslar s_shell::exit_status.

Referans veren handle_operator_error(), validate_first_token(), validate_last_token(), validate_operator_seq() ve validate_redirection_seq().

Bu fonksiyon için çağırılma şeması:

◆ shell_error()

void shell_error ( char * cmd,
char * arg,
char * msg )

error_handling.c dosyasının 45 numaralı satırında tanımlanmıştır.

Referanslar build_error_msg().

Referans veren builtin_cd(), builtin_env(), builtin_exit(), builtin_unset(), cd_home(), cd_oldpwd(), cd_path(), create_heredoc_pipe(), execute_external(), execute_pipe(), exit_numeric_error(), fork_process(), open_redir_file() ve process_export_arg().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ is_valid_identifier()

int is_valid_identifier ( char * str)

builtin_utils.c dosyasının 21 numaralı satırında tanımlanmıştır.

Referans veren builtin_unset() ve process_export_arg().

Bu fonksiyon için çağırılma şeması:

◆ print_env_declare()

void print_env_declare ( t_env * env)

Tek bir env değişkenini declare -x formatında yazdırır.

builtin_export_utils.c dosyasının 20 numaralı satırında tanımlanmıştır.

Referanslar s_env::key ve s_env::value.

Referans veren print_export_list().

Bu fonksiyon için çağırılma şeması:

◆ find_min_env()

t_env * find_min_env ( t_list * list,
char * last_printed )

Listedeki en küçük (alfabetik) env'i bulur (zaten yazdırılmamış).

builtin_export_utils.c dosyasının 36 numaralı satırında tanımlanmıştır.

Referanslar ft_strcmp() ve s_env::key.

Referans veren print_export_list().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ print_export_list()

void print_export_list ( t_shell * shell)

Argümansız export - tüm değişkenleri alfabetik sıralı yazdırır.

builtin_export_utils.c dosyasının 60 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, find_min_env(), s_env::key ve print_env_declare().

Referans veren builtin_export().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ process_export_arg()

int process_export_arg ( t_shell * shell,
char * arg )

builtin_export_utils.c dosyasının 124 numaralı satırında tanımlanmıştır.

Referanslar is_valid_identifier(), parse_export_arg(), shell_error() ve update_or_add_env().

Referans veren builtin_export().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ skip_whitespace()

int skip_whitespace ( char * cmd,
int i )

utils.c dosyasının 16 numaralı satırında tanımlanmıştır.

Referans veren lexer().

Bu fonksiyon için çağırılma şeması:

◆ is_delimiter()

int is_delimiter ( char c)

utils.c dosyasının 23 numaralı satırında tanımlanmıştır.

Referans veren handle_word().

Bu fonksiyon için çağırılma şeması:

◆ free_token_content()

void free_token_content ( void * content)

utils.c dosyasının 36 numaralı satırında tanımlanmıştır.

Referanslar s_token::value.

Referans veren cleanup_shell(), merge_token_pair(), process_line() ve process_token_cleanup().

Bu fonksiyon için çağırılma şeması:

◆ ft_strcmp()

int ft_strcmp ( const char * s1,
const char * s2 )

utils.c dosyasının 48 numaralı satırında tanımlanmıştır.

Referans veren builtin_cd(), execute_builtin(), find_env_by_key(), find_min_env(), heredoc_child(), is_builtin(), normalize_logical_path() ve remove_env_node().

Bu fonksiyon için çağırılma şeması:

◆ setup_signals()

void setup_signals ( void )

signals.c dosyasının 58 numaralı satırında tanımlanmıştır.

Referanslar sigint_handler().

Referans veren main() ve redir_heredoc().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ reset_signals()

void reset_signals ( void )

signals.c dosyasının 73 numaralı satırında tanımlanmıştır.

Referans veren child_exec(), pipe_left_child() ve pipe_right_child().

Bu fonksiyon için çağırılma şeması:

◆ is_builtin()

int is_builtin ( char * cmd)

builtins.c dosyasının 19 numaralı satırında tanımlanmıştır.

Referanslar ft_strcmp().

Referans veren execute_cmd().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ execute_builtin()

int execute_builtin ( t_shell * shell,
t_cmd * cmd )

builtins.c dosyasının 44 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, builtin_cd(), builtin_echo(), builtin_env(), builtin_exit(), builtin_export(), builtin_pwd(), builtin_unset() ve ft_strcmp().

Referans veren run_builtin_parent().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_echo()

int builtin_echo ( t_cmd * cmd)

builtin_echo.c dosyasının 50 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args ve check_n_option().

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_pwd()

int builtin_pwd ( t_shell * shell)

builtin_pwd.c dosyasının 22 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list ve get_env_value().

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_env()

int builtin_env ( t_shell * shell,
t_cmd * cmd )

builtin_env.c dosyasının 22 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, s_shell::env_list, s_env::key, shell_error() ve s_env::value.

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ normalize_logical_path()

char * normalize_logical_path ( char * path)

builtin_cd_utils.c dosyasının 44 numaralı satırında tanımlanmıştır.

Referanslar build_path(), free_str_array() ve ft_strcmp().

Referans veren compute_logical_pwd().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ compute_logical_pwd()

char * compute_logical_pwd ( t_shell * shell,
char * arg )

builtin_cd_utils.c dosyasının 73 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, get_env_value() ve normalize_logical_path().

Referans veren cd_path().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ update_pwd_vars()

void update_pwd_vars ( t_shell * shell,
char * old_pwd,
char * new_pwd )

builtin_cd_utils.c dosyasının 98 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list ve update_env_value().

Referans veren change_dir().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ change_dir()

int change_dir ( t_shell * shell,
char * new_pwd )

builtin_cd_utils.c dosyasının 111 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list, get_env_value() ve update_pwd_vars().

Referans veren cd_home(), cd_oldpwd() ve cd_path().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_cd()

int builtin_cd ( t_shell * shell,
t_cmd * cmd )

builtin_cd.c dosyasının 78 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, cd_home(), cd_oldpwd(), cd_path(), ft_strcmp() ve shell_error().

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_export()

int builtin_export ( t_shell * shell,
t_cmd * cmd )

builtin_export.c dosyasının 22 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, print_export_list() ve process_export_arg().

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_unset()

int builtin_unset ( t_shell * shell,
t_cmd * cmd )

builtin_unset.c dosyasının 54 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, is_valid_identifier(), remove_env_node() ve shell_error().

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ builtin_exit()

int builtin_exit ( t_shell * shell,
t_cmd * cmd )

builtin_exit.c dosyasının 78 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, exit_numeric_error(), s_shell::exit_status, get_exit_code(), is_numeric(), shell_error() ve shell_exit().

Referans veren execute_builtin().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ wait_for_child()

int wait_for_child ( pid_t pid)

Child process'i bekle ve exit status al EINTR: sinyal gelirse waitpid'i tekrar dene (zombie bırakma).

executor_utils.c dosyasının 22 numaralı satırında tanımlanmıştır.

Referans veren execute_external() ve wait_pipe().

Bu fonksiyon için çağırılma şeması:

◆ save_std_fds()

int save_std_fds ( int * saved_fds)

stdin ve stdout'u kaydet (builtin için)

Parametreler
saved_fds2 elemanlı array
Döndürdüğü değer
int başarı: 1, hata: 0

executor_utils.c dosyasının 49 numaralı satırında tanımlanmıştır.

Referans veren execute_cmd() ve run_builtin_parent().

Bu fonksiyon için çağırılma şeması:

◆ restore_std_fds()

int restore_std_fds ( int * saved_fds)

Kaydedilen fd'leri geri yükle.

Parametreler
saved_fds2 elemanlı array
Döndürdüğü değer
int başarı: 1, hata: 0

executor_utils.c dosyasının 70 numaralı satırında tanımlanmıştır.

Referans veren execute_cmd() ve run_builtin_parent().

Bu fonksiyon için çağırılma şeması:

◆ is_executable()

int is_executable ( char * path)

Dosyanın var olup olmadığını ve çalıştırılabilir olup olmadığını kontrol et.

Parametreler
pathDosya yolu
Döndürdüğü değer
int 0: yok, 1: var ama çalıştırılamaz, 2: çalıştırılabilir

executor_path.c dosyasının 23 numaralı satırında tanımlanmıştır.

Referans veren execute_external(), find_cmd_path() ve search_path().

Bu fonksiyon için çağırılma şeması:

◆ join_path()

char * join_path ( char * dir,
char * cmd )

Dizin ve komut adını birleştir.

Parametreler
dirDizin yolu
cmdKomut adı
Döndürdüğü değer
char* "/usr/bin" + "/" + "ls" = "/usr/bin/ls"

executor_path.c dosyasının 40 numaralı satırında tanımlanmıştır.

Referans veren search_path().

Bu fonksiyon için çağırılma şeması:

◆ get_path_dirs()

char ** get_path_dirs ( t_shell * shell)

PATH environment değişkenini parse et.

Parametreler
shellShell structure
Döndürdüğü değer
char** split edilmiş dizinler

executor_path.c dosyasının 60 numaralı satırında tanımlanmıştır.

Referanslar s_shell::env_list ve get_env_value().

Referans veren find_cmd_path().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ search_path()

char * search_path ( char ** dirs,
char * cmd )

PATH dizinlerinde komutu ara.

Parametreler
dirsPATH dizinleri
cmdKomut adı
Döndürdüğü değer
char* bulunan tam yol veya NULL

executor_path.c dosyasının 78 numaralı satırında tanımlanmıştır.

Referanslar is_executable() ve join_path().

Referans veren find_cmd_path().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ find_cmd_path()

char * find_cmd_path ( t_shell * shell,
char * cmd )

Ana PATH arama fonksiyonu.

Parametreler
shellShell structure
cmdKomut adı
Döndürdüğü değer
char* tam yol veya NULL

executor_path.c dosyasının 110 numaralı satırında tanımlanmıştır.

Referanslar get_path_dirs(), is_executable() ve search_path().

Referans veren execute_external().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ redir_input()

int redir_input ( t_redir * redir)

◆ redir_output()

int redir_output ( t_redir * redir)

◆ redir_append()

int redir_append ( t_redir * redir)

◆ apply_redir()

int apply_redir ( t_shell * shell,
t_redir * redir )

Tek bir redirection uygula.

Parametreler
shellShell structure
redirRedirection yapısı
Döndürdüğü değer
int başarı: 1, hata: 0

executor_redir.c dosyasının 47 numaralı satırında tanımlanmıştır.

Referanslar open_redir_file(), REDIR_APPEND, REDIR_HEREDOC, redir_heredoc(), REDIR_IN, REDIR_OUT ve s_redir::type.

Referans veren setup_redirs().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ setup_redirs()

int setup_redirs ( t_shell * shell,
t_cmd * cmd )

Tüm redirectionları uygula.

Parametreler
shellShell structure
cmdCommand yapısı
Döndürdüğü değer
int başarı: 1, hata: 0

executor_redir.c dosyasının 85 numaralı satırında tanımlanmıştır.

Referanslar apply_redir() ve s_cmd::redirections.

Referans veren child_exec(), execute_cmd() ve run_builtin_parent().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ redir_heredoc()

int redir_heredoc ( t_shell * shell,
t_redir * redir )

Heredoc redirection uygula (fork tabanlı).

Parametreler
shellShell structure
redirRedirection yapısı
Döndürdüğü değer
int başarı: fd, hata/iptal: -1

Child process heredoc'u okur (write+read, readline değil). Ctrl-C: child ölür (SIG_DFL), parent terminali düzeltir.

executor_heredoc.c dosyasının 109 numaralı satırında tanımlanmıştır.

Referanslar create_heredoc_pipe(), s_shell::exit_status, s_redir::file, heredoc_child(), setup_signals() ve shell_exit().

Referans veren apply_redir().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ create_heredoc_pipe()

int create_heredoc_pipe ( int * pipefd)

Heredoc için pipe oluştur.

Parametreler
pipefdPipe file descriptors
Döndürdüğü değer
int başarı: 1, hata: 0

executor_heredoc_utils.c dosyasının 23 numaralı satırında tanımlanmıştır.

Referanslar shell_error().

Referans veren redir_heredoc().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ write_heredoc_line()

int write_heredoc_line ( int fd,
char * line )

Heredoc satırını pipe'a yaz.

Parametreler
fdFile descriptor
lineYazılacak satır
Döndürdüğü değer
int başarı: 1, hata: 0

executor_heredoc_utils.c dosyasının 41 numaralı satırında tanımlanmıştır.

Referans veren heredoc_child().

Bu fonksiyon için çağırılma şeması:

◆ append_char()

char * append_char ( char * str,
char c )

Tek karakteri string sonuna ekle.

executor_heredoc_utils.c dosyasının 53 numaralı satırında tanımlanmıştır.

Referans veren expand_dollar() ve expand_heredoc_line().

Bu fonksiyon için çağırılma şeması:

◆ expand_dollar()

char * expand_dollar ( t_shell * shell,
char * line,
char * result,
int * i )

Tek bir $VAR genişletmesi yap ve result'a ekle.

Döndürdüğü değer
char* Güncellenmiş result string

executor_heredoc_utils.c dosyasının 69 numaralı satırında tanımlanmıştır.

Referanslar append_char(), get_var_name_len() ve get_var_value().

Referans veren expand_heredoc_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ expand_heredoc_line()

char * expand_heredoc_line ( t_shell * shell,
char * line )

Heredoc satırındaki $VAR değişkenlerini genişlet.

Parametreler
shellShell yapısı (env değişkenleri için)
lineGenişletilecek satır
Döndürdüğü değer
char* Yeni genişletilmiş satır (malloc), veya orijinal line

executor_heredoc_utils.c dosyasının 99 numaralı satırında tanımlanmıştır.

Referanslar append_char(), can_expand() ve expand_dollar().

Referans veren heredoc_child().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ run_builtin_parent()

int run_builtin_parent ( t_shell * shell,
t_cmd * cmd )

Builtin'i parent process'te çalıştır (fork yok).

executor_cmd.c dosyasının 42 numaralı satırında tanımlanmıştır.

Referanslar execute_builtin(), restore_std_fds(), save_std_fds() ve setup_redirs().

Referans veren execute_cmd().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ execute_external()

int execute_external ( t_shell * shell,
t_cmd * cmd )

Harici komutu çalıştır — path kontrolü fork öncesi yapılır böylece "command not found" hatası parent'ta sırayla basılır.

executor_cmd.c dosyasının 86 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, child_exec(), s_shell::env_list, find_cmd_path(), is_executable(), shell_error(), update_env_value() ve wait_for_child().

Referans veren execute_cmd().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ execute_cmd()

int execute_cmd ( t_shell * shell,
t_cmd * cmd )

Ana komut çalıştırma dispatcher.

executor_cmd.c dosyasının 121 numaralı satırında tanımlanmıştır.

Referanslar s_cmd::args, s_shell::env_list, execute_external(), is_builtin(), s_cmd::redirections, restore_std_fds(), run_builtin_parent(), save_std_fds(), setup_redirs(), update_env_value() ve update_underscore().

Referans veren execute_ast().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ close_pipe()

void close_pipe ( int * pipefd)

Pipe fd'lerini kapat.

executor_pipe.c dosyasının 21 numaralı satırında tanımlanmıştır.

Referans veren execute_pipe() ve fork_process().

Bu fonksiyon için çağırılma şeması:

◆ execute_pipe()

int execute_pipe ( t_shell * shell,
t_ast * node )

Pipe node'unu çalıştır Her iki taraf da child process'te çalışır.

executor_pipe.c dosyasının 45 numaralı satırında tanımlanmıştır.

Referanslar close_pipe(), fork_process(), pipe_left_child(), pipe_right_child(), shell_error() ve wait_pipe().

Referans veren execute_ast().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ pipe_left_child()

void pipe_left_child ( t_shell * shell,
t_ast * node,
int * pipefd )

Pipe'ın sol tarafını çalıştır.

executor_pipe_utils.c dosyasının 19 numaralı satırında tanımlanmıştır.

Referanslar execute_ast(), s_ast::left, reset_signals() ve shell_exit().

Referans veren execute_pipe().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ pipe_right_child()

void pipe_right_child ( t_shell * shell,
t_ast * node,
int * pipefd )

Pipe'ın sağ tarafını çalıştır.

executor_pipe_utils.c dosyasının 34 numaralı satırında tanımlanmıştır.

Referanslar execute_ast(), reset_signals(), s_ast::right ve shell_exit().

Referans veren execute_pipe().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ wait_pipe()

int wait_pipe ( pid_t left_pid,
pid_t right_pid )

İki child'ı bekle, sağ tarafın exit status'unu döndür.

executor_pipe_utils.c dosyasının 49 numaralı satırında tanımlanmıştır.

Referanslar wait_for_child().

Referans veren execute_pipe().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ execute_ast()

int execute_ast ( t_shell * shell,
t_ast * node )

AST node'unu tipine göre çalıştır.

Parametreler
shellShell structure
nodeAST node
Döndürdüğü değer
int exit status

executor.c dosyasının 26 numaralı satırında tanımlanmıştır.

Referanslar s_ast::cmd, execute_ast(), execute_cmd(), execute_pipe(), s_shell::exit_status, s_ast::left, NODE_CMD, NODE_PIPE, NODE_SEQ, s_ast::right ve s_ast::type.

Referans veren execute_ast(), executor(), pipe_left_child() ve pipe_right_child().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ executor()

int executor ( t_shell * shell)

Ana executor entry point.

Parametreler
shellShell structure
Döndürdüğü değer
int exit status

executor.c dosyasının 52 numaralı satırında tanımlanmıştır.

Referanslar s_shell::ast_root ve execute_ast().

Referans veren process_line().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ cleanup_shell()

void cleanup_shell ( t_shell * shell)

Tüm t_shell kaynaklarını serbest bırakır.

Parametreler
shellShell yapısı pointer'ı

env_list, token_list, ast_root ve cmd_line temizlenir.

cleanup.c dosyasının 51 numaralı satırında tanımlanmıştır.

Referanslar s_shell::ast_root, clean_ast(), s_shell::cmd_line, s_shell::env_list, free_env_node(), free_token_content() ve s_shell::token_list.

Referans veren main() ve shell_exit().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ shell_exit()

void shell_exit ( t_shell * shell,
int exit_code )

Shell'i temizleyip programdan çıkar.

Parametreler
shellShell yapısı pointer'ı
exit_codeÇıkış kodu

cleanup_shell çağırır, readline history'yi temizler ve exit yapar.

cleanup.c dosyasının 76 numaralı satırında tanımlanmıştır.

Referanslar cleanup_shell().

Referans veren builtin_exit(), child_exec(), exit_numeric_error(), pipe_left_child(), pipe_right_child() ve redir_heredoc().

Bu fonksiyon için çağırılma şeması:
Bu fonksiyon için çağırılma şeması:

◆ free_str_array()

void free_str_array ( char ** arr)

NULL-terminated string dizisini serbest bırakır.

Parametreler
arrNULL-terminated string dizisi

cleanup.c dosyasının 30 numaralı satırında tanımlanmıştır.

Referans veren child_exec(), create_envp() ve normalize_logical_path().

Bu fonksiyon için çağırılma şeması:

Değişken Dokümantasyonu

◆ g_signal

volatile sig_atomic_t g_signal
extern

signals.c dosyasının 27 numaralı satırında tanımlanmıştır.

Referans veren main() ve sigint_handler().

◆ g_readline_active

volatile sig_atomic_t g_readline_active
extern

signals.c dosyasının 33 numaralı satırında tanımlanmıştır.

Referans veren main() ve sigint_handler().