From 457ff2996d3f351cbf464aaa51a6bb69ed5c7078 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 19:08:04 +0200 Subject: [PATCH 01/16] changed to atol because possible overflow --- ft_atod.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ft_atod.c b/ft_atod.c index 9538af1..4e66445 100644 --- a/ft_atod.c +++ b/ft_atod.c @@ -27,15 +27,15 @@ double ft_atod(char *nbr) double res; int i; int j; - int vz; + int sign; j = 1; - vz = 1; + sign = 1; if (!nbr) return (0); - res = ft_atoi(nbr); + res = ft_atol(nbr); if (is_negativ(nbr)) - vz = -1; + sign = -1; while (*nbr && *nbr != '.') nbr++; if (*nbr == '.') @@ -43,6 +43,6 @@ double ft_atod(char *nbr) i = ft_strlen(nbr); while (i-- > 0) j *= 10; - res += (double)ft_atoi(nbr) * vz / j; + res += (double)ft_atol(nbr) * sign / j; return (res); } From bcb30583bbebb3632be6cb33c4a72498b3f77140 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 19:08:43 +0200 Subject: [PATCH 02/16] renamend bad variable names --- ft_atoi.c | 18 +++++++++--------- ft_atol.c | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ft_atoi.c b/ft_atoi.c index d65ff0b..6fafb95 100644 --- a/ft_atoi.c +++ b/ft_atoi.c @@ -14,17 +14,17 @@ int ft_atoi(const char *str) { - int vz; - unsigned int c; + int sign; + unsigned int nbr; - vz = 1; - c = 0; + sign = 1; + nbr = 0; while (ft_isspace(*str)) str++; if (*str == '-') { str++; - vz = -1; + sign = -1; } else if (*str == '+') str++; @@ -32,11 +32,11 @@ int ft_atoi(const char *str) return (0); while (ft_isdigit(*str)) { - c = c * 10 + *(str++) - '0'; - if (c > INT32_MAX && vz == -1) + nbr = nbr * 10 + *(str++) - '0'; + if (nbr > INT32_MAX && sign == -1) return (0); - else if (c > (INT32_MAX - 1) && vz == 1) + else if (nbr > (INT32_MAX - 1) && sign == 1) return (-1); } - return ((int)(c * vz)); + return ((int)(nbr * sign)); } diff --git a/ft_atol.c b/ft_atol.c index ba96ad2..2e03797 100644 --- a/ft_atol.c +++ b/ft_atol.c @@ -14,17 +14,17 @@ long ft_atol(char *str) { - long vz; - unsigned long c; + long sign; + unsigned long nbr; - vz = 1; - c = 0; + sign = 1; + nbr = 0; while (ft_isspace(*str)) str++; if (*str == '-') { str++; - vz = -1; + sign = -1; } else if (*str == '+') str++; @@ -32,11 +32,11 @@ long ft_atol(char *str) return (0); while (ft_isdigit(*str)) { - c = c * 10 + *(str++) - '0'; - if (c > INT64_MAX && vz == -1) + nbr = nbr * 10 + *(str++) - '0'; + if (nbr > INT64_MAX && sign == -1) return (0); - else if (c > (INT64_MAX - 1) && vz == 1) + else if (nbr > (INT64_MAX - 1) && sign == 1) return (-1); } - return ((long)(c * vz)); + return ((long)(nbr * sign)); } From f48dbade579f63034f8494da2d8969c5dca27030 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 19:09:09 +0200 Subject: [PATCH 03/16] added missing malloc protection --- ft_first_word.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ft_first_word.c b/ft_first_word.c index af82dc6..38dd6c9 100644 --- a/ft_first_word.c +++ b/ft_first_word.c @@ -14,26 +14,28 @@ /*Returns a malloced string to first occurens of c in str from beginning*/ /*or if rev = 1 from the end*/ -char *ft_first_word(const char *str, char c, int rev) +char *ft_first_word(const char *str, char limiter, int rev) { int i; int len; char *ret; i = 0; - len = ft_strlen(str); if (str == NULL) return (NULL); - if (c == '\0') - c = ' '; + len = ft_strlen(str); + if (limiter == '\0') + limiter = ' '; if (rev != 1) rev = 0; - while (str[i] != '\0' && str[i] != c) + while (str[i] != '\0' && str[i] != limiter) i++; if (rev == 0) ret = ft_calloc(i + 1, sizeof(char)); else ret = ft_calloc(len - i + 1, sizeof(char)); + if (ret == NULL) + return (NULL); if (rev == 0) ft_memcpy(ret, &str[0], i); else From 9ff8ce9b2e6904d17d05737fab98baf312a5942d Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 19:28:27 +0200 Subject: [PATCH 04/16] added malloc protection, renamed bad variable names --- ft_itoa.c | 34 +++++++++++++++++----------------- ft_last_word.c | 14 ++++++++------ ft_ltoa.c | 42 +++++++++++++++++++++--------------------- libft.h | 8 ++++---- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/ft_itoa.c b/ft_itoa.c index bb8536e..7a7042a 100644 --- a/ft_itoa.c +++ b/ft_itoa.c @@ -27,30 +27,30 @@ static int ft_count(int c) return (n); } -char *ft_itoa(int n) +char *ft_itoa(int nbr) { - char *p; + char *str; int i; - int vz; + int sign; - i = ft_count(n); - vz = 0; - if (n < 0) - vz = 1; - p = malloc(i + vz +1); - if (p == NULL) + i = ft_count(nbr); + sign = 0; + if (nbr < 0) + sign = 1; + str = malloc(i + sign + 1); + if (str == NULL) return (NULL); - p[i + vz] = '\0'; - if (vz == 1) - p[0] = '-'; + str[i + sign] = '\0'; + if (sign == 1) + str[0] = '-'; while (i > 0) { - if (vz == 1) - p[i + vz - 1] = (n % 10) * -1 + '0'; + if (sign == 1) + str[i + sign - 1] = (nbr % 10) * -1 + '0'; else - p[i + vz - 1] = n % 10 + '0'; - n = n / 10; + str[i + sign - 1] = nbr % 10 + '0'; + nbr = nbr / 10; i--; } - return (p); + return (str); } diff --git a/ft_last_word.c b/ft_last_word.c index 4dfef13..456a44d 100644 --- a/ft_last_word.c +++ b/ft_last_word.c @@ -14,26 +14,28 @@ /*Returns a malloced string to last occurens of c in str from end*/ /*or if rev = 1 from start to the lim*/ -char *ft_last_word(const char *str, char c, int rev) +char *ft_last_word(const char *str, char limiter, int rev) { int i; int len; char *ret; - len = ft_strlen(str); - i = len; if (str == NULL) return (NULL); - if (c == '\0') - c = ' '; + len = ft_strlen(str); + i = len; + if (limiter == '\0') + limiter = ' '; if (rev != 1) rev = 0; - while (i >= 0 && str[i] != c) + while (i >= 0 && str[i] != limiter) i--; if (rev == 0) ret = ft_calloc(len - i + 1, sizeof(char)); else ret = ft_calloc(i, sizeof(char)); + if (ret == NULL) + return (NULL); if (rev == 0) ft_memcpy(ret, &str[i + 1], len - i); else diff --git a/ft_ltoa.c b/ft_ltoa.c index 3e1f59f..6739b56 100644 --- a/ft_ltoa.c +++ b/ft_ltoa.c @@ -12,45 +12,45 @@ #include "libft.h" -static long ft_countdigits(long c) +static long ft_countdigits(long nbr) { long n; n = 0; - if (c == 0) + if (nbr == 0) return (1); - while (c != 0) + while (nbr != 0) { - c = c / 10; + nbr = nbr / 10; n++; } return (n); } -char *ft_ltoa(long n) +char *ft_ltoa(long nbr) { - char *p; + char *str; long i; - long vz; + long sign; - i = ft_countdigits(n); - vz = 0; - if (n < 0) - vz = 1; - p = malloc(i + vz +1); - if (p == NULL) + i = ft_countdigits(nbr); + sign = 0; + if (nbr < 0) + sign = 1; + str = malloc(i + sign + 1); + if (str == NULL) return (NULL); - p[i + vz] = '\0'; - if (vz == 1) - p[0] = '-'; + str[i + sign] = '\0'; + if (sign == 1) + str[0] = '-'; while (i > 0) { - if (vz == 1) - p[i + vz - 1] = (n % 10) * -1 + '0'; + if (sign == 1) + str[i + sign - 1] = (nbr % 10) * -1 + '0'; else - p[i + vz - 1] = n % 10 + '0'; - n = n / 10; + str[i + sign - 1] = nbr % 10 + '0'; + nbr = nbr / 10; i--; } - return (p); + return (str); } diff --git a/libft.h b/libft.h index 535758c..3e3b4b9 100644 --- a/libft.h +++ b/libft.h @@ -53,8 +53,8 @@ void *ft_calloc(size_t count, size_t size); char *ft_substr(char const *s, unsigned int start, size_t len); char *ft_strjoin(char const *s1, char const *s2); char *ft_strtrim(char const *s1, char const *set); -char *ft_itoa(int n); -char *ft_ltoa(long n); +char *ft_itoa(int nbr); +char *ft_ltoa(long nbr); char **ft_split(char const *s, char c); int ft_wordcount(char const *s, char c); char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); @@ -103,7 +103,7 @@ char *ft_strstr(const char *haystack, const char *needle); void ft_strreplace(char *str, char *tofind, char *replace); //own functions from pipex -char *ft_first_word(const char *str, char c, int rev); +char *ft_first_word(const char *str, char limiter, int rev); //own functions from minishell # ifndef READ @@ -117,7 +117,7 @@ char *ft_first_word(const char *str, char c, int rev); # endif int ft_arraycount(char **array); -char *ft_last_word(const char *str, char c, int rev); +char *ft_last_word(const char *str, char limiter, int rev); int ft_strcmp(char *s1, char *s2); char *ft_multijoin(bool tofr, int n, ...); char *ft_multijoin_array(char **array); From b9bf039ccae9c80d73addbf4bf3fc049220000ca Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 19:47:12 +0200 Subject: [PATCH 05/16] return value, spaces, brackets,.. --- ft_memmove.c | 4 +--- ft_strchr.c | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ft_memmove.c b/ft_memmove.c index dab8bb2..f36221d 100644 --- a/ft_memmove.c +++ b/ft_memmove.c @@ -29,7 +29,7 @@ static void ft_move(char *a, char *b, size_t v) { while (v > 0) { - a[v -1] = b[v -1]; + a[v - 1] = b[v - 1]; v--; } } @@ -43,8 +43,6 @@ void *ft_memmove(void *dst, const void *src, size_t len) d = (char *)dst; s = (char *)src; if (len > 0 && (dst != NULL || src != NULL)) - { ft_move(d, s, len); - } return (dst); } diff --git a/ft_strchr.c b/ft_strchr.c index 31e951f..c6639cd 100644 --- a/ft_strchr.c +++ b/ft_strchr.c @@ -10,6 +10,8 @@ /* */ /* ************************************************************************** */ +#include "libft.h" + char *ft_strchr(const char *s, int c) { char x; @@ -18,7 +20,7 @@ char *ft_strchr(const char *s, int c) while ((*s != '\0') && (*s != x)) s++; if ((*s == '\0') && (*s != x)) - return (0); + return (NULL); else return ((char *)s); } From ebcf5c5898a6914f3fb5b14157b9f573b9a2d77c Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 20:19:18 +0200 Subject: [PATCH 06/16] added sizet array to avoid using strlen twice a string --- ft_multijoin_array.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/ft_multijoin_array.c b/ft_multijoin_array.c index 8f57f26..c883af6 100644 --- a/ft_multijoin_array.c +++ b/ft_multijoin_array.c @@ -12,35 +12,40 @@ #include "libft.h" -static char *copy_input(char **array, size_t len) +static char *copy_input(char **array, size_t *lengths, size_t len) { char *str; size_t i; size_t pos; str = ft_calloc(len + 1, sizeof(char)); + if (!str) + return (NULL); i = 0; pos = 0; - while (str != NULL && array[i] != NULL) + while (array[i] != NULL) { - len = ft_strlen(array[i]); - ft_memcpy(&str[pos], array[i], len); - pos += len; + ft_memcpy(&str[pos], array[i], lengths[i]); + pos += lengths[i]; i++; } return (str); } -static size_t get_length(char **array) +static size_t get_total_length(char **array, size_t *lengths) { - size_t len; + size_t total_len; size_t i; - len = 0; + total_len = 0; i = 0; while (array[i] != NULL) - len += ft_strlen(array[i++]); - return (len); + { + lengths[i] = ft_strlen(array[i]); + total_len += lengths[i]; + i++; + } + return (total_len); } /*Combines every string inside array into a single string. Array needs to be @@ -49,12 +54,19 @@ Will not free any string inside the array, but frees the array.*/ char *ft_multijoin_array(char **array) { size_t len; + size_t *lengths; + size_t size; char *str; if (array == NULL) return (NULL); - len = get_length(array); - str = copy_input(array, len); + size = ft_arraycount(array); + lengths = ft_calloc(size, sizeof(size_t)); + if (lengths == NULL) + return (NULL); + len = get_total_length(array, lengths); + str = copy_input(array, lengths, len); + free(lengths); free(array); return (str); } From e506cb16e539c6cabe835a511b849288446413b8 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 7 Jul 2024 20:43:10 +0200 Subject: [PATCH 07/16] multijoin is now using array_join to reduce the use of strlen from 3/str to 1 --- ft_multijoin.c | 62 ++++++++++++++++++++++++-------------------- ft_multijoin_array.c | 1 + 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/ft_multijoin.c b/ft_multijoin.c index 917f946..7f32a94 100644 --- a/ft_multijoin.c +++ b/ft_multijoin.c @@ -12,32 +12,32 @@ #include "libft.h" -static char *copy_input(bool tofr, int n, char **input) -{ - int i; - int len; - char *str; +// static char *copy_input(bool tofr, int n, char **input) +// { +// int i; +// int len; +// char *str; - i = 0; - len = 0; - while (i < n) - len += ft_strlen(input[i++]); - str = ft_calloc(len + 1, sizeof(char)); - i = 0; - len = 0; - while (str != NULL && i < n) - { - ft_memcpy(&str[len], input[i], ft_strlen(input[i])); - len += ft_strlen(input[i]); - if (tofr == true) - { - free(input[i]); - input[i] = NULL; - } - i++; - } - return (str); -} +// i = 0; +// len = 0; +// while (i < n) +// len += ft_strlen(input[i++]); +// str = ft_calloc(len + 1, sizeof(char)); +// i = 0; +// len = 0; +// while (str != NULL && i < n) +// { +// ft_memcpy(&str[len], input[i], ft_strlen(input[i])); +// len += ft_strlen(input[i]); +// if (tofr == true) +// { +// free(input[i]); +// input[i] = NULL; +// } +// i++; +// } +// return (str); +// } static char **read_input(int n, va_list args) { @@ -46,6 +46,8 @@ static char **read_input(int n, va_list args) i = 0; input = ft_calloc(n + 1, sizeof(char *)); + if (input == NULL) + return (NULL); input[n] = NULL; while (i < n) { @@ -61,15 +63,19 @@ char *ft_multijoin(bool tofr, int n, ...) { va_list args; char **input; + char **cpy; char *str; if (n < 2) return (NULL); va_start(args, n); input = read_input(n, args); - str = copy_input(tofr, n, input); + if (input == NULL) + return (NULL); + cpy = input; + str = ft_multijoin_array(input); va_end(args); - free(input); - input = NULL; + while (tofr && cpy) + free(cpy++); return (str); } diff --git a/ft_multijoin_array.c b/ft_multijoin_array.c index c883af6..c14742e 100644 --- a/ft_multijoin_array.c +++ b/ft_multijoin_array.c @@ -68,5 +68,6 @@ char *ft_multijoin_array(char **array) str = copy_input(array, lengths, len); free(lengths); free(array); + array = NULL; return (str); } From 3acf756f98ed00a48c4555dff03df6317b654878 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Tue, 9 Jul 2024 11:44:36 +0200 Subject: [PATCH 08/16] format with spaces --- ft_tolower.c | 2 +- ft_toupper.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ft_tolower.c b/ft_tolower.c index 2d1ad29..c909529 100644 --- a/ft_tolower.c +++ b/ft_tolower.c @@ -13,7 +13,7 @@ int ft_tolower(int c) { if (c >= 'A' && c <= 'Z' ) - return (c +32); + return (c + 32); else return (c); } diff --git a/ft_toupper.c b/ft_toupper.c index 5f0efa4..99efc6c 100644 --- a/ft_toupper.c +++ b/ft_toupper.c @@ -13,7 +13,7 @@ int ft_toupper(int c) { if (c >= 'a' && c <= 'z' ) - return (c -32); + return (c - 32); else return (c); } From f0c0f4b1b97171f30acd36e8f01e8ef6c066f1a5 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Tue, 9 Jul 2024 11:45:25 +0200 Subject: [PATCH 09/16] replaced isinset with strchr, because functionality is the same --- ft_strtrim.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/ft_strtrim.c b/ft_strtrim.c index fe1541b..e4c2778 100644 --- a/ft_strtrim.c +++ b/ft_strtrim.c @@ -12,18 +12,6 @@ #include "libft.h" -static int ft_isinset(char const c, char const *ptr) -{ - int i; - - i = 0; - while (ptr[i] != c && ptr[i] != '\0') - i++; - if (ptr[i] != '\0') - return (1); - return (0); -} - char *ft_strtrim(char const *s1, char const *set) { int pos1; @@ -35,9 +23,9 @@ char *ft_strtrim(char const *s1, char const *set) if (s1 == NULL || set == NULL) return (NULL); pos2 = ft_strlen(s1); - while (ft_isinset(s1[pos1], set)) + while (ft_strchr(set, s1[pos1]) != NULL) pos1++; - while (pos2 > pos1 && ft_isinset(s1[pos2 - 1], set)) + while (pos2 > pos1 && ft_strchr(set, s1[pos2 - 1]) != NULL) pos2--; if ((pos2 - pos1) >= 0) ptr = malloc(pos2 - pos1 + 1); From 970cd488fcbe4b5e0ec255d73da1c25c62996610 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Thu, 11 Jul 2024 19:25:13 +0200 Subject: [PATCH 10/16] added Null protection, removed double call to strlen --- ft_strdup.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ft_strdup.c b/ft_strdup.c index 760c5cf..6a31c16 100644 --- a/ft_strdup.c +++ b/ft_strdup.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ft_strdup.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rbetz +#+ +:+ +#+ */ +/* By: humbi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/01 15:02:13 by rbetz #+# #+# */ -/* Updated: 2022/04/06 17:10:43 by rbetz ### ########.fr */ +/* Updated: 2024/07/11 19:23:47 by humbi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,9 +15,13 @@ char *ft_strdup(const char *s1) { char *ptr; + size_t len; - ptr = malloc(ft_strlen(s1)+1 * sizeof(char)); + if (s1 == NULL) + return (NULL); + len = ft_strlen(s1) + 1; + ptr = malloc(len * sizeof(char)); if (ptr == NULL) return (NULL); - return ((char *) ft_memcpy(ptr, s1, (size_t)ft_strlen(s1)+1)); + return ((char *) ft_memcpy(ptr, s1, len)); } From 5766b488946339a09c0330a37bd9b5e9b706a11c Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Thu, 11 Jul 2024 19:28:11 +0200 Subject: [PATCH 11/16] killed 3 calles to strlen --- ft_strjoin.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ft_strjoin.c b/ft_strjoin.c index 830a43b..53f04da 100644 --- a/ft_strjoin.c +++ b/ft_strjoin.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ft_strjoin.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rbetz +#+ +:+ +#+ */ +/* By: humbi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/04 10:31:29 by rbetz #+# #+# */ -/* Updated: 2022/10/31 13:14:02 by rbetz ### ########.fr */ +/* Updated: 2024/07/11 19:27:39 by humbi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,13 +15,17 @@ char *ft_strjoin(char const *s1, char const *s2) { char *p1; + size_t len_s1; + size_t len_s2; if (s1 == NULL || s2 == NULL) return (NULL); - p1 = malloc((ft_strlen(s1) + ft_strlen(s2) + 1) * sizeof(char)); + len_s1 = ft_strlen(s1); + len_s2 = ft_strlen(s2); + p1 = malloc((len_s1 + len_s2 + 1) * sizeof(char)); if (p1 == NULL) return (NULL); - ft_memcpy(p1, s1, (size_t)ft_strlen(s1)); - ft_memcpy(&p1[ft_strlen(s1)], s2, (size_t)ft_strlen(s2) + 1); + ft_memcpy(p1, s1, len_s1); + ft_memcpy(&p1[len_s1], s2, len_s2 + 1); return (p1); } From f826d30b38d980b27e4350b687864cbdba37136b Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Thu, 11 Jul 2024 19:57:25 +0200 Subject: [PATCH 12/16] added warning about malefunctioning --- ft_strreplace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ft_strreplace.c b/ft_strreplace.c index 9217ff8..96b9220 100644 --- a/ft_strreplace.c +++ b/ft_strreplace.c @@ -3,15 +3,21 @@ /* ::: :::::::: */ /* ft_strreplace.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rbetz +#+ +:+ +#+ */ +/* By: humbi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/18 15:32:03 by rbetz #+# #+# */ -/* Updated: 2022/10/31 12:11:14 by rbetz ### ########.fr */ +/* Updated: 2024/07/11 19:56:42 by humbi ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" + +// This function replaces the first occurrence of 'tofind' with 'replace' +// in 'str'. It modifies the original string 'str' in place. Note: This +// implementation is not safe if 'replace' is longer than 'tofind', as +// it does not allocate additional memory to accommodate a longer +// replacement string. void ft_strreplace(char *str, char *tofind, char *replace) { char *tempstring; From 3a1ffbc1a816226c11c7b6bdf12b6382adb399d8 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Thu, 11 Jul 2024 20:04:16 +0200 Subject: [PATCH 13/16] added an strreplace alternative that returns a new pointer and also replace just the first occurence --- ft_strreplace_first.c | 47 +++++++++++++++++++++++++++++++++++++++++++ libft.h | 7 +++++-- 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 ft_strreplace_first.c diff --git a/ft_strreplace_first.c b/ft_strreplace_first.c new file mode 100644 index 0000000..ba0e2d8 --- /dev/null +++ b/ft_strreplace_first.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strreplace_first.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: humbi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/11 19:42:33 by rbetz #+# #+# */ +/* Updated: 2024/07/11 19:56:46 by humbi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static char *concat_parts(char *str, char *tofind, char *replace, int pos) +{ + int str_len; + int tofind_len; + int replace_len; + int new_len; + char *newstr; + + str_len = ft_strlen(str); + tofind_len = ft_strlen(tofind); + replace_len = ft_strlen(replace); + new_len = str_len - tofind_len + replace_len; + newstr = ft_calloc(new_len + 1, sizeof(char)); + if (!newstr) + return (NULL); + ft_memcpy(newstr, str, pos); + ft_memcpy(newstr + pos, replace, replace_len); + ft_memcpy(newstr + pos + replace_len, str + pos + tofind_len, + str_len - pos - tofind_len + 1); + return (newstr); +} + +char *ft_strreplace_first(char *str, char *tofind, char *replace) +{ + char *searchstart; + int pos; + + searchstart = ft_strstr(str, tofind); + if (!searchstart) + return (ft_strdup(str)); + pos = searchstart - str; + return (concat_parts(str, tofind, replace, pos)); +} diff --git a/libft.h b/libft.h index 3e3b4b9..3629f57 100644 --- a/libft.h +++ b/libft.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* libft.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rbetz +#+ +:+ +#+ */ +/* By: humbi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/25 11:33:22 by rbetz #+# #+# */ -/* Updated: 2023/04/07 13:43:19 by rbetz ### ########.fr */ +/* Updated: 2024/07/11 19:58:44 by humbi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -130,4 +130,7 @@ void ft_close_pipe_fds(int pipe[2]); double ft_atod(char *nbr); char **ft_split_p(char *s, char c); int ft_isspace(int c); + +//new functions after core +char *ft_strreplace_first(char *str, char *tofind, char *replace); #endif From d9cc4cb7569f5eff002f345ce4fad2e80e6ce3b0 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Thu, 11 Jul 2024 20:09:40 +0200 Subject: [PATCH 14/16] fixed potential segv bug with derefferencing with negativ value and removed useless strlen calls --- get_next_line_bonus.c | 6 +++--- get_next_line_utils_bonus.c | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/get_next_line_bonus.c b/get_next_line_bonus.c index 89f3296..df90990 100644 --- a/get_next_line_bonus.c +++ b/get_next_line_bonus.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* get_next_line_bonus.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rbetz +#+ +:+ +#+ */ +/* By: humbi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/05/09 12:05:03 by rbetz #+# #+# */ -/* Updated: 2022/06/02 09:43:22 by rbetz ### ########.fr */ +/* Updated: 2024/07/11 20:06:36 by humbi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,9 +30,9 @@ void *read_and_join(char *line, char **cur_line, const int fd, int *ret) while (ft_posinset('\n', *cur_line) == -1) { *ret = read(fd, line, BUFFER_SIZE); - line[*ret] = '\0'; if (*ret <= 0) break ; + line[*ret] = '\0'; *cur_line = ft_strjoin_ns(*cur_line, line); if (*cur_line == NULL) return (NULL); diff --git a/get_next_line_utils_bonus.c b/get_next_line_utils_bonus.c index 5700b01..9c16fa9 100644 --- a/get_next_line_utils_bonus.c +++ b/get_next_line_utils_bonus.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* get_next_line_utils_bonus.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rbetz +#+ +:+ +#+ */ +/* By: humbi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/05/09 12:05:07 by rbetz #+# #+# */ -/* Updated: 2022/10/31 13:14:04 by rbetz ### ########.fr */ +/* Updated: 2024/07/11 20:08:22 by humbi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,17 +15,21 @@ char *ft_strjoin_ns(char *s1, char *s2) { char *p1; + size_t len_s1; + size_t len_s2; if (s1 == NULL || s2 == NULL) return (NULL); - p1 = malloc((ft_strlen(s1) + ft_strlen(s2) + 1) * sizeof(char)); + len_s1 = ft_strlen(s1); + len_s2 = ft_strlen(s2); + p1 = malloc((len_s1 + len_s2 + 1) * sizeof(char)); if (p1 == NULL) { free(s1); return (NULL); } - ft_memcpy(p1, s1, (size_t)ft_strlen(s1)); - ft_memcpy(&p1[ft_strlen(s1)], s2, (size_t)ft_strlen(s2) + 1); + ft_memcpy(p1, s1, len_s1); + ft_memcpy(&p1[len_s1], s2, len_s2 + 1); free(s1); return (p1); } From 51e0b6ddab9d3fbae8a1aea3fcc553b0d6ea8100 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 28 Jul 2024 15:29:05 +0200 Subject: [PATCH 15/16] add multicore compiling --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index efac180..e5b2116 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,8 @@ BLUE = \033[1;34m WHITE = \033[0m ### ### RULES ### ### -all: $(OBJ_D) $(NAME) +all: $(OBJ_D) + @$(MAKE) -j $(NAME) $(NAME): $(SRCOBJ) @ar -rcs $(NAME) $^ From 2328bed5a587fe7252469167abf4000d1932f9d3 Mon Sep 17 00:00:00 2001 From: Alphacharge Date: Sun, 28 Jul 2024 15:39:47 +0200 Subject: [PATCH 16/16] added tip to use other function instead and remove newline --- ft_strreplace.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ft_strreplace.c b/ft_strreplace.c index 96b9220..243d073 100644 --- a/ft_strreplace.c +++ b/ft_strreplace.c @@ -12,12 +12,11 @@ #include "libft.h" - // This function replaces the first occurrence of 'tofind' with 'replace' // in 'str'. It modifies the original string 'str' in place. Note: This // implementation is not safe if 'replace' is longer than 'tofind', as // it does not allocate additional memory to accommodate a longer -// replacement string. +// replacement string. Use ft_strreplace_first instead. void ft_strreplace(char *str, char *tofind, char *replace) { char *tempstring;