split enviroment functions, and util files

This commit is contained in:
whaffman 2025-02-04 15:57:26 +01:00
parent 57fb0c0af1
commit 3d0d062495
11 changed files with 210 additions and 159 deletions

12
.editorconfig Normal file
View File

@ -0,0 +1,12 @@
# Generated by editorconfig.timseverien.com
# https://editor.timseverien.com/#config
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = tab
insert_final_newline = true
tab_width = 4
trim_trailing_whitespace = true

View File

@ -22,7 +22,7 @@ LIBFT = $(LIBFT_PATH)/libft.a
OBJ_PATH = obj OBJ_PATH = obj
VPATH = src VPATH = src:src/enviroment
SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c"))
OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o))
@ -31,13 +31,11 @@ DEPENDS = ${OBJECTS:.o=.d}
CC = cc CC = cc
RM = rm -rf RM = rm -rf
INCLUDES = -I./$(INC_PATH) -I./$(LIBFT_INC_PATH) INCLUDES = -I./$(INC_PATH) -I./$(LIBFT_INC_PATH)
CFLAGS = -Wall -Wextra -Werror -MMD CFLAGS = -Wall -Wextra -Werror -MMD -fsanitize=address,undefined -g
LDLIBS := -L$(LIBFT_PATH) -lft
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
LDLIBS := -L$(LIBFT_PATH) -lft
endif
all: $(NAME) all: $(NAME)
@ -61,7 +59,7 @@ $(OBJ_PATH)/%.o: %.c $(LIBFT) | $(OBJ_PATH)
clean: clean:
$(RM) $(OBJECTS) $(OBJ_PATH) $(RM) $(OBJECTS) $(OBJ_PATH)
$(MAKE) -C $(LIBFT_PATH) clean $(MAKE) -C $(LIBFT_PATH) clean
$(MAKE) -C $(MLX42_PATH)/build clean
fclean: clean fclean: clean
$(RM) $(NAME) $(RM) $(NAME)

4
compile_flags.txt Normal file
View File

@ -0,0 +1,4 @@
-I
./inc
-I
./lib/libft/inc

16
inc/enviroment.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef ENVIROMENT_H
# define ENVIROMENT_H
typedef struct s_enviroment
{
char *name;
char *value;
struct s_enviroment *next;
} t_enviroment;
void add_enviroment(t_enviroment **enviroment, char *name, char *value);
void print_enviroment(t_enviroment *enviroment);
char *get_enviroment(t_enviroment *enviroment, char *name);
void free_enviroment(t_enviroment *enviroment);
#endif

View File

