#include "ftls.h" #include 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); }