t_space *nbr_space(t_dlist *lst) { t_space *space; t_dnode *temp; int nlink; int size; int maj; space = space_init(); temp = lst->head; while (temp) { nbr_space2(temp, space); nlink = nbr_len(((t_value*)(temp->content))->sb->st_nlink); size = nbr_len(((t_value*)(temp->content))->sb->st_size); maj = nbr_len(major(((t_value*)(temp->content))->sb->st_rdev)) + 1; space->link = (space->link < nlink) ? nlink : space->link; space->size = (space->size < size) ? size : space->size; space->maj = (space->maj < maj) ? maj : space->maj; temp = temp->next; } return (space); }
static void nbr_space2(t_dnode *temp, t_space *space) { int group; int user; int min; struct group *sgroup; struct passwd *suser; sgroup = getgrgid(((t_value*)(temp->content))->sb->st_gid); suser = getpwuid(((t_value*)(temp->content))->sb->st_uid); if (sgroup) group = ft_strlen(sgroup->gr_name); else group = nbr_len(((t_value*)(temp->content))->sb->st_gid); if (suser) user = ft_strlen(suser->pw_name); else user = nbr_len(((t_value*)(temp->content))->sb->st_uid); min = nbr_len(minor(((t_value*)(temp->content))->sb->st_rdev)); space->group = (space->group < group) ? group : space->group; space->user = (space->user < user) ? user : space->user; space->min = (space->min < min) ? min : space->min; }
char *my_nbr_to_char(int nb) { int len; char *str; len = nbr_len(nb); str = xmalloc(len * sizeof(char)); len--; str[len] = 0; len--; if (nb == 0) str[0] = '0'; while (nb != 0) { str[len] = nb % 10 + 48; nb /= 10; len--; } return (str); }
void print_user(t_dnode *temp, t_space *sp) { t_passwd *user; t_value *value; value = temp->content; user = getpwuid(value->sb->st_uid); if (user) { ft_putstr(user->pw_name); space(sp->user - ft_strlen(user->pw_name)); } else { ft_putnbr(value->sb->st_uid); space(sp->user - nbr_len(value->sb->st_uid)); } ft_putstr(" "); print_group(temp, sp); }