From 56c807a9cdd27f683dbced4788fc255ee9450305 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 21 Aug 2023 12:53:38 +0300 Subject: [PATCH 01/28] char insertion poopoo --- printf.c | 6 ++++++ tests/char_print.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 tests/char_print.c diff --git a/printf.c b/printf.c index c96a1e9..c202b0d 100644 --- a/printf.c +++ b/printf.c @@ -15,6 +15,7 @@ int _printf(const char *format, ...) unsigned int identifiers = _contains(format, '%'); unsigned int BUFF_SIZE = _strlen(format) - (identifiers * 2); char *buffer, *next; + char c; va_list args; va_start(args, format); @@ -36,6 +37,11 @@ int _printf(const char *format, ...) fmt_idx += 2; break; case 'c': /* add 1 byte and i++ */ + c = va_arg(args, int); + *(buffer + buff_idx + 1) = c; + BUFF_SIZE = _strlen(buffer); + buff_idx += 1; + fmt_idx += 2; break; case '%': /*add 1 byte*/ break; diff --git a/tests/char_print.c b/tests/char_print.c new file mode 100644 index 0000000..8a55f24 --- /dev/null +++ b/tests/char_print.c @@ -0,0 +1,15 @@ +#include "../main.h" + +/** + * main - testing printing of only char + * + * Return: deadth + */ + +int main(void) +{ + char c = 97; + + _printf("cat: %c", c); + return (1); +} From c90057710ad2f5d1de0c691ba76183772b78d830 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 13:00:04 +0300 Subject: [PATCH 02/28] cast to char c --- printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/printf.c b/printf.c index c202b0d..8f2fc25 100644 --- a/printf.c +++ b/printf.c @@ -38,7 +38,7 @@ int _printf(const char *format, ...) break; case 'c': /* add 1 byte and i++ */ c = va_arg(args, int); - *(buffer + buff_idx + 1) = c; + *(buffer + buff_idx + 1) = (char) c; BUFF_SIZE = _strlen(buffer); buff_idx += 1; fmt_idx += 2; From ccdc0763629880dcc9abb6df56fab091c160cbe7 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 13:10:04 +0300 Subject: [PATCH 03/28] refactor the case of c and moved fmt+=2 --- printf.c | 9 ++++----- tests/char_print.c | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/printf.c b/printf.c index 8f2fc25..c597790 100644 --- a/printf.c +++ b/printf.c @@ -34,18 +34,17 @@ int _printf(const char *format, ...) buffer = _strcpy(buffer, next); BUFF_SIZE = _strlen(buffer); buff_idx += _strlen(next); - fmt_idx += 2; break; case 'c': /* add 1 byte and i++ */ - c = va_arg(args, int); - *(buffer + buff_idx + 1) = (char) c; - BUFF_SIZE = _strlen(buffer); + c = (char) va_arg(args, int); + *(buffer + buff_idx) = c; + BUFF_SIZE += 1; buff_idx += 1; - fmt_idx += 2; break; case '%': /*add 1 byte*/ break; } + fmt_idx += 2; } else { diff --git a/tests/char_print.c b/tests/char_print.c index 8a55f24..ff4af74 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -11,5 +11,5 @@ int main(void) char c = 97; _printf("cat: %c", c); - return (1); + return (0); } From 8e196d6423cc817bec3b03339378e61a708c6d10 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 21 Aug 2023 13:20:33 +0300 Subject: [PATCH 04/28] oui --- printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/printf.c b/printf.c index c597790..0cd45b6 100644 --- a/printf.c +++ b/printf.c @@ -13,7 +13,7 @@ int _printf(const char *format, ...) int buff_idx = 0; int fmt_idx = 0; unsigned int identifiers = _contains(format, '%'); - unsigned int BUFF_SIZE = _strlen(format) - (identifiers * 2); + unsigned int BUFF_SIZE = _strlen(format) - identifiers; char *buffer, *next; char c; va_list args; From 7bb2aafbd616750120efba2e3c803111148f7ad5 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 13:22:40 +0300 Subject: [PATCH 05/28] DO NOT do that shit ever again I swear to fucking --- printf.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/printf.c b/printf.c index 0cd45b6..c2dc18b 100644 --- a/printf.c +++ b/printf.c @@ -12,14 +12,15 @@ int _printf(const char *format, ...) { int buff_idx = 0; int fmt_idx = 0; - unsigned int identifiers = _contains(format, '%'); - unsigned int BUFF_SIZE = _strlen(format) - identifiers; + unsigned int identifiers, BUFF_SIZE; char *buffer, *next; char c; va_list args; + identifiers = _contains(format, '%'); va_start(args, format); buffer = malloc(BUFF_SIZE); + BUFF_SIZE = _strlen(format) - identifiers; if (!format) /* No string. No laundry */ return (0); From 883e8b5b9ae7f1a3ef4b9a89a93fe4564f5203ef Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 13:24:56 +0300 Subject: [PATCH 06/28] messed up order --- printf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/printf.c b/printf.c index c2dc18b..ef88cc6 100644 --- a/printf.c +++ b/printf.c @@ -13,14 +13,14 @@ int _printf(const char *format, ...) int buff_idx = 0; int fmt_idx = 0; unsigned int identifiers, BUFF_SIZE; - char *buffer, *next; - char c; + char *buffer, *next, c; va_list args; - identifiers = _contains(format, '%'); va_start(args, format); - buffer = malloc(BUFF_SIZE); + + identifiers = _contains(format, '%'); BUFF_SIZE = _strlen(format) - identifiers; + buffer = malloc(BUFF_SIZE); if (!format) /* No string. No laundry */ return (0); From bc32277deb906dbadb8477b818acb1e8773cd911 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 13:41:10 +0300 Subject: [PATCH 07/28] yes --- printf.c | 4 ++-- tests/char_print.c | 2 +- tests/strcpy.c | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/printf.c b/printf.c index ef88cc6..629b578 100644 --- a/printf.c +++ b/printf.c @@ -19,7 +19,7 @@ int _printf(const char *format, ...) va_start(args, format); identifiers = _contains(format, '%'); - BUFF_SIZE = _strlen(format) - identifiers; + BUFF_SIZE = _strlen(format) - (identifiers * 2); buffer = malloc(BUFF_SIZE); if (!format) /* No string. No laundry */ @@ -38,7 +38,7 @@ int _printf(const char *format, ...) break; case 'c': /* add 1 byte and i++ */ c = (char) va_arg(args, int); - *(buffer + buff_idx) = c; + BUFF_SIZE += 1; buff_idx += 1; break; diff --git a/tests/char_print.c b/tests/char_print.c index ff4af74..9bbe388 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -8,7 +8,7 @@ int main(void) { - char c = 97; + char c = 'c'; _printf("cat: %c", c); return (0); diff --git a/tests/strcpy.c b/tests/strcpy.c index d2edc4b..625d9d9 100644 --- a/tests/strcpy.c +++ b/tests/strcpy.c @@ -1,17 +1,21 @@ #include "../main.h" #include #include +#include /** * main - why does this not work! I know! * Return: 0...unless? */ int main(void) { - char *str, *str2; + char *str, *str2, c; str = "hello"; str2 = " world!\n"; str = _strcpy(str, str2); + c = 'c'; + printf("%s", str); + write(1, &c, 1); return (0); } From f316833e4cb4aba47743f61f1045cd28e07b7c24 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 21 Aug 2023 13:47:47 +0300 Subject: [PATCH 08/28] Deprecito --- main.h | 2 +- printf.c | 2 +- strings.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/main.h b/main.h index bcf973d..8cae3a5 100644 --- a/main.h +++ b/main.h @@ -4,6 +4,6 @@ int _printf(const char *format, ...); int _contains(const char *str, char c); int _strlen(const char *str); char *_strcpy(char *dest, char *src); - +void append(char *str, char c); #endif diff --git a/printf.c b/printf.c index 629b578..ede6925 100644 --- a/printf.c +++ b/printf.c @@ -38,7 +38,7 @@ int _printf(const char *format, ...) break; case 'c': /* add 1 byte and i++ */ c = (char) va_arg(args, int); - + append(buffer, c); BUFF_SIZE += 1; buff_idx += 1; break; diff --git a/strings.c b/strings.c index da4b1c7..b4604ce 100644 --- a/strings.c +++ b/strings.c @@ -35,3 +35,19 @@ int _contains(const char *str, char c) else return (0); } + +/** + * append - shoved character at the end + * + * @str: main string + * @c: character getting shoved + * + * Return: da string but appended + */ + +void append(char *str, char c) +{ + int len = _strlen(str); + *(str + len) = c; + *(str + len + 1) = '\0'; +} From 7fda3ce8219ff2d9faf37579a451ab4d07458c7e Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 14:28:36 +0300 Subject: [PATCH 09/28] refactored append and char test --- main.h | 2 +- printf.c | 2 +- strings.c | 19 +++++++++++++++---- tests/append.c | 17 +++++++++++++++++ tests/char_print.c | 2 +- 5 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 tests/append.c diff --git a/main.h b/main.h index 8cae3a5..ddf9ce2 100644 --- a/main.h +++ b/main.h @@ -4,6 +4,6 @@ int _printf(const char *format, ...); int _contains(const char *str, char c); int _strlen(const char *str); char *_strcpy(char *dest, char *src); -void append(char *str, char c); +char *append(char *str, char c); #endif diff --git a/printf.c b/printf.c index ede6925..ae09c2f 100644 --- a/printf.c +++ b/printf.c @@ -38,7 +38,7 @@ int _printf(const char *format, ...) break; case 'c': /* add 1 byte and i++ */ c = (char) va_arg(args, int); - append(buffer, c); + buffer = append(buffer, c); BUFF_SIZE += 1; buff_idx += 1; break; diff --git a/strings.c b/strings.c index b4604ce..e431f9c 100644 --- a/strings.c +++ b/strings.c @@ -1,4 +1,5 @@ #include "main.h" +#include /** * _strlen - Takes string and return its length @@ -45,9 +46,19 @@ int _contains(const char *str, char c) * Return: da string but appended */ -void append(char *str, char c) +char* append(char *str, char c) { - int len = _strlen(str); - *(str + len) = c; - *(str + len + 1) = '\0'; + int len, i; + char *new_me; + + len = _strlen(str); + + new_me = malloc(len + 1); + i = -1; + while(*(str + ++i)) + *(new_me + i) = *(str + i); + + *(new_me + i++) = c; + *(new_me + len + 1) = '\0'; + return (new_me); } diff --git a/tests/append.c b/tests/append.c new file mode 100644 index 0000000..f62f16a --- /dev/null +++ b/tests/append.c @@ -0,0 +1,17 @@ +#include "../main.h" +#include + +/** + *main - ensure append work + */ +int main(void) +{ + char *str, c; + + str = "hello"; + c = 'c'; + str = append(str, c); + _printf("%s\n", str); + return (0); + +} diff --git a/tests/char_print.c b/tests/char_print.c index 9bbe388..2f49b0e 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -10,6 +10,6 @@ int main(void) { char c = 'c'; - _printf("cat: %c", c); + _printf("%c\n", c); return (0); } From 0b561ac2664c518a4be8751f06fedbf6aa7a327f Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 14:33:56 +0300 Subject: [PATCH 10/28] +1 --- printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/printf.c b/printf.c index ae09c2f..e9fd59b 100644 --- a/printf.c +++ b/printf.c @@ -54,6 +54,6 @@ int _printf(const char *format, ...) fmt_idx++; } } - write(1, buffer, BUFF_SIZE + 1); + write(1, buffer, BUFF_SIZE); return (_strlen(buffer)); } From 9d491f4873827739987ad0b90127c9c9c2716643 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 14:40:34 +0300 Subject: [PATCH 11/28] -1 --- printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/printf.c b/printf.c index e9fd59b..ae09c2f 100644 --- a/printf.c +++ b/printf.c @@ -54,6 +54,6 @@ int _printf(const char *format, ...) fmt_idx++; } } - write(1, buffer, BUFF_SIZE); + write(1, buffer, BUFF_SIZE + 1); return (_strlen(buffer)); } From 504376d3d0e1bfe3dd57b258535e43c696f60120 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Mon, 21 Aug 2023 14:42:37 +0300 Subject: [PATCH 12/28] help me pls --- tests/char_print.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/char_print.c b/tests/char_print.c index 2f49b0e..ca1104e 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -10,6 +10,7 @@ int main(void) { char c = 'c'; - _printf("%c\n", c); + _printf("%c%c", c, c); + _printf("cat: %c\n", c); return (0); } From f08b2ca3617dbfa2a2aa0f2bc28d345f83b6e8a2 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Tue, 22 Aug 2023 12:20:43 +0300 Subject: [PATCH 13/28] if idea no work, you copy errytang))) xd --- main.h | 1 + puts.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 puts.c diff --git a/main.h b/main.h index ddf9ce2..93c6ff7 100644 --- a/main.h +++ b/main.h @@ -5,5 +5,6 @@ int _contains(const char *str, char c); int _strlen(const char *str); char *_strcpy(char *dest, char *src); char *append(char *str, char c); +void _puts(char *str); #endif diff --git a/puts.c b/puts.c new file mode 100644 index 0000000..5e324fb --- /dev/null +++ b/puts.c @@ -0,0 +1,15 @@ +#include "main.h" +#include + +/** + * _puts - splurges whatever is in buffer + * + * @str: pointers to "buffer" or string head + * + * Return: Naught + */ + +void _puts(char *str) +{ + write(1, str, _strlen(str)); +} From a36de7eac102f5865a3fd5eb6e69b04bf6e8ff13 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Tue, 22 Aug 2023 13:26:33 +0300 Subject: [PATCH 14/28] brain dying pls --- main.h | 1 + memset.c | 22 ++++++++++++++++++++++ printf.c | 36 +++++++++++++++++++++++++----------- tests/char_print.c | 4 ++-- 4 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 memset.c diff --git a/main.h b/main.h index 93c6ff7..ab2c9b1 100644 --- a/main.h +++ b/main.h @@ -6,5 +6,6 @@ int _strlen(const char *str); char *_strcpy(char *dest, char *src); char *append(char *str, char c); void _puts(char *str); +char* _memset(char *str, int bval); #endif diff --git a/memset.c b/memset.c new file mode 100644 index 0000000..4758670 --- /dev/null +++ b/memset.c @@ -0,0 +1,22 @@ +#include "main.h" + +/** + * _memset - sets values of bytes to specific value + * + * @adr: head address + * @n: number of bytes + * + * Return: pointer to place + */ + +char* _memset(char *str, int bval) +{ + int i; + + for (i = 0; i < _strlen(str); i++) + { + *(str + i) = bval; + } + + return (str); +} diff --git a/printf.c b/printf.c index ae09c2f..7ce259c 100644 --- a/printf.c +++ b/printf.c @@ -19,7 +19,7 @@ int _printf(const char *format, ...) va_start(args, format); identifiers = _contains(format, '%'); - BUFF_SIZE = _strlen(format) - (identifiers * 2); + BUFF_SIZE = _strlen(format) - identifiers; buffer = malloc(BUFF_SIZE); if (!format) /* No string. No laundry */ @@ -28,24 +28,34 @@ int _printf(const char *format, ...) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) { - switch (*(format + 1)) /*this needs to shrink*/ + if (*buffer) + { + _puts(buffer); + free(buffer); + buffer = malloc(BUFF_SIZE); + buff_idx = 0; + } + switch (*(format + fmt_idx + 1)) /*this needs to shrink*/ { case 's': next = va_arg(args, char*); /*Store string temporarily*/ - buffer = _strcpy(buffer, next); - BUFF_SIZE = _strlen(buffer); - buff_idx += _strlen(next); + write(1, next, _strlen(next)); break; case 'c': /* add 1 byte and i++ */ - c = (char) va_arg(args, int); - buffer = append(buffer, c); - BUFF_SIZE += 1; - buff_idx += 1; + c = va_arg(args, int); + write(1, &c, 1); break; case '%': /*add 1 byte*/ break; } - fmt_idx += 2; + if (*(format + fmt_idx + 2)) + { + fmt_idx += 2; + } + else + { + fmt_idx += 1; + } } else { @@ -54,6 +64,10 @@ int _printf(const char *format, ...) fmt_idx++; } } - write(1, buffer, BUFF_SIZE + 1); + if (*buffer) + { + _puts(buffer); + free(buffer); + } return (_strlen(buffer)); } diff --git a/tests/char_print.c b/tests/char_print.c index ca1104e..cf7875d 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -8,9 +8,9 @@ int main(void) { - char c = 'c'; + char c = 97; - _printf("%c%c", c, c); + _printf("%c%c\n", c, c); _printf("cat: %c\n", c); return (0); } From 2ca25a30a03173a9d00fe5774827084c210af7ef Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:00:36 +0300 Subject: [PATCH 15/28] betty styling here --- strings.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/strings.c b/strings.c index e431f9c..ea662e1 100644 --- a/strings.c +++ b/strings.c @@ -46,7 +46,7 @@ int _contains(const char *str, char c) * Return: da string but appended */ -char* append(char *str, char c) +char *append(char *str, char c) { int len, i; char *new_me; @@ -55,7 +55,7 @@ char* append(char *str, char c) new_me = malloc(len + 1); i = -1; - while(*(str + ++i)) + while (*(str + ++i)) *(new_me + i) = *(str + i); *(new_me + i++) = c; From 4b798e200c5d051d6d4dacf7a25d2d06d19b64fb Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:04:17 +0300 Subject: [PATCH 16/28] NO DECLARATIONS AND ASSIGNING IN SAME LINE --- printf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/printf.c b/printf.c index 7ce259c..f6df54a 100644 --- a/printf.c +++ b/printf.c @@ -10,8 +10,8 @@ **/ int _printf(const char *format, ...) { - int buff_idx = 0; - int fmt_idx = 0; + int buff_idx; + int fmt_idx; unsigned int identifiers, BUFF_SIZE; char *buffer, *next, c; va_list args; From 3174bc405f007d2233fb76a21b4308278fbd9111 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:04:54 +0300 Subject: [PATCH 17/28] decided where to init the indexes --- printf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/printf.c b/printf.c index f6df54a..636e6ab 100644 --- a/printf.c +++ b/printf.c @@ -24,6 +24,8 @@ int _printf(const char *format, ...) if (!format) /* No string. No laundry */ return (0); + buff_idx = 0; + fmt_idx = 0; while (*(format + fmt_idx)) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) From 7294276338cdbada947c4a891fc1c2db9847723f Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:09:23 +0300 Subject: [PATCH 18/28] yes --- printf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/printf.c b/printf.c index 636e6ab..0a87005 100644 --- a/printf.c +++ b/printf.c @@ -10,8 +10,7 @@ **/ int _printf(const char *format, ...) { - int buff_idx; - int fmt_idx; + int buff_idx, fmt_idx; unsigned int identifiers, BUFF_SIZE; char *buffer, *next, c; va_list args; @@ -24,6 +23,7 @@ int _printf(const char *format, ...) if (!format) /* No string. No laundry */ return (0); + buff_idx = 0; fmt_idx = 0; while (*(format + fmt_idx)) From 036625ba8c90d7349ceef6d38ef5115bc3bda334 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:10:08 +0300 Subject: [PATCH 19/28] shrink buffer size upon putting and before freeing --- printf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/printf.c b/printf.c index 0a87005..896d475 100644 --- a/printf.c +++ b/printf.c @@ -33,6 +33,7 @@ int _printf(const char *format, ...) if (*buffer) { _puts(buffer); + BUFF_SIZE -= _strlen(buffer); free(buffer); buffer = malloc(BUFF_SIZE); buff_idx = 0; From 59e05c91fe51b30ad96c492dde284f91c1c98cb5 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:16:30 +0300 Subject: [PATCH 20/28] replaced write with puts --- printf.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/printf.c b/printf.c index 896d475..a9defcb 100644 --- a/printf.c +++ b/printf.c @@ -42,9 +42,9 @@ int _printf(const char *format, ...) { case 's': next = va_arg(args, char*); /*Store string temporarily*/ - write(1, next, _strlen(next)); + _puts(next); break; - case 'c': /* add 1 byte and i++ */ + case 'c': c = va_arg(args, int); write(1, &c, 1); break; @@ -52,13 +52,9 @@ int _printf(const char *format, ...) break; } if (*(format + fmt_idx + 2)) - { fmt_idx += 2; - } else - { fmt_idx += 1; - } } else { From 297cf9c4a51fbecad567efedee5b0e9e0b779695 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:25:46 +0300 Subject: [PATCH 21/28] printed? --- main.h | 3 ++- printf.c | 6 ++++-- puts.c | 17 ++++++++++++++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/main.h b/main.h index ab2c9b1..ce36133 100644 --- a/main.h +++ b/main.h @@ -5,7 +5,8 @@ int _contains(const char *str, char c); int _strlen(const char *str); char *_strcpy(char *dest, char *src); char *append(char *str, char c); -void _puts(char *str); +int _puts(char *str); +int _putchar(char c); char* _memset(char *str, int bval); #endif diff --git a/printf.c b/printf.c index a9defcb..a99b25a 100644 --- a/printf.c +++ b/printf.c @@ -11,7 +11,7 @@ int _printf(const char *format, ...) { int buff_idx, fmt_idx; - unsigned int identifiers, BUFF_SIZE; + unsigned int identifiers, BUFF_SIZE, printed; char *buffer, *next, c; va_list args; @@ -26,6 +26,7 @@ int _printf(const char *format, ...) buff_idx = 0; fmt_idx = 0; + printed = 0; while (*(format + fmt_idx)) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) @@ -68,5 +69,6 @@ int _printf(const char *format, ...) _puts(buffer); free(buffer); } - return (_strlen(buffer)); + _putchar('\0'); + return (printed); } diff --git a/puts.c b/puts.c index 5e324fb..acb5018 100644 --- a/puts.c +++ b/puts.c @@ -6,10 +6,21 @@ * * @str: pointers to "buffer" or string head * - * Return: Naught + * Return: written bytes */ -void _puts(char *str) +int _puts(char *str) { - write(1, str, _strlen(str)); + return (write(1, str, _strlen(str))); +} +/** + * _putchar - writes the character c to stdout + * @c: The character to print + * + * Return: On success 1. + * On error, -1 is returned, and errno is set appropriately. + */ +int _putchar(char c) +{ + return (write(1, &c, 1)); } From 9e30a97107ea1806552e4be9ff280dda7c0ad2a2 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:29:46 +0300 Subject: [PATCH 22/28] more compact code makes my brain happy --- printf.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/printf.c b/printf.c index a99b25a..c40d892 100644 --- a/printf.c +++ b/printf.c @@ -12,7 +12,7 @@ int _printf(const char *format, ...) { int buff_idx, fmt_idx; unsigned int identifiers, BUFF_SIZE, printed; - char *buffer, *next, c; + char *buffer; va_list args; va_start(args, format); @@ -42,12 +42,10 @@ int _printf(const char *format, ...) switch (*(format + fmt_idx + 1)) /*this needs to shrink*/ { case 's': - next = va_arg(args, char*); /*Store string temporarily*/ - _puts(next); + _puts(va_arg(args, char*)); break; case 'c': - c = va_arg(args, int); - write(1, &c, 1); + _putchar(va_arg(args, int)); break; case '%': /*add 1 byte*/ break; From d67665a15589f7e80177224afee9b82890cdb31b Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:40:06 +0300 Subject: [PATCH 23/28] removing the put char fixes it --- printf.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/printf.c b/printf.c index c40d892..66d7e4f 100644 --- a/printf.c +++ b/printf.c @@ -50,10 +50,10 @@ int _printf(const char *format, ...) case '%': /*add 1 byte*/ break; } - if (*(format + fmt_idx + 2)) + /*if (*(format + fmt_idx + 2))*/ fmt_idx += 2; - else - fmt_idx += 1; + /*else*/ + /*fmt_idx += 1;*/ } else { @@ -67,6 +67,5 @@ int _printf(const char *format, ...) _puts(buffer); free(buffer); } - _putchar('\0'); return (printed); } From a723d77399dc4c6ba1741174c45fe9c4dab8b9b2 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:40:37 +0300 Subject: [PATCH 24/28] adjusted tests --- tests/char_print.c | 3 +-- tests/puts.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 tests/puts.c diff --git a/tests/char_print.c b/tests/char_print.c index cf7875d..7c8d011 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -10,7 +10,6 @@ int main(void) { char c = 97; - _printf("%c%c\n", c, c); - _printf("cat: %c\n", c); + _printf("cat: %css", c); return (0); } diff --git a/tests/puts.c b/tests/puts.c new file mode 100644 index 0000000..fa57b26 --- /dev/null +++ b/tests/puts.c @@ -0,0 +1,12 @@ +#include "../main.h" +/** + * main - puts works? + */ +int main(void) +{ + char *str; + + str = "hello\n"; + _puts(str); + return (0); +} From 05aa31ed3f04d531a118c75c162bec6f47d42e02 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:41:31 +0300 Subject: [PATCH 25/28] works with \n now too --- 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 7c8d011..d62a66e 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -10,6 +10,6 @@ int main(void) { char c = 97; - _printf("cat: %css", c); + _printf("cat: %css\n", c); return (0); } From ad695607b53d8e7a8e509be8a52a5bdf0e67034c Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:41:46 +0300 Subject: [PATCH 26/28] safely nuking these (no explanation given) --- printf.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/printf.c b/printf.c index 66d7e4f..08b7052 100644 --- a/printf.c +++ b/printf.c @@ -50,10 +50,7 @@ int _printf(const char *format, ...) case '%': /*add 1 byte*/ break; } - /*if (*(format + fmt_idx + 2))*/ fmt_idx += 2; - /*else*/ - /*fmt_idx += 1;*/ } else { From 26f30dda484dfa47094cf9c67f9d4ac746026432 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:48:45 +0300 Subject: [PATCH 27/28] commented things to clarify --- printf.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/printf.c b/printf.c index 08b7052..081b245 100644 --- a/printf.c +++ b/printf.c @@ -10,21 +10,21 @@ **/ int _printf(const char *format, ...) { - int buff_idx, fmt_idx; + int buff_idx, fmt_idx; /* Indexes */ unsigned int identifiers, BUFF_SIZE, printed; - char *buffer; + char *buffer; /*where non formated things are stored*/ va_list args; va_start(args, format); - identifiers = _contains(format, '%'); + identifiers = _contains(format, '%'); /* instances of %s, %c etc */ BUFF_SIZE = _strlen(format) - identifiers; - buffer = malloc(BUFF_SIZE); + buffer = malloc(BUFF_SIZE); /* sized of the non % instances only*/ if (!format) /* No string. No laundry */ return (0); - buff_idx = 0; + buff_idx = 0; /* was there a way to squish these together? */ fmt_idx = 0; printed = 0; while (*(format + fmt_idx)) @@ -35,6 +35,7 @@ int _printf(const char *format, ...) { _puts(buffer); BUFF_SIZE -= _strlen(buffer); + printed += _strlen(buffer); free(buffer); buffer = malloc(BUFF_SIZE); buff_idx = 0; @@ -42,12 +43,13 @@ int _printf(const char *format, ...) switch (*(format + fmt_idx + 1)) /*this needs to shrink*/ { case 's': - _puts(va_arg(args, char*)); + printed += _puts(va_arg(args, char*)); break; case 'c': - _putchar(va_arg(args, int)); + printed += _putchar(va_arg(args, int)); break; case '%': /*add 1 byte*/ + printed += _putchar('%'); break; } fmt_idx += 2; @@ -61,7 +63,7 @@ int _printf(const char *format, ...) } if (*buffer) { - _puts(buffer); + printed += _puts(buffer); free(buffer); } return (printed); From b7ec927b9c4253c36037956b0ae06d364f1c48d3 Mon Sep 17 00:00:00 2001 From: LinlyBoi Date: Tue, 22 Aug 2023 14:50:48 +0300 Subject: [PATCH 28/28] yes --- printf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/printf.c b/printf.c index 081b245..f9a1bea 100644 --- a/printf.c +++ b/printf.c @@ -31,7 +31,7 @@ int _printf(const char *format, ...) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) { - if (*buffer) + if (*buffer) /* printing and clearing buffer on formatted things */ { _puts(buffer); BUFF_SIZE -= _strlen(buffer); @@ -56,12 +56,12 @@ int _printf(const char *format, ...) } else { - *(buffer + buff_idx) = *(format + fmt_idx); + *(buffer + buff_idx) = *(format + fmt_idx); /* filling up buffer */ buff_idx++; fmt_idx++; } } - if (*buffer) + if (*buffer) /*final buffer check*/ { printed += _puts(buffer); free(buffer);