adding v and d printf AND made private header
This commit is contained in:
73
srcs/ft_printf_files/pf_utils.c
Normal file
73
srcs/ft_printf_files/pf_utils.c
Normal file
@@ -0,0 +1,73 @@
|
||||
#include "pf_private_header.h"
|
||||
#include "libft.h"
|
||||
|
||||
/*
|
||||
** SPECIFIER :
|
||||
** receive a word as a string, check if it start by '%', and return the
|
||||
** specifier (diuxXspefgn) and the length (h hh l ll)
|
||||
** -if s is a string, or is a single '%'
|
||||
** return NULL (to print is as a string)
|
||||
** -if s is a double '%%', remove one '%', and
|
||||
** return NULL (to print is as a string)
|
||||
** -then s is a conversion, go to the length and specifier
|
||||
** -copy them in 'string'
|
||||
** -and remove them from s
|
||||
** -return the length and specifier in a string
|
||||
*/
|
||||
char *pf_specifier(char *s)
|
||||
{
|
||||
char *string;
|
||||
int i;
|
||||
|
||||
if (s[0] != '%' || s[1] == '\0')
|
||||
return (NULL);
|
||||
if (s[1] == '%')
|
||||
{
|
||||
s[1] = '\0';
|
||||
return (NULL);
|
||||
}
|
||||
i = 1;
|
||||
while (ft_strchr("#0- +'0123456789.*", s[i]) != NULL)
|
||||
i++;
|
||||
string = ft_strdup(s + i);
|
||||
while (s[i] != '\0')
|
||||
{
|
||||
s[i] = '\0';
|
||||
i++;
|
||||
}
|
||||
return (string);
|
||||
}
|
||||
|
||||
/*
|
||||
** print the string
|
||||
** because of lake of space, it also free 'type'
|
||||
*/
|
||||
int pf_put_word(int fd, char *s, char *type, int size)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i < size)
|
||||
write(1, &(s[i++]), 1);
|
||||
free(type);
|
||||
free(s);
|
||||
return (i);
|
||||
}
|
||||
|
||||
/*
|
||||
** because of lake of space...
|
||||
** -1 expand the specifier according to its type and its length
|
||||
** and put in a string 'print'
|
||||
** -2 transform 'print' according to the flags
|
||||
*/
|
||||
char *pf_convert_with_flags(char *s, va_list ap, char *type, int *size)
|
||||
{
|
||||
char *print;
|
||||
|
||||
if (!(print = pf_convert(ap, type, &s)))
|
||||
return (NULL);
|
||||
if (!(print = pf_flag_transform(s, print, type, size)))
|
||||
return (NULL);
|
||||
free(s);
|
||||
return (print);
|
||||
}
|
||||
Reference in New Issue
Block a user