From d71c3f8b8a678ac6396512ab6b7376b0bae5e2bf Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 25 Sep 2016 02:29:37 +0200 Subject: [PATCH] xattr, ilen, uilen, etc --- libft/includes/{libftprintf.h => ftprintf.h} | 0 libft/includes/ftxattr.h | 6 ++ libft/includes/libft.h | 11 ++- libft/src/ft_printf/ft_conversion.c | 2 +- libft/src/ft_printf/ft_parse.c | 2 +- libft/src/ft_printf/ft_printf.c | 2 +- libft/src/ft_printf/ft_tranform.c | 2 +- libft/src/ft_printf/lib_fmt.c | 2 +- libft/src/ft_printf/lib_fmt_error.c | 2 +- libft/src/ft_printf/lib_fmt_validate.c | 2 +- libft/src/ft_printf/lib_pad.c | 2 +- libft/src/ft_printf/lib_pad_sharp.c | 2 +- libft/src/math/ft_ilen.c | 11 +++ libft/src/math/ft_uilen.c | 11 +++ libft/src/str/ft_convert_base.c | 85 ++++++++++++++++++++ libft/src/time/ft_time_isrecent.c | 12 +++ libft/src/xattr/ft_xattr_count.c | 21 +++++ libft/src/xattr/ft_xattr_print.c | 26 ++++++ 18 files changed, 191 insertions(+), 10 deletions(-) rename libft/includes/{libftprintf.h => ftprintf.h} (100%) create mode 100644 libft/includes/ftxattr.h create mode 100644 libft/src/math/ft_ilen.c create mode 100644 libft/src/math/ft_uilen.c create mode 100644 libft/src/str/ft_convert_base.c create mode 100644 libft/src/time/ft_time_isrecent.c create mode 100644 libft/src/xattr/ft_xattr_count.c create mode 100644 libft/src/xattr/ft_xattr_print.c diff --git a/libft/includes/libftprintf.h b/libft/includes/ftprintf.h similarity index 100% rename from libft/includes/libftprintf.h rename to libft/includes/ftprintf.h diff --git a/libft/includes/ftxattr.h b/libft/includes/ftxattr.h new file mode 100644 index 00000000..f9f3804d --- /dev/null +++ b/libft/includes/ftxattr.h @@ -0,0 +1,6 @@ +#ifndef FTXATTR_H +# define FTXATTR_H +# define FT_XATTR_SIZE 10000 +# include +# include +#endif diff --git a/libft/includes/libft.h b/libft/includes/libft.h index 309740fd..17441022 100644 --- a/libft/includes/libft.h +++ b/libft/includes/libft.h @@ -1,10 +1,12 @@ #ifndef LIBFT_H #define LIBFT_H -#include "libftprintf.h" +# include "ftprintf.h" +# include "ftxattr.h" # include # include # include # include +# include # define FT_SEP(x) (x == ' ' || x == '\t' || x == '\n') # define FT_ABS(x) (((x) < 0) ? -(x) : (x)) # define FT_NEG(x) (((x) < 0) ? 1 : 0) @@ -110,4 +112,11 @@ char *ft_ulltoa_base(unsigned long long nbr, char *base); char *ft_uitoa_base(unsigned int nbr, char *base); void ft_strlsort(char **list, int size, int (*cmp)()); +char *ft_convert_base(char *str, char *base_from, char *base_to, char *flags); +size_t ft_ilen(int n); +size_t ft_uilen(unsigned int n); + +int ft_time_isrecent(time_t event); +int ft_xattr_print(char *path); +int ft_xattr_count(char *path); #endif diff --git a/libft/src/ft_printf/ft_conversion.c b/libft/src/ft_printf/ft_conversion.c index fdd85648..1179d3d4 100644 --- a/libft/src/ft_printf/ft_conversion.c +++ b/libft/src/ft_printf/ft_conversion.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" char *ft_signed_conversion(t_fmt *fmt, va_list ap) { diff --git a/libft/src/ft_printf/ft_parse.c b/libft/src/ft_printf/ft_parse.c index 38e31613..adfccb2e 100644 --- a/libft/src/ft_printf/ft_parse.c +++ b/libft/src/ft_printf/ft_parse.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" void ft_parse_flags(t_fmt *fmt, char **format) { diff --git a/libft/src/ft_printf/ft_printf.c b/libft/src/ft_printf/ft_printf.c index 23c21cb4..407cd68e 100644 --- a/libft/src/ft_printf/ft_printf.c +++ b/libft/src/ft_printf/ft_printf.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" t_conv g_convs[] = { diff --git a/libft/src/ft_printf/ft_tranform.c b/libft/src/ft_printf/ft_tranform.c index 83c10f1a..bd4a2f4a 100644 --- a/libft/src/ft_printf/ft_tranform.c +++ b/libft/src/ft_printf/ft_tranform.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" char *ft_transform(t_fmt *fmt, va_list ap) { diff --git a/libft/src/ft_printf/lib_fmt.c b/libft/src/ft_printf/lib_fmt.c index 77a6197a..fd85eb58 100644 --- a/libft/src/ft_printf/lib_fmt.c +++ b/libft/src/ft_printf/lib_fmt.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" t_fmt *ft_fmt_init(void) { diff --git a/libft/src/ft_printf/lib_fmt_error.c b/libft/src/ft_printf/lib_fmt_error.c index 9c1c7dba..1d5415f8 100644 --- a/libft/src/ft_printf/lib_fmt_error.c +++ b/libft/src/ft_printf/lib_fmt_error.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" void ft_fmt_error_conv(char conv) { diff --git a/libft/src/ft_printf/lib_fmt_validate.c b/libft/src/ft_printf/lib_fmt_validate.c index d58b2ba9..71438734 100644 --- a/libft/src/ft_printf/lib_fmt_validate.c +++ b/libft/src/ft_printf/lib_fmt_validate.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" void ft_fmt_simplify(t_fmt *fmt) { diff --git a/libft/src/ft_printf/lib_pad.c b/libft/src/ft_printf/lib_pad.c index 61f30f4a..df2ab857 100644 --- a/libft/src/ft_printf/lib_pad.c +++ b/libft/src/ft_printf/lib_pad.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" void ft_pad_right(char *str, t_fmt *fmt) { diff --git a/libft/src/ft_printf/lib_pad_sharp.c b/libft/src/ft_printf/lib_pad_sharp.c index 5174b6b1..9d8cd526 100644 --- a/libft/src/ft_printf/lib_pad_sharp.c +++ b/libft/src/ft_printf/lib_pad_sharp.c @@ -1,4 +1,4 @@ -#include "libftprintf.h" +#include "ftprintf.h" void ft_pad_sharp_o(char *str) { diff --git a/libft/src/math/ft_ilen.c b/libft/src/math/ft_ilen.c new file mode 100644 index 00000000..cd80062b --- /dev/null +++ b/libft/src/math/ft_ilen.c @@ -0,0 +1,11 @@ +#include "libft.h" + +size_t ft_ilen(int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/libft/src/math/ft_uilen.c b/libft/src/math/ft_uilen.c new file mode 100644 index 00000000..0e7aa85f --- /dev/null +++ b/libft/src/math/ft_uilen.c @@ -0,0 +1,11 @@ +#include "libft.h" + +size_t ft_uilen(unsigned int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/libft/src/str/ft_convert_base.c b/libft/src/str/ft_convert_base.c new file mode 100644 index 00000000..a80f84fb --- /dev/null +++ b/libft/src/str/ft_convert_base.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convert_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 23:31:20 by jhalford #+# #+# */ +/* Updated: 2016/08/25 17:32:17 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int get_size(char *str) +{ + int i; + int j; + + i = 0; + while (str[i] != '\0') + { + if (str[i] == '+' || str[i] == '-') + return (0); + if (str[i] < 32 || str[i] > 126) + return (0); + j = 0; + while (j < i) + { + if (str[j] == str[i]) + return (0); + j++; + } + i++; + } + return (i); +} + +static int get_pos(char c, char *str) +{ + int i; + + i = 0; + while (c != str[i] && str[i]) + i++; + return (i); +} + +static int ft_check_str(char *str, char *base, int base_size) +{ + while (*str) + { + if (!(get_pos(*str, base) < base_size || *str == '-' || *str == '+')) + return (0); + str++; + } + return (1); +} + +char *ft_convert_base(char *str, char *base_from, char *base_to, char *flags) +{ + int base_size; + int res; + int sign; + + base_size = get_size(base_from); + res = 0; + sign = 1; + if (!ft_check_str(str, base_from, base_size)) + return (ft_itoa_base(0, "0", flags)); + if (base_size > 1) + { + if (*str == '-' || *str == '+') + { + if (get_pos(*(str + 1), base_from) < base_size) + sign = (*str == '+') ? 1 : -1; + else + return (ft_itoa_base(0, "0", flags)); + str++; + } + while (get_pos(*str, base_from) < base_size) + res = res * base_size + sign * get_pos(*str++, base_from); + } + return (ft_itoa_base(res, base_to, flags)); +} diff --git a/libft/src/time/ft_time_isrecent.c b/libft/src/time/ft_time_isrecent.c new file mode 100644 index 00000000..072e3fa1 --- /dev/null +++ b/libft/src/time/ft_time_isrecent.c @@ -0,0 +1,12 @@ +#include "libft.h" + +int ft_time_isrecent(time_t event) +{ + time_t now; + + now = time(&now); + if (now - event > 0 && now - event < 6*365/12*24*60*60) + return (1); + else + return (0); +} diff --git a/libft/src/xattr/ft_xattr_count.c b/libft/src/xattr/ft_xattr_count.c new file mode 100644 index 00000000..e3b6159d --- /dev/null +++ b/libft/src/xattr/ft_xattr_count.c @@ -0,0 +1,21 @@ +#include "libft.h" + +int ft_xattr_count(char *path) +{ + ssize_t listlen; + char list[FT_XATTR_SIZE]; + int i; + int count; + + i = 0; + listlen = listxattr(path, list, FT_XATTR_SIZE, XATTR_NOFOLLOW); + if (listlen == -1) + return (-1); + count = 0; + while (i < listlen) + { + i += ft_strlen(list) + 1; + count++; + } + return (count); +} diff --git a/libft/src/xattr/ft_xattr_print.c b/libft/src/xattr/ft_xattr_print.c new file mode 100644 index 00000000..7401fd64 --- /dev/null +++ b/libft/src/xattr/ft_xattr_print.c @@ -0,0 +1,26 @@ +#include "libft.h" + +int ft_xattr_print(char *path) +{ + ssize_t listlen; + ssize_t valuelen; + char list[FT_XATTR_SIZE]; + char value[FT_XATTR_SIZE]; + int i; + + i = 0; + listlen = listxattr(path, list, FT_XATTR_SIZE, XATTR_NOFOLLOW); + if (listlen == -1) + return (1); + while (i < listlen) + { + valuelen = getxattr(path, list + i, value, + FT_XATTR_SIZE, 0, XATTR_NOFOLLOW); + if (valuelen == -1) + ft_printf("couldn't get value\n"); + else + printf("%s:\n%s\n", list + i, value); + i += ft_strlen(list) + 1; + } + return (0); +}