|
Minishell 1.0
42 School Minishell Project - A simple shell implementation
|
Minishell ana header dosyası Ayrıntılar...
#include "../libft/libft.h"#include "garbage_collector.h"#include <signal.h>#include <stddef.h>#include <stdio.h>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_env * | create_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_env * | find_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_token * | create_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_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. | |
| 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_ast * | parse_simple_command (t_list **tokens) |
| Basit komutu parse eder. | |
| t_ast * | parse_pipe (t_list **tokens) |
| Pipe ifadesini parse eder: simple_command | parse_pipe. | |
| t_ast * | parse_sequence (t_list **tokens) |
| Ardışık komutları (newline ile ayrılmış) parse eder. | |
| t_ast * | construct_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_token * | peek_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_ast * | create_ast_node (t_node_type type) |
| Yeni bir Soyut Sözdizimi Ağacı (AST) düğümü oluşturur. | |
| t_cmd * | create_cmd_content (void) |
| Boş bir komut yapısı (t_cmd) oluşturur ve başlatır. | |
| t_redir * | create_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_env * | find_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 |
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.
minishell.h dosyasında tanımlanmıştır.
| #define TRUE 1 |
minishell.h dosyasının 44 numaralı satırında tanımlanmıştır.
| #define FALSE 0 |
minishell.h dosyasının 45 numaralı satırında tanımlanmıştır.
| #define LLONG_MAX_VAL 9223372036854775807ULL |
minishell.h dosyasının 46 numaralı satırında tanımlanmıştır.
Referans veren check_overflow().
| 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_expansion_parts t_expansion_parts |
| typedef struct s_token_cleaner t_token_cleaner |
| typedef enum e_redir_type t_redir_type |
-----> PARSER <--—
| typedef enum e_node_type t_node_type |
| enum 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.
| enum 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.
| enum 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.
| enum 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.
| enum 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.
| enum 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.
| void free_env_node | ( | void * | content | ) |
Ortam değişkeni node'unu serbest bırakır.
| content | t_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().
| t_env * create_env_content | ( | char * | key, |
| char * | value ) |
Ortam değişkeni içeriği oluşturur.
| key | Değişken adı |
| value | Değişken değeri |
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().
| 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().
| 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().
| int init_env_list | ( | t_shell * | shell | ) |
Ortam değişkenleri listesini başlatır.
| shell | Shell yapısı |
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().
| 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.
| shell | Shell yapısı |
| env_str | "KEY=VALUE" formatında ortam değişkeni stringi |
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().
| int parse_env_variables | ( | t_shell * | shell | ) |
Tüm ortam değişkenlerini (envp) ayrıştırarak listeye ekler.
| shell | Shell yapısı |
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().
| t_env * find_env_by_key | ( | t_list * | env_list, |
| char * | key ) |
Env listesinde key'e göre arama yapar.
| env_list | Ortam değişkenleri listesi |
| key | Aranacak key |
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().
| int update_env_value | ( | t_list * | env_list, |
| char * | key, | ||
| char * | new_value ) |
Mevcut env değişkeninin değerini günceller.
| env_list | Ortam değişkenleri listesi |
| key | Güncellenecek değişken adı |
| new_value | Yeni değer (NULL olabilir, strdup yapılır) |
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().
| char * env_to_str | ( | t_env * | env | ) |
t_env yapısını "KEY=VALUE" formatına çevir
| env | Environment node |
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().
| char ** create_envp | ( | t_shell * | shell | ) |
shell->env_list'i char **envp formatına çevir
| shell | Shell structure |
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().
| int process_next_token | ( | t_shell * | shell, |
| int | i ) |
Bir sonraki token'ı işler.
| shell | Shell yapısı |
| i | Mevcut indeks |
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().
| int lexer | ( | t_shell * | shell | ) |
Lexer ana fonksiyonu — komut satırını token'lara ayırır.
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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
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.
| shell | Çevre değişkenlerine ve çıkış koduna erişim sağlayan ana yapı. |
| token | İçeriği taranacak ve güncellenecek olan token. |
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().
Token'ın genişletilip genişletilmeyeceğine karar veren dağıtıcı.
Bu fonksiyon iki temel kuralı kontrol eder:
| shell | Ana yapı. |
| current | İşlem sırasındaki mevcut token. |
| prev | Bir önceki token (Heredoc kontrolü için gereklidir). |
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().
| 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.
| shell | Token listesini ve env listesini içeren ana yapı. |
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().
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.
| shell | Ana yapı (env listesine erişim için). |
| str | Dolar işaretinden hemen sonra başlayan string. |
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().
| 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.
| var | extract_variable_info'dan dönen paket. |
| i | Ana döngüdeki indeksin adresi (güncellemek için). |
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().
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.
| token | Üzerinde işlem yapılan token. |
| var | Değişken bilgilerini tutan paket. |
| i | Ana döngüdeki indeksin adresi. |
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().
Tek bir genişletme işleminin tüm sürecini yöneten orkestra şefi.
| shell | Ana yapı. |
| token | İşlenen token. |
| i | Ana döngüdeki indeksin adresi. |
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().
| 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:
Bu parçaları ft_strjoin ile birleştirir ve eski token değerini güvenli bir şekilde yenisiyle değiştirir.
| token | Değeri değiştirilecek olan token. |
| var_value | Değ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). |
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().
| 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.
| next_c | Dolar işaretinden sonra gelen karakter. |
expander_utils.c dosyasının 28 numaralı satırında tanımlanmıştır.
Referans veren expand_heredoc_line() ve expand_variable().
| int get_var_name_len | ( | char * | str | ) |
Değişken isminin uzunluğunu hesaplar.
'$' işaretinden sonraki karakterleri tarar.
| str | Dolar işaretinden hemen sonra başlayan string. |
expander_utils.c dosyasının 46 numaralı satırında tanımlanmıştır.
Referans veren expand_dollar() ve extract_variable_info().
| char * get_env_value | ( | t_list * | env_list, |
| char * | key ) |
Environment listesinde key'e göre değer döndürür.
| env_list | Ortam değişkenleri listesi |
| key | Aranacak key |
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().
| 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.
| shell | Ana yapı (env listesi ve exit status için). |
| var_name | Değişkenin adı (Örn: "USER" veya "?"). |
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().
| 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.
| shell | Listenin başını (head) güncellemek için gerekli. |
| vars | Dö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().
| 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.
| shell | Ana 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().
| int handle_redir | ( | t_ast * | node, |
| t_list ** | tokens ) |
Yönlendirme token'ını işler.
| node | Yönlendirmenin ekleneceği AST node |
| tokens | Token listesi pointer'ı |
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().
| t_ast * parse_simple_command | ( | t_list ** | tokens | ) |
Basit komutu parse eder.
| tokens | Token listesi pointer'ı |
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().
| 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().
| 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().
Token listesinden AST oluşturur.
| shell | Shell yapısı |
| token_list | Token listesi pointer'ı |
Ö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().
| int parser | ( | t_shell * | shell | ) |
Parser ana fonksiyonu.
| shell | Shell yapısı |
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().
| int is_parsing_success | ( | t_ast * | root, |
| t_list * | curr_token ) |
Parsing işleminin başarılı olup olmadığını kontrol eder.
| root | AST root node |
| curr_token | Kalan token listesi |
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().
Başarılı parsing sonrası AST'yi shell'e atar.
| shell | Shell yapısı |
| root | AST root node |
parser_utils.c dosyasının 48 numaralı satırında tanımlanmıştır.
Referanslar s_shell::ast_root.
Referans veren parser().
| int count_cmd_args | ( | char ** | args | ) |
Komut argüman sayısını hesaplar.
| args | NULL-terminated argüman dizisi |
parser_utils.c dosyasının 59 numaralı satırında tanımlanmıştır.
Referans veren add_arg_to_cmd().
| t_redir_type token_to_redir_type | ( | t_token_type | type | ) |
Token tipini redirection tipine dönüştürür.
| type | Token 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().
| t_token * peek_token | ( | t_list * | tokens | ) |
Token listesinin başındaki token'a bakar (ilerletmez).
| tokens | Token listesi |
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().
| void advance_token | ( | t_list ** | tokens | ) |
Token listesini bir ileri taşır.
| tokens | Token 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().
Parser hata durumunda temizlik yapar.
| shell | Shell yapısı |
| root | Temizlenecek AST (NULL olabilir) |
| tok | Hata konumundaki token (kullanılmıyor) |
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().
| 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.
| redir | Serbest 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().
| 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.
| cmd | Serbest 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().
| 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.
| node | Temizlenecek 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().
| 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.
| shell | Ana yapı. |
| node | Şu an incelenen liste düğümü. |
| p_count | Parantez sayacının adresi. |
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().
| 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.
| shell | Ana yapı. |
| tokens | Token listesi. |
syntax_validation.c dosyasının 43 numaralı satırında tanımlanmıştır.
Referanslar check_token_context().
Referans veren 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.
| shell | Ana yapı. |
| tokens | Token listesi. |
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().
| 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.
| shell | Ana yapı (Hata durumunda exit_status güncellemek için). |
| tokens | Kontrol edilecek token listesinin başı. |
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().
| 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.
| shell | Ana yapı. |
| tokens | Token listesi. |
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().
| 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.
| shell | Ana yapı. |
| current_node | Şu anki token düğümü (Yönlendirme operatörü). |
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().
| 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.
| shell | Ana yapı. |
| current_node | Şu anki token düğümü (Operatör). |
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().
| int is_redirection | ( | t_token_type | type | ) |
Bir token tipinin yönlendirme (Redirection) olup olmadığını kontrol eder.
Yönlendirme operatörleri:
| type | Kontrol edilecek token tipi. |
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().
| 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:
| type | Kontrol edilecek token tipi. |
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().
| 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.
| line | Kontrol edilecek satır |
input_completion.c dosyasının 40 numaralı satırında tanımlanmıştır.
Referans veren complete_input() ve main().
| 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.
| shell | Shell yapısı (sinyal kontrolü için) |
| line | Mevcut (eksik) girdi satırı |
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().
| 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.
| type | Düğümün türü (NODE_PIPE, NODE_CMD, vb.). |
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().
| 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.
parser_constructors.c dosyasının 36 numaralı satırında tanımlanmıştır.
Referans veren parse_simple_command().
| 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.
| type | Yönlendirme türü (REDIR_IN, REDIR_OUT, HEREDOC, vb.). |
| file | Yönlendirilecek dosya adı veya Heredoc delimiter'ı. |
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().
| 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.
| redir_list | Komut yapısındaki 'redirections' listesinin adresi. |
| redir_content | Eklenecek olan t_redir yapısı. |
parser_append.c dosyasının 18 numaralı satırında tanımlanmıştır.
Referanslar s_redir::file.
Referans veren handle_redir().
| 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:
| new_args | calloc ile ayrılmış boş, yeni dizi. |
| cmd | Eski argümanların bulunduğu komut yapısı. |
| arg | Eklenecek yeni argüman stringi. |
| arg_count | Eski argüman sayısı. |
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().
| 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:
| cmd | Argümanın ekleneceği komut yapısı. |
| arg | Eklenecek argüman stringi. |
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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| 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().
| int skip_whitespace | ( | char * | cmd, |
| int | i ) |
| int is_delimiter | ( | char | c | ) |
utils.c dosyasının 23 numaralı satırında tanımlanmıştır.
Referans veren handle_word().
| 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().
| 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().
| 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().
| 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().
| 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().
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().
| 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().
| 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().
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().
| 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().
| 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().
| 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().
| 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().
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().
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().
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().
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().
| 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().
| int save_std_fds | ( | int * | saved_fds | ) |
stdin ve stdout'u kaydet (builtin için)
| saved_fds | 2 elemanlı array |
executor_utils.c dosyasının 49 numaralı satırında tanımlanmıştır.
Referans veren execute_cmd() ve run_builtin_parent().
| int restore_std_fds | ( | int * | saved_fds | ) |
Kaydedilen fd'leri geri yükle.
| saved_fds | 2 elemanlı array |
executor_utils.c dosyasının 70 numaralı satırında tanımlanmıştır.
Referans veren execute_cmd() ve run_builtin_parent().
| int is_executable | ( | char * | path | ) |
Dosyanın var olup olmadığını ve çalıştırılabilir olup olmadığını kontrol et.
| path | Dosya yolu |
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().
| char * join_path | ( | char * | dir, |
| char * | cmd ) |
Dizin ve komut adını birleştir.
| dir | Dizin yolu |
| cmd | Komut adı |
executor_path.c dosyasının 40 numaralı satırında tanımlanmıştır.
Referans veren search_path().
| char ** get_path_dirs | ( | t_shell * | shell | ) |
PATH environment değişkenini parse et.
| shell | Shell structure |
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().
| char * search_path | ( | char ** | dirs, |
| char * | cmd ) |
PATH dizinlerinde komutu ara.
| dirs | PATH dizinleri |
| cmd | Komut adı |
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().
| char * find_cmd_path | ( | t_shell * | shell, |
| char * | cmd ) |
Ana PATH arama fonksiyonu.
| shell | Shell structure |
| cmd | Komut adı |
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().
| int redir_input | ( | t_redir * | redir | ) |
| int redir_output | ( | t_redir * | redir | ) |
| int redir_append | ( | t_redir * | redir | ) |
Tek bir redirection uygula.
| shell | Shell structure |
| redir | Redirection yapısı |
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().
Tüm redirectionları uygula.
| shell | Shell structure |
| cmd | Command yapısı |
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().
Heredoc redirection uygula (fork tabanlı).
| shell | Shell structure |
| redir | Redirection yapısı |
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().
| int create_heredoc_pipe | ( | int * | pipefd | ) |
Heredoc için pipe oluştur.
| pipefd | Pipe file descriptors |
executor_heredoc_utils.c dosyasının 23 numaralı satırında tanımlanmıştır.
Referanslar shell_error().
Referans veren redir_heredoc().
| int write_heredoc_line | ( | int | fd, |
| char * | line ) |
Heredoc satırını pipe'a yaz.
| fd | File descriptor |
| line | Yazılacak satır |
executor_heredoc_utils.c dosyasının 41 numaralı satırında tanımlanmıştır.
Referans veren heredoc_child().
| 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().
| char * expand_dollar | ( | t_shell * | shell, |
| char * | line, | ||
| char * | result, | ||
| int * | i ) |
Tek bir $VAR genişletmesi yap ve result'a ekle.
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().
| char * expand_heredoc_line | ( | t_shell * | shell, |
| char * | line ) |
Heredoc satırındaki $VAR değişkenlerini genişlet.
| shell | Shell yapısı (env değişkenleri için) |
| line | Genişletilecek satır |
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().
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().
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().
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().
| 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().
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().
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().
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().
| 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().
AST node'unu tipine göre çalıştır.
| shell | Shell structure |
| node | AST node |
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().
| int executor | ( | t_shell * | shell | ) |
Ana executor entry point.
| shell | Shell structure |
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().
| void cleanup_shell | ( | t_shell * | shell | ) |
Tüm t_shell kaynaklarını serbest bırakır.
| shell | Shell 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().
| void shell_exit | ( | t_shell * | shell, |
| int | exit_code ) |
Shell'i temizleyip programdan çıkar.
| shell | Shell 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().
| void free_str_array | ( | char ** | arr | ) |
NULL-terminated string dizisini serbest bırakır.
| arr | NULL-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().
|
extern |
signals.c dosyasının 27 numaralı satırında tanımlanmıştır.
Referans veren main() ve sigint_handler().
|
extern |
signals.c dosyasının 33 numaralı satırında tanımlanmıştır.
Referans veren main() ve sigint_handler().