MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pw_dup

Function pw_dup

tools/libutil/pw_util.c:604–653  ·  view source on GitHub ↗

* Duplicate a struct passwd. */

Source from the content-addressed store, hash-verified

602 * Duplicate a struct passwd.
603 */
604struct passwd *
605pw_dup(const struct passwd *pw)
606{
607 char *dst;
608 struct passwd *npw;
609 ssize_t len;
610
611 len = sizeof(*npw);
612 if (pw->pw_name != NULL)
613 len += strlen(pw->pw_name) + 1;
614 if (pw->pw_passwd != NULL)
615 len += strlen(pw->pw_passwd) + 1;
616 if (pw->pw_class != NULL)
617 len += strlen(pw->pw_class) + 1;
618 if (pw->pw_gecos != NULL)
619 len += strlen(pw->pw_gecos) + 1;
620 if (pw->pw_dir != NULL)
621 len += strlen(pw->pw_dir) + 1;
622 if (pw->pw_shell != NULL)
623 len += strlen(pw->pw_shell) + 1;
624 if ((npw = malloc((size_t)len)) == NULL)
625 return (NULL);
626 memcpy(npw, pw, sizeof(*npw));
627 dst = (char *)npw + sizeof(*npw);
628 if (pw->pw_name != NULL) {
629 npw->pw_name = dst;
630 dst = stpcpy(npw->pw_name, pw->pw_name) + 1;
631 }
632 if (pw->pw_passwd != NULL) {
633 npw->pw_passwd = dst;
634 dst = stpcpy(npw->pw_passwd, pw->pw_passwd) + 1;
635 }
636 if (pw->pw_class != NULL) {
637 npw->pw_class = dst;
638 dst = stpcpy(npw->pw_class, pw->pw_class) + 1;
639 }
640 if (pw->pw_gecos != NULL) {
641 npw->pw_gecos = dst;
642 dst = stpcpy(npw->pw_gecos, pw->pw_gecos) + 1;
643 }
644 if (pw->pw_dir != NULL) {
645 npw->pw_dir = dst;
646 dst = stpcpy(npw->pw_dir, pw->pw_dir) + 1;
647 }
648 if (pw->pw_shell != NULL) {
649 npw->pw_shell = dst;
650 dst = stpcpy(npw->pw_shell, pw->pw_shell) + 1;
651 }
652 return (npw);
653}
654
655#include "pw_scan.h"
656

Callers 1

pw_scanFunction · 0.85

Calls 2

mallocFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected