static int display_entry(int offset) { lseek(dbase_fd, offset + HDRSIZE, L_SET); if (read(dbase_fd, &pre, sizeof(struct prentry)) < 0) { fprintf(stderr, "pt_util: error reading entry %d: %s\n", offset, strerror(errno)); exit(1); } fix_pre(&pre); if ((pre.flags & PRFREE) == 0) { if (pre.flags & PRGRP) { if (flags & DO_GRP) add_group(pre.id); } else { if (print_id(pre.id) && (flags & DO_USR)) fprintf(dfp, FMT_BASE, pre.name, pre.flags, pre.ngroups, pre.id, pre.owner, pre.creator); checkin(&pre); } } return (nflag ? pre.nextName : pre.nextID); }
static int display_entry(int offset) { lseek(dbase_fd, offset + HDRSIZE, L_SET); read(dbase_fd, &pre, sizeof(struct prentry)); fix_pre(&pre); if ((pre.flags & PRFREE) == 0) { if (pre.flags & PRGRP) { if (flags & DO_GRP) add_group(pre.id); } else { if (print_id(pre.id) && (flags & DO_USR)) fprintf(dfp, FMT_BASE, pre.name, pre.flags, pre.ngroups, pre.id, pre.owner, pre.creator); checkin(&pre); } } return (nflag ? pre.nextName : pre.nextID); }
static void display_group(int id) { int i, offset; int print_grp = 0; offset = ntohl(prh.idHash[IDHash(id)]); while (offset) { lseek(dbase_fd, offset + HDRSIZE, L_SET); if (read(dbase_fd, &pre, sizeof(struct prentry)) < 0) { fprintf(stderr, "pt_util: read i/o error: %s\n", strerror(errno)); exit(1); } fix_pre(&pre); if (pre.id == id) break; offset = pre.nextID; } if (print_id(id)) { fprintf(dfp, FMT_BASE, pre.name, pre.flags, pre.ngroups, pre.id, pre.owner, pre.creator); print_grp = 1; } if ((flags & DO_MEM) == 0) return; for (i = 0; i < PRSIZE; i++) { if ((id = pre.entries[i]) == 0) break; if (id == PRBADID) continue; if (print_id(id) || print_grp == 1) { if (print_grp == 0) { fprintf(dfp, FMT_BASE, pre.name, pre.flags, pre.ngroups, pre.id, pre.owner, pre.creator); print_grp = 2; } fprintf(dfp, FMT_MEM, id_to_name(id), id); } } if (i == PRSIZE) { offset = pre.next; while (offset) { lseek(dbase_fd, offset + HDRSIZE, L_SET); if (read(dbase_fd, &prco, sizeof(struct contentry)) < 0) { fprintf(stderr, "pt_util: read i/o error: %s\n", strerror(errno)); exit(1); } prco.next = ntohl(prco.next); for (i = 0; i < COSIZE; i++) { prco.entries[i] = ntohl(prco.entries[i]); if ((id = prco.entries[i]) == 0) break; if (id == PRBADID) continue; if (print_id(id) || print_grp == 1) { if (print_grp == 0) { fprintf(dfp, FMT_BASE, pre.name, pre.flags, pre.ngroups, pre.id, pre.owner, pre.creator); print_grp = 2; } fprintf(dfp, FMT_MEM, id_to_name(id), id); } } if ((i == COSIZE) && prco.next) offset = prco.next; else offset = 0; } } }