#include #include #include #include # define COL_GREEN "\001\e[0;32m\002" # define COL_BROWN "\001\e[0;33m\002" # define COL_PURPL "\001\e[0;35m\002" # define _END "\001\e[0m\002" size_t ft_strlen(const char *s); char *ft_strdup(const char *s); size_t ft_2d_arrlen(void *ptr); void *ft_dup_2d_arr(void *ptr, void *(*dup_func)(void *)); void print_matrix(char **matrix, char *sep); void *ft_resize_2d_arr(void *ptr, size_t add_nbr); typedef void *(*t_dup_f)(void *); int main(int argc, char *argv[], char *envp[]) { extern char **environ; int env_len; char *print; char *env_var; (void)argc; (void)argv; print = COL_GREEN"\n[original ] :\n"_END; write(1, print, strlen(print)); env_len = ft_2d_arrlen(environ); printf("\nenviron_len: %i\nenviron :\n", env_len); print_matrix(environ, "\n"); print = COL_GREEN"\n[getenv] :\n"_END; write(1, print, strlen(print)); env_var = getenv("TESTT"); if (env_var) write(1, COL_PURPL"FOUND\n"_END, 21); else write(1, COL_PURPL"NOT FOUND\n"_END, 25); print = COL_BROWN"\n[resize ]...\n"_END; write(1, print, strlen(print)); environ = ft_resize_2d_arr(environ, 1); print = COL_BROWN"\n[add to ]...\n"_END; write(1, print, strlen(print)); environ[env_len] = "TESTT=testt"; print = COL_GREEN"\n[modified ] :\n"_END; write(1, print, strlen(print)); env_len = ft_2d_arrlen(environ); printf("\nenviron_len: %i\nenviron :\n", env_len); print_matrix(environ, "\n"); print = COL_GREEN"\n[getenv] :\n"_END; write(1, print, strlen(print)); env_var = getenv("TESTT"); if (env_var) write(1, COL_PURPL"FOUND\n"_END, 21); else write(1, COL_PURPL"NOT FOUND\n"_END, 25); printf("\n%s\n", env_var); return (0); } void *ft_resize_2d_arr(void *ptr, size_t add_nbr) { unsigned int i; char **arr; char **new_arr; new_arr = malloc((ft_2d_arrlen(ptr) + add_nbr + 1) * sizeof (void *)); arr = (char **)ptr; i = 0; while (arr[i]) { new_arr[i] = arr[i]; i++; } // free(arr); return (new_arr); } void print_matrix(char **matrix, char *sep) { int i; i = 0; while (matrix[i]) { printf("%s", matrix[i]); if (matrix[i + 1]) printf("%s", sep); fflush(stdout); i++; } write(1, "\n", 1); } size_t ft_strlen(const char *s) { size_t len; len = 0; while (s[len] != '\0') len++; return (len); } char *ft_strdup(const char *s) { unsigned int i; char *dup; dup = malloc(ft_strlen(s) + 1); if (!dup) return (NULL); i = 0; while (s[i]) { dup[i] = s[i]; i++; } dup[i] = '\0'; return (dup); } size_t ft_2d_arrlen(void *ptr) // Replace ft_arrlen() { size_t len; char **arr; arr = (char **)ptr; len = 0; while (arr[len] != NULL) len++; return (len); } void *ft_dup_2d_arr(void *ptr, void *(*dup_func)(void *)) { unsigned int i; char **arr; char **new_arr; new_arr = malloc((ft_2d_arrlen(ptr) + 1) * sizeof (void *)); if (!new_arr) return (NULL); arr = (char **)ptr; i = 0; while (arr[i]) { new_arr[i] = dup_func(arr[i]); i++; } new_arr[i] = NULL; return (new_arr); }