From 2edaff53d954cc620dd32824612c495bbae4d948 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 15:46:22 +0300 Subject: [PATCH 01/16] lil diff --- printf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/printf.c b/printf.c index f9a1bea..a1bc6ad 100644 --- a/printf.c +++ b/printf.c @@ -38,6 +38,8 @@ int _printf(const char *format, ...) printed += _strlen(buffer); free(buffer); buffer = malloc(BUFF_SIZE); + if (!buffer) + return (-1); buff_idx = 0; } switch (*(format + fmt_idx + 1)) /*this needs to shrink*/ @@ -61,7 +63,7 @@ int _printf(const char *format, ...) fmt_idx++; } } - if (*buffer) /*final buffer check*/ + if (buffer) /*final buffer check*/ { printed += _puts(buffer); free(buffer); From 05df0a9cc4d183b1c140df7216ce15cea3db1904 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 16:13:54 +0300 Subject: [PATCH 02/16] can't have shit --- printf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/printf.c b/printf.c index a1bc6ad..5d694d4 100644 --- a/printf.c +++ b/printf.c @@ -20,6 +20,8 @@ int _printf(const char *format, ...) identifiers = _contains(format, '%'); /* instances of %s, %c etc */ BUFF_SIZE = _strlen(format) - identifiers; buffer = malloc(BUFF_SIZE); /* sized of the non % instances only*/ + if (!buffer) + return (-1); if (!format) /* No string. No laundry */ return (0); @@ -31,11 +33,9 @@ int _printf(const char *format, ...) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) { - if (*buffer) /* printing and clearing buffer on formatted things */ + if (buffer) /* printing and clearing buffer on formatted things */ { - _puts(buffer); - BUFF_SIZE -= _strlen(buffer); - printed += _strlen(buffer); + printed += _puts(buffer); free(buffer); buffer = malloc(BUFF_SIZE); if (!buffer) From ae280081e0af486d2d80e629c0a001257351ed1e Mon Sep 17 00:00:00 2001 From: Supermjork Date: Tue, 22 Aug 2023 17:50:03 +0300 Subject: [PATCH 03/16] inline decl, memset fix(??) --- memset.c | 10 +++++----- printf.c | 11 +++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/memset.c b/memset.c index 4758670..32788b8 100644 --- a/memset.c +++ b/memset.c @@ -4,19 +4,19 @@ * _memset - sets values of bytes to specific value * * @adr: head address - * @n: number of bytes + * @bval: number of bytes * * Return: pointer to place */ -char* _memset(char *str, int bval) +char *_memset(char *adr, int bval) { int i; - for (i = 0; i < _strlen(str); i++) + for (i = 0; i < _strlen(adr); i++) { - *(str + i) = bval; + *(adr + i) = bval; } - return (str); + return (adr); } diff --git a/printf.c b/printf.c index 5d694d4..11bae58 100644 --- a/printf.c +++ b/printf.c @@ -26,9 +26,8 @@ int _printf(const char *format, ...) if (!format) /* No string. No laundry */ return (0); - buff_idx = 0; /* was there a way to squish these together? */ - fmt_idx = 0; - printed = 0; + buff_idx = fmt_idx = 0; /*chain assignment*/ + printed = 0; /*this alone due to diff type*/ while (*(format + fmt_idx)) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) @@ -63,10 +62,10 @@ int _printf(const char *format, ...) fmt_idx++; } } - if (buffer) /*final buffer check*/ + if (buffer) { - printed += _puts(buffer); + _puts(buffer); free(buffer); } - return (printed); + return (printed); } From 1ca591c62ae28db1314b3067a5f7157823f6ace0 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Tue, 22 Aug 2023 18:11:00 +0300 Subject: [PATCH 04/16] free() bad --- printf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/printf.c b/printf.c index 11bae58..54c6c61 100644 --- a/printf.c +++ b/printf.c @@ -19,7 +19,7 @@ int _printf(const char *format, ...) identifiers = _contains(format, '%'); /* instances of %s, %c etc */ BUFF_SIZE = _strlen(format) - identifiers; - buffer = malloc(BUFF_SIZE); /* sized of the non % instances only*/ + buffer = (char *) malloc(BUFF_SIZE); /* sized of the non % instances only*/ if (!buffer) return (-1); @@ -35,8 +35,8 @@ int _printf(const char *format, ...) if (buffer) /* printing and clearing buffer on formatted things */ { printed += _puts(buffer); - free(buffer); - buffer = malloc(BUFF_SIZE); + _memset(buffer, 0); + buffer = (char *) malloc(BUFF_SIZE); if (!buffer) return (-1); buff_idx = 0; From 3efa44f9eb0798c9b9142ef4851788d2803839d8 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:23:24 +0300 Subject: [PATCH 05/16] dealt with a conflict (oops) and new prototype --- main.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.h b/main.h index ce36133..9c283ec 100644 --- a/main.h +++ b/main.h @@ -1,5 +1,6 @@ #ifndef MAIN_H_ #define MAIN_H_ +#include int _printf(const char *format, ...); int _contains(const char *str, char c); int _strlen(const char *str); @@ -7,6 +8,7 @@ char *_strcpy(char *dest, char *src); char *append(char *str, char c); int _puts(char *str); int _putchar(char c); -char* _memset(char *str, int bval); +char *_memset(char *str, int bval); +int fmt(char c, va_list args); #endif From 9fba0363bd9962036a803a23476fd834bef36492 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:23:50 +0300 Subject: [PATCH 06/16] fixed another prototype name --- main.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.h b/main.h index 9c283ec..1649623 100644 --- a/main.h +++ b/main.h @@ -8,7 +8,7 @@ char *_strcpy(char *dest, char *src); char *append(char *str, char c); int _puts(char *str); int _putchar(char c); -char *_memset(char *str, int bval); +char *_memset(char *adr, int bval); int fmt(char c, va_list args); #endif From 944afff1887efd8393ff61148ff1d632c6a2c117 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:25:59 +0300 Subject: [PATCH 07/16] fmt added --- printf.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/printf.c b/printf.c index 54c6c61..452a330 100644 --- a/printf.c +++ b/printf.c @@ -1,5 +1,4 @@ #include "main.h" -#include #include #include /** @@ -41,18 +40,7 @@ int _printf(const char *format, ...) return (-1); buff_idx = 0; } - switch (*(format + fmt_idx + 1)) /*this needs to shrink*/ - { - case 's': - printed += _puts(va_arg(args, char*)); - break; - case 'c': - printed += _putchar(va_arg(args, int)); - break; - case '%': /*add 1 byte*/ - printed += _putchar('%'); - break; - } + printed += fmt(*(format + fmt_idx + 1)); fmt_idx += 2; } else @@ -69,3 +57,19 @@ int _printf(const char *format, ...) } return (printed); } +int fmt(char c, va_list args) +{ + switch (c) /*this needs to shrink*/ + { + case 's': + return(_puts(va_arg(args, char*))); + break; + case 'c': + return (_putchar(va_arg(args, int))); + break; + case '%': /*add 1 byte*/ + return (_putchar('%')); + break; + } + +} From 569d88bce0b10d5bf4edb0109c39c9a549504eed Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:26:26 +0300 Subject: [PATCH 08/16] wrong arg amount --- printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/printf.c b/printf.c index 452a330..283ab49 100644 --- a/printf.c +++ b/printf.c @@ -40,7 +40,7 @@ int _printf(const char *format, ...) return (-1); buff_idx = 0; } - printed += fmt(*(format + fmt_idx + 1)); + printed += fmt(*(format + fmt_idx + 1), args); fmt_idx += 2; } else From f17ab84939117ae4da26efb5fb9e355a977b6a2d Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:27:01 +0300 Subject: [PATCH 09/16] default so it returns sth always --- printf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/printf.c b/printf.c index 283ab49..395785c 100644 --- a/printf.c +++ b/printf.c @@ -70,6 +70,8 @@ int fmt(char c, va_list args) case '%': /*add 1 byte*/ return (_putchar('%')); break; + default: + return (0); } } From a39d84d993f94eb2506a83c5821a02181bd13770 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:34:55 +0300 Subject: [PATCH 10/16] shrinking the last few lines --- printf.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/printf.c b/printf.c index 395785c..fd4c05e 100644 --- a/printf.c +++ b/printf.c @@ -19,10 +19,8 @@ int _printf(const char *format, ...) identifiers = _contains(format, '%'); /* instances of %s, %c etc */ BUFF_SIZE = _strlen(format) - identifiers; buffer = (char *) malloc(BUFF_SIZE); /* sized of the non % instances only*/ - if (!buffer) - return (-1); - if (!format) /* No string. No laundry */ + if (!format && !buffer) /* No string. No laundry */ return (0); buff_idx = fmt_idx = 0; /*chain assignment*/ @@ -44,11 +42,7 @@ int _printf(const char *format, ...) fmt_idx += 2; } else - { - *(buffer + buff_idx) = *(format + fmt_idx); /* filling up buffer */ - buff_idx++; - fmt_idx++; - } + *(buffer + buff_idx++) = *(format + fmt_idx++); /* filling up buffer */ } if (buffer) { @@ -62,7 +56,7 @@ int fmt(char c, va_list args) switch (c) /*this needs to shrink*/ { case 's': - return(_puts(va_arg(args, char*))); + return (_puts(va_arg(args, char*))); break; case 'c': return (_putchar(va_arg(args, int))); From 210e49c651fa1345f08cc3d63a497490cd3014a4 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:40:33 +0300 Subject: [PATCH 11/16] documented fmt --- printf.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/printf.c b/printf.c index fd4c05e..6eca84b 100644 --- a/printf.c +++ b/printf.c @@ -33,9 +33,6 @@ int _printf(const char *format, ...) { printed += _puts(buffer); _memset(buffer, 0); - buffer = (char *) malloc(BUFF_SIZE); - if (!buffer) - return (-1); buff_idx = 0; } printed += fmt(*(format + fmt_idx + 1), args); @@ -51,19 +48,22 @@ int _printf(const char *format, ...) } return (printed); } +/** + * fmt - format because its too chonky for printf + * @c: format character (for now) + * @args: the arguments to pop from + * Return: bytes written to stdout + */ int fmt(char c, va_list args) { switch (c) /*this needs to shrink*/ { case 's': return (_puts(va_arg(args, char*))); - break; case 'c': return (_putchar(va_arg(args, int))); - break; case '%': /*add 1 byte*/ return (_putchar('%')); - break; default: return (0); } From 9bd0766dac54897ecc1e223c08abeeff4a4af975 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:43:37 +0300 Subject: [PATCH 12/16] =?UTF-8?q?sus=20indentation=20=E0=B6=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/printf.c b/printf.c index 6eca84b..13deb7e 100644 --- a/printf.c +++ b/printf.c @@ -36,7 +36,7 @@ int _printf(const char *format, ...) buff_idx = 0; } printed += fmt(*(format + fmt_idx + 1), args); - fmt_idx += 2; + fmt_idx += 2; } else *(buffer + buff_idx++) = *(format + fmt_idx++); /* filling up buffer */ From edf0375cf4480e3a50e22c51eb28bea71bdef9fb Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 18:55:55 +0300 Subject: [PATCH 13/16] too many variables no more --- printf.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/printf.c b/printf.c index 13deb7e..f1106cd 100644 --- a/printf.c +++ b/printf.c @@ -9,22 +9,16 @@ **/ int _printf(const char *format, ...) { - int buff_idx, fmt_idx; /* Indexes */ - unsigned int identifiers, BUFF_SIZE, printed; + unsigned int buff_idx, fmt_idx, printed; char *buffer; /*where non formated things are stored*/ va_list args; - va_start(args, format); - - identifiers = _contains(format, '%'); /* instances of %s, %c etc */ - BUFF_SIZE = _strlen(format) - identifiers; - buffer = (char *) malloc(BUFF_SIZE); /* sized of the non % instances only*/ - if (!format && !buffer) /* No string. No laundry */ return (0); + va_start(args, format); - buff_idx = fmt_idx = 0; /*chain assignment*/ - printed = 0; /*this alone due to diff type*/ + buffer = (char *) malloc(_strlen(format) - _contains(format,'%')); /* sized of the non % instances only*/ + buff_idx = fmt_idx = printed = 0; /*chain assignment*/ while (*(format + fmt_idx)) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) From 72ea1cc4f0bd0fd3a8aca75faf31db3a519bdf72 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 19:04:46 +0300 Subject: [PATCH 14/16] shrunk and fixed --- printf.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/printf.c b/printf.c index f1106cd..5817695 100644 --- a/printf.c +++ b/printf.c @@ -9,15 +9,17 @@ **/ int _printf(const char *format, ...) { - unsigned int buff_idx, fmt_idx, printed; + unsigned int buff_idx, fmt_idx, buff_size, printed; char *buffer; /*where non formated things are stored*/ va_list args; + va_start(args, format); + buff_size = _strlen(format) - _contains(format , '%'); + buffer = (char *) malloc(_strlen(format) - _contains(format,'%')); /* sized of the non % instances only*/ + if (!format && !buffer) /* No string. No laundry */ return (0); - va_start(args, format); - buffer = (char *) malloc(_strlen(format) - _contains(format,'%')); /* sized of the non % instances only*/ buff_idx = fmt_idx = printed = 0; /*chain assignment*/ while (*(format + fmt_idx)) { @@ -26,7 +28,11 @@ int _printf(const char *format, ...) if (buffer) /* printing and clearing buffer on formatted things */ { printed += _puts(buffer); + buff_size -= _strlen(buffer); _memset(buffer, 0); + buffer = (char *) malloc(buff_size); + if (!buffer) + return (-1); buff_idx = 0; } printed += fmt(*(format + fmt_idx + 1), args); From 9af7a376499aed9acef7eb1aaadbe906d20abb91 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 19:05:59 +0300 Subject: [PATCH 15/16] betty formatting --- printf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/printf.c b/printf.c index 5817695..d9bd1fa 100644 --- a/printf.c +++ b/printf.c @@ -14,8 +14,8 @@ int _printf(const char *format, ...) va_list args; va_start(args, format); - buff_size = _strlen(format) - _contains(format , '%'); - buffer = (char *) malloc(_strlen(format) - _contains(format,'%')); /* sized of the non % instances only*/ + buff_size = _strlen(format) - _contains(format, '%'); + buffer = (char *) malloc(buff_size); /* sized of the non % instances only*/ if (!format && !buffer) /* No string. No laundry */ return (0); From 7f470794479b393ea4120683948ae6341f4c8563 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 19:07:57 +0300 Subject: [PATCH 16/16] ADDED a test case for %% --- tests/char_print.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/char_print.c b/tests/char_print.c index d62a66e..e81f270 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -10,6 +10,6 @@ int main(void) { char c = 97; - _printf("cat: %css\n", c); + _printf("cat: %css\noh wait is that...a %%\n", c); return (0); }