Lines Matching refs:gr
53 static struct group *grcopy(const struct group *gr, char *mem, const char *, int ndx);
165 gr_copy(int ffd, int tfd, const struct group *gr, struct group *old_gr) in gr_copy() argument
174 if (old_gr == NULL && gr == NULL) in gr_copy()
179 if (gr == NULL) { in gr_copy()
182 if ((line = gr_make(gr)) == NULL) in gr_copy()
188 sgr = gr; in gr_copy()
427 gr_make(const struct group *gr) in gr_make() argument
437 line_size = snprintf(NULL, 0, group_line_format, gr->gr_name, in gr_make()
438 gr->gr_passwd, (uintmax_t)gr->gr_gid) + 1; in gr_make()
439 if (gr->gr_mem != NULL) { in gr_make()
440 for (ndx = 0; gr->gr_mem[ndx] != NULL; ndx++) in gr_make()
441 line_size += strlen(gr->gr_mem[ndx]) + 1; in gr_make()
449 p += sprintf(p, group_line_format, gr->gr_name, gr->gr_passwd, in gr_make()
450 (uintmax_t)gr->gr_gid); in gr_make()
451 if (gr->gr_mem != NULL) { in gr_make()
453 for (ndx = 0; gr->gr_mem[ndx] != NULL; ndx++) { in gr_make()
455 p = stpcpy(p, gr->gr_mem[ndx]); in gr_make()
467 gr_dup(const struct group *gr) in gr_dup() argument
469 return (gr_add(gr, NULL)); in gr_dup()
475 gr_add(const struct group *gr, const char *newmember) in gr_add() argument
482 len = grmemlen(gr, newmember, &num_mem); in gr_add()
486 return (grcopy(gr, mem, newmember, num_mem)); in gr_add()
515 grcopy(const struct group *gr, char *dst, const char *name, int ndx) in grcopy() argument
527 if (gr->gr_name != NULL) { in grcopy()
529 dst = stpcpy(dst, gr->gr_name) + 1; in grcopy()
532 if (gr->gr_passwd != NULL) { in grcopy()
534 dst = stpcpy(dst, gr->gr_passwd) + 1; in grcopy()
537 newgr->gr_gid = gr->gr_gid; in grcopy()
540 if (gr->gr_mem != NULL) { in grcopy()
541 for (; gr->gr_mem[i] != NULL; i++) { in grcopy()
543 dst = stpcpy(dst, gr->gr_mem[i]) + 1; in grcopy()
562 grmemlen(const struct group *gr, const char *name, int *num_mem) in grmemlen() argument
567 if (gr == NULL) in grmemlen()
570 len = sizeof(*gr); in grmemlen()
571 if (gr->gr_name != NULL) in grmemlen()
572 len += strlen(gr->gr_name) + 1; in grmemlen()
573 if (gr->gr_passwd != NULL) in grmemlen()
574 len += strlen(gr->gr_passwd) + 1; in grmemlen()
576 if (gr->gr_mem != NULL) { in grmemlen()
577 for (; gr->gr_mem[i] != NULL; i++) { in grmemlen()
578 len += strlen(gr->gr_mem[i]) + 1; in grmemlen()
579 len += sizeof(*gr->gr_mem); in grmemlen()
585 len += sizeof(*gr->gr_mem); in grmemlen()
589 len += sizeof(*gr->gr_mem); in grmemlen()
598 __gr_scan(char *line, struct group *gr) in __gr_scan() argument
604 gr->gr_name = line; in __gr_scan()
608 gr->gr_passwd = loc + 1; in __gr_scan()
609 if (*gr->gr_passwd == ':') in __gr_scan()
610 *gr->gr_passwd = '\0'; in __gr_scan()
616 if (sscanf(loc + 1, "%u", &gr->gr_gid) != 1) in __gr_scan()
623 gr->gr_mem = NULL; in __gr_scan()
626 gr->gr_mem = reallocf(gr->gr_mem, sizeof(*gr->gr_mem) * in __gr_scan()
628 if (gr->gr_mem == NULL) in __gr_scan()
633 gr->gr_mem[ndx] = strsep(&line, ","); in __gr_scan()
634 } while (gr->gr_mem[ndx] != NULL && *gr->gr_mem[ndx] == '\0'); in __gr_scan()
635 } while (gr->gr_mem[ndx++] != NULL); in __gr_scan()
646 struct group gr; in gr_scan() local
652 if (!__gr_scan(line_copy, &gr)) { in gr_scan()
656 new_gr = gr_dup(&gr); in gr_scan()
658 if (gr.gr_mem != NULL) in gr_scan()
659 free(gr.gr_mem); in gr_scan()