@ -1,147 +1,147 @@
/** /**
* @file minishell.h * @file minishell.h
* *
* @brief Header file for the Minishell project. * @brief Header file for the Minishell project.
* *
* This header file includes all necessary libraries and headers required for the Minishell project. * This header file includes all necessary libraries and headers required for the Minishell project.
* The following is a list of included headers and the functions or system calls they provide: * The following is a list of included headers and the functions or system calls they provide:
* *
* @headerfile <stdio.h> * @headerfile <stdio.h>
* - int printf(const char *format, ...); * - int printf(const char *format, ...);
* - Prints formatted data to stdout. * - Prints formatted data to stdout.
* - void perror(const char *s); * - void perror(const char *s);
* - Prints a descriptive error message to stderr. * - Prints a descriptive error message to stderr.
* *
* @headerfile <stdlib.h> * @headerfile <stdlib.h>
* - void* malloc(size_t size); * - void* malloc(size_t size);
* - Allocates memory dynamically. * - Allocates memory dynamically.
* - void free(void *ptr); * - void free(void *ptr);
* - Frees dynamically allocated memory. * - Frees dynamically allocated memory.
* - void exit(int status); * - void exit(int status);
* - Terminates the calling process. * - Terminates the calling process.
* - char* getenv(const char *name); * - char* getenv(const char *name);
* - Retrieves the value of an environment variable. * - Retrieves the value of an environment variable.
* *
* @headerfile <unistd.h> * @headerfile <unistd.h>
* - ssize_t write(int fd, const void *buf, size_t count); * - ssize_t write(int fd, const void *buf, size_t count);
* - Writes data to a file descriptor. * - Writes data to a file descriptor.
* - int access(const char *pathname, int mode); * - int access(const char *pathname, int mode);
* - Checks user's permissions for a file. * - Checks user's permissions for a file.
* - ssize_t read(int fd, void *buf, size_t count); * - ssize_t read(int fd, void *buf, size_t count);
* - Reads data from a file descriptor. * - Reads data from a file descriptor.
* - int close(int fd); * - int close(int fd);
* - Closes a file descriptor. * - Closes a file descriptor.
* - pid_t fork(void); * - pid_t fork(void);
* - Creates a new process. * - Creates a new process.
* - char* getcwd(char *buf, size_t size); * - char* getcwd(char *buf, size_t size);
* - Gets the current working directory. * - Gets the current working directory.
* - int chdir(const char *path); * - int chdir(const char *path);
* - Changes the current working directory. * - Changes the current working directory.
* - int unlink(const char *pathname); * - int unlink(const char *pathname);
* - Deletes a name from the filesystem. * - Deletes a name from the filesystem.
* - int execve(const char *pathname, char *const argv[], char *const envp[]); * - int execve(const char *pathname, char *const argv[], char *const envp[]);
* - Executes a program. * - Executes a program.
* - int dup(int oldfd); * - int dup(int oldfd);
* - Duplicates a file descriptor. * - Duplicates a file descriptor.
* - int dup2(int oldfd, int newfd); * - int dup2(int oldfd, int newfd);
* - Duplicates a file descriptor to a specific descriptor number. * - Duplicates a file descriptor to a specific descriptor number.
* - int pipe(int pipefd[2]); * - int pipe(int pipefd[2]);
* - Creates a pipe. * - Creates a pipe.
* - int isatty(int fd); * - int isatty(int fd);
* - Checks if a file descriptor refers to a terminal. * - Checks if a file descriptor refers to a terminal.
* - char* ttyname(int fd); * - char* ttyname(int fd);
* - Returns the name of the terminal associated with a file descriptor. * - Returns the name of the terminal associated with a file descriptor.
* - int ttyslot(void); * - int ttyslot(void);
* - Returns the index of the current terminal. * - Returns the index of the current terminal.
* *
* @headerfile <string.h> * @headerfile <string.h>
* - char* strerror(int errnum); * - char* strerror(int errnum);
* - Returns a string describing the error number. * - Returns a string describing the error number.
* *
* @headerfile <sys/types.h> * @headerfile <sys/types.h>
* - Required for various system calls and data types. * - Required for various system calls and data types.
* *
* @headerfile <sys/wait.h> * @headerfile <sys/wait.h>
* - pid_t wait(int *wstatus); * - pid_t wait(int *wstatus);
* - Waits for a child process to change state. * - Waits for a child process to change state.
* - pid_t waitpid(pid_t pid, int *wstatus, int options); * - pid_t waitpid(pid_t pid, int *wstatus, int options);
* - Waits for a specific child process to change state. * - Waits for a specific child process to change state.
* - pid_t wait3(int *wstatus, int options, struct rusage *rusage); * - pid_t wait3(int *wstatus, int options, struct rusage *rusage);
* - Waits for a child process to change state with resource usage information. * - Waits for a child process to change state with resource usage information.
* - pid_t wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage); * - pid_t wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage);
* - Waits for a specific child process to change state with resource usage information. * - Waits for a specific child process to change state with resource usage information.
* *
* @headerfile <fcntl.h> * @headerfile <fcntl.h>
* - int open(const char *pathname, int flags, ...); * - int open(const char *pathname, int flags, ...);
* - Opens a file. * - Opens a file.
* *
* @headerfile <errno.h> * @headerfile <errno.h>
* - Provides access to the errno variable. * - Provides access to the errno variable.
* *
* @headerfile <signal.h> * @headerfile <signal.h>
* - void (*signal(int signum, void (*handler)(int)))(int); * - void (*signal(int signum, void (*handler)(int)))(int);
* - Sets a signal handler. * - Sets a signal handler.
* - int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); * - int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
* - Examines and changes a signal action. * - Examines and changes a signal action.
* - int sigemptyset(sigset_t *set); * - int sigemptyset(sigset_t *set);
* - Initializes a signal set to empty. * - Initializes a signal set to empty.
* - int sigaddset(sigset_t *set, int signum); * - int sigaddset(sigset_t *set, int signum);
* - Adds a signal to a signal set. * - Adds a signal to a signal set.
* - int kill(pid_t pid, int sig); * - int kill(pid_t pid, int sig);
* - Sends a signal to a process. * - Sends a signal to a process.
* *
* @headerfile <readline/readline.h> * @headerfile <readline/readline.h>
* - char* readline(const char *prompt); * - char* readline(const char *prompt);
* - Reads a line of input from the user. * - Reads a line of input from the user.
* - void rl_clear_history(void); * - void rl_clear_history(void);
* - Clears the history list. * - Clears the history list.
* - void rl_on_new_line(void); * - void rl_on_new_line(void);
* - Informs the readline library that the cursor is on a new line. * - Informs the readline library that the cursor is on a new line.
* - void rl_replace_line(const char *text, int clear_undo); * - void rl_replace_line(const char *text, int clear_undo);
* - Replaces the contents of the current line. * - Replaces the contents of the current line.
* - void rl_redisplay(void); * - void rl_redisplay(void);
* - Redisplays the current line. * - Redisplays the current line.
* - void add_history(const char *line); * - void add_history(const char *line);
* - Adds a line to the history list. * - Adds a line to the history list.
* *
* @headerfile <dirent.h> * @headerfile <dirent.h>
* - DIR* opendir(const char *name); * - DIR* opendir(const char *name);
* - Opens a directory stream. * - Opens a directory stream.
* - struct dirent* readdir(DIR *dirp); * - struct dirent* readdir(DIR *dirp);
* - Reads a directory entry. * - Reads a directory entry.
* - int closedir(DIR *dirp); * - int closedir(DIR *dirp);
* - Closes a directory stream. * - Closes a directory stream.
* *
* @headerfile <sys/stat.h> * @headerfile <sys/stat.h>
* - int stat(const char *pathname, struct stat *statbuf); * - int stat(const char *pathname, struct stat *statbuf);
* - Gets file status. * - Gets file status.
* - int lstat(const char *pathname, struct stat *statbuf); * - int lstat(const char *pathname, struct stat *statbuf);
* - Gets file status, not following symbolic links. * - Gets file status, not following symbolic links.
* - int fstat(int fd, struct stat *statbuf); * - int fstat(int fd, struct stat *statbuf);
* - Gets file status for an open file descriptor. * - Gets file status for an open file descriptor.
* *
* @headerfile <sys/ioctl.h> * @headerfile <sys/ioctl.h>
* - int ioctl(int fd, unsigned long request, ...); * - int ioctl(int fd, unsigned long request, ...);
* - Manipulates the underlying device parameters of special files. * - Manipulates the underlying device parameters of special files.
* *
* @headerfile <termios.h> * @headerfile <termios.h>
* - int tcsetattr(int fd, int optional_actions, const struct termios *termios_p); * - int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);
* - Sets the parameters associated with the terminal. * - Sets the parameters associated with the terminal.
* - int tcgetattr(int fd, struct termios *termios_p); * - int tcgetattr(int fd, struct termios *termios_p);
* - Gets the parameters associated with the terminal. * - Gets the parameters associated with the terminal.
* *
* @headerfile <term.h> * @headerfile <term.h>
* - int tgetent(char *bp, const char *name); * - int tgetent(char *bp, const char *name);
* - Loads the terminal entry for a given terminal name. * - Loads the terminal entry for a given terminal name.
* - int tgetflag(const char *id); * - int tgetflag(const char *id);
* - Gets the boolean value of a terminal capability. * - Gets the boolean value of a terminal capability.
* - int tgetnum(const char *id); * - int tgetnum(const char *id);
* - Gets the numeric value of a terminal capability. * - Gets the numeric value of a terminal capability.
* - char* tgetstr(const char *id, char **area); * - char* tgetstr(const char *id, char **area);
* - Gets the string value of a terminal capability. * - Gets the string value of a terminal capability.
* - char* tgoto(const char *cap, int col, int row); * - char* tgoto(const char *cap, int col, int row);
* - Computes a cursor movement string. * - Computes a cursor movement string.
* - int tputs(const char *str, int affcnt, int (*putc)(int)); * - int tputs(const char *str, int affcnt, int (*putc)(int));
* - Outputs a string with padding. * - Outputs a string with padding.
*/ */
#ifndef MINISHELL_H #ifndef MINISHELL_H
@ -162,4 +162,10 @@
# include <termios.h> # include <termios.h>
# include <term.h> # include <term.h>
#endif // MINISHELL_H # include <readline/readline.h>
# include <readline/history.h>
# include "libft.h"
# include "enviroment.h"
#endif // MINISHELL_H

