42-archive/ls/src/lib_ls_long2.c
2016-11-06 23:40:29 +01:00

106 lines
1.9 KiB
C

#include "ftls.h"
#include <errno.h>
void ft_ls_long_rights(int st_mode)
{
int i;
char *rights;
i = 0;
rights = ft_itoa_base(st_mode, "01", "");
rights = rights + ft_strlen(rights) - 9;
while (rights[i])
{
if (rights[i] == '0')
rights[i] = '-';
else
{
if (i % 3 == 0)
rights[i] = 'r';
else if (i % 3 == 1)
rights[i] = 'w';
else if (i % 3 == 2)
rights[i] = 'x';
}
i++;
}
ft_printf("%s", rights);
}
int ft_ls_long_lnk(t_lsdata *data)
{
struct stat statbuf;
int ret;
ft_bzero(&statbuf, sizeof(statbuf));
if (S_ISLNK(data->stat.st_mode))
{
ft_printf(" -> %lld\n", statbuf.st_size);
ft_printf("path: %s\n", data->path);
if ((ret = stat(data->path, &statbuf)) == -1)
ft_printf("stat=%i, errno=%i\n", ret, errno);
}
else
ft_putendl("");
return (0);
}
int ft_ls_long_xattr(char *path)
{
int n;
char x;
x = ' ';
if ((n = ft_xattr_count(path)) == -1)
{
ft_printf("\ncouldnt get xattr: %i\n", n);
return (1);
}
if (n > 0)
x = '@';
ft_putchar(x);
return (0);
}
void ft_ls_long_total(t_list *ent)
{
struct stat stat;
t_lsdata *data;
int total;
total = 0;
while (ent)
{
data = ent->content;
stat = data->stat;
ent = ent->next;
total += stat.st_blocks;
}
ft_printf("total %i\n", total);
}
int ft_ls_long_pads(t_list *ent, t_pads *pads)
{
struct passwd *pwd;
struct group *grp;
struct stat stat;
t_lsdata *data;
while (ent)
{
data = ent->content;
stat = data->stat;
ent = ent->next;
if ((pwd = getpwuid(stat.st_uid)) == NULL)
return (1);
if ((grp = getgrgid(stat.st_gid)) == NULL)
return (1);
pads->nlink = FT_MAX(pads->nlink, (int)ft_uilen(stat.st_nlink));
pads->name = FT_MAX(pads->name, (int)ft_strlen(pwd->pw_name));
pads->gr_name = FT_MAX(pads->gr_name, (int)ft_strlen(grp->gr_name));
pads->size = FT_MAX(pads->size, (int)ft_ilen(stat.st_size));
}
return (0);
}