summaryrefslogtreecommitdiff
path: root/src/ft_printf.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-03-13 16:05:39 +0100
committerDominik Kaiser2024-03-13 16:05:39 +0100
commitb2bc6137aee0742dc1bc566ce2674e92988bdf65 (patch)
tree5bea3c0388e2d8a9d41806c50c36e8cbc9ccc7d1 /src/ft_printf.c
parentddb39c38dcdae5f4efbf0ce0a26c4c4276eff024 (diff)
downloadft_printf-b2bc6137aee0742dc1bc566ce2674e92988bdf65.tar.gz
ft_printf-b2bc6137aee0742dc1bc566ce2674e92988bdf65.zip
Add all functions but %p
Diffstat (limited to 'src/ft_printf.c')
-rw-r--r--src/ft_printf.c58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/ft_printf.c b/src/ft_printf.c
index fe152f6..f6984c7 100644
--- a/src/ft_printf.c
+++ b/src/ft_printf.c
@@ -6,13 +6,69 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/12 18:18:59 by dkaiser #+# #+# */
-/* Updated: 2024/03/12 18:20:15 by dkaiser ### ########.fr */
+/* Updated: 2024/03/13 16:02:04 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "../ft_printf.h"
+#include <stdarg.h>
+
+static int print_char(char c)
+{
+ ft_putchar_fd(c, 1);
+ return 1;
+}
+
+static int print_str(char *str)
+{
+ if (str)
+ {
+ ft_putstr_fd(str, 1);
+ return ft_strlen(str);
+ }
+ else
+ {
+ ft_putstr_fd("(null)", 1);
+ return 6;
+ }
+}
+
+static int print_conv(va_list args, char c)
+{
+ if (c == 'c')
+ return print_char(va_arg(args, int));
+ if (c == 's')
+ return print_str(va_arg(args, char*));
+ if (c == 'p')
+ ;
+ if (c == 'd' || c == 'i')
+ return ft_printnbr(va_arg(args, int));
+ if (c == 'u')
+ return ft_printunbr(va_arg(args, unsigned int));
+ if (c == 'x' || c == 'X')
+ return ft_printhex(va_arg(args, unsigned int), c);
+ if (c == '%')
+ return print_char('%');
+ return -2147483648;
+}
int ft_printf(char *fmt, ...)
{
+ int result;
+ va_list args;
+ result = 0;
+ va_start(args, fmt);
+ while(*fmt)
+ {
+ if (*fmt == '%')
+ result += print_conv(args, *(++fmt));
+ else
+ result++;
+ fmt++;
+ if (result < 0)
+ return -1;
+ }
+ va_end(args);
+ return (result);
}