@ -1 +1 @@
Subproject commit 27f7d3e9e02cccf7092f3101b939d381198a595b Subproject commit 716aeca641571c4880639eaa3994bdaeec5b8f0f

View File

@ -0,0 +1,24 @@
#include "enviroment.h"
#include "libft.h"
#include <stdlib.h>
#include <stdio.h>
void add_enviroment(t_enviroment **enviroment, char *name, char *value)
{
t_enviroment *new_enviroment;
if (name != NULL && value != NULL)
{
new_enviroment = malloc(sizeof(t_enviroment));
if (new_enviroment == NULL)
{
perror("malloc");
return ;
}
new_enviroment->name = ft_strdup(name);
new_enviroment->value = ft_strdup(value);
new_enviroment->next = *enviroment;
*enviroment = new_enviroment;
}
}

View File

@ -0,0 +1,20 @@
#include "enviroment.h"
#include <stdlib.h>
void free_enviroment(t_enviroment *enviroment)
{
t_enviroment *next;
while (enviroment != NULL)
{
if (enviroment->next)
next = enviroment->next;
else
next = NULL;
free(enviroment->name);
free(enviroment->value);
free(enviroment);
enviroment = next;
}
}

View File

@ -0,0 +1,15 @@
#include "enviroment.h"
#include "libft.h"
char *get_enviroment(t_enviroment *enviroment, char *name)
{
while (enviroment != NULL)
{
if (ft_strcmp(enviroment->name, name) == 0)
{
return enviroment->value;
}
enviroment = enviroment->next;
}
return NULL;
}

View File

@ -0,0 +1,11 @@
#include "enviroment.h"
#include <stdio.h>
void print_enviroment(t_enviroment *enviroment)
{
while (enviroment != NULL)
{
printf("%s=%s\n", enviroment->name, enviroment->value);
enviroment = enviroment->next;
}
}

View File

@ -1,88 +1,33 @@
#include "minishell.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "libft.h"
// /**
// * @brief Prints the prompt for the Minishell.
// *
// * This function prints the prompt for the Minishell, which is the current working directory followed by a dollar sign.
// *
// * @param void
// * @return void
// */
typedef struct s_enviroment
{
char *name;
char *value;
struct s_enviroment *next;
} t_enviroment;
void add_enviroment(t_enviroment **enviroment, char *name, char *value)
{
t_enviroment *new_enviroment = malloc(sizeof(t_enviroment));
if (new_enviroment == NULL)
{
perror("malloc");
return;
}
new_enviroment->name = name;
new_enviroment->value = value;
new_enviroment->next = *enviroment;
*enviroment = new_enviroment;
}
void print_enviroment(t_enviroment *enviroment)
{
while (enviroment != NULL)
{
printf("%s=%s\n", enviroment->name, enviroment->value);
enviroment = enviroment->next;
}
}
char *get_enviroment(t_enviroment *enviroment, char *name)
{
while (enviroment != NULL)
{
if (ft_strcmp(enviroment->name, name) == 0)
{
return enviroment->value;
}
enviroment = enviroment->next;
}
return NULL;
}
void print_prompt(void) void print_prompt(void)
{ {
char *cwd = getcwd(NULL, 0); char *cwd = getcwd(NULL, 0);
if (cwd == NULL) if (cwd == NULL)
{ {
perror("getcwd"); perror("getcwd");
return; return;
} }
printf("%s$ ", cwd); printf("%s$ ", cwd);
free(cwd); free(cwd);
} }
int main(int argc, char **argv, char **envp) int main(int argc, char **argv, char **envp)
{ {
(void)argc; (void)argc;
(void)argv; (void)argv;
char **env; char **env;
t_enviroment *enviroment = NULL; t_enviroment *enviroment = NULL;
while (*envp != NULL) while (*envp != NULL)
{ {
env = ft_split(*envp, '='); env = ft_split(*envp, '=');
add_enviroment(&enviroment, env[0], env[1]); add_enviroment(&enviroment, env[0], env[1]);
envp++; ft_free_arr(env);
} envp++;
}
print_enviroment(enviroment); print_enviroment(enviroment);
return 0; free_enviroment(enviroment);
} return 0;
}