/* grp.cc
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007 Red Hat, Inc.
+ 2007, 2008, 2009 Red Hat, Inc.
Original stubs by Jason Molenda of Cygnus Support, crash@cygnus.com
First implementation by Gunther Ebert, gunther.ebert@ixos-leipzig.de
/* make a copy of tempgr */
*result = grp;
grp->gr_gid = tempgr->gr_gid;
- grp->gr_name = buffer;
- grp->gr_passwd = grp->gr_name + strlen (tempgr->gr_name) + 1;
- grp->gr_mem = (char **) (grp->gr_passwd + strlen (tempgr->gr_passwd) + 1);
- char *mem = (char *) grp->gr_mem + (i + 1) * sizeof (char *);
+ buffer = stpcpy (grp->gr_name = buffer, tempgr->gr_name);
+ buffer = stpcpy (grp->gr_passwd = buffer + 1, tempgr->gr_passwd);
+ grp->gr_mem = (char **) (buffer + 1);
+ buffer = (char *) grp->gr_mem + (i + 1) * sizeof (char *);
for (i = 0; tempgr->gr_mem[i]; ++i)
- {
- grp->gr_mem[i] = mem;
- mem += strlen (tempgr->gr_mem[i]) + 1;
- }
+ buffer = stpcpy (grp->gr_mem[i] = buffer, tempgr->gr_mem[i]) + 1;
grp->gr_mem[i] = NULL;
- strcpy (grp->gr_name, tempgr->gr_name);
- strcpy (grp->gr_passwd, tempgr->gr_passwd);
- for (i = 0; tempgr->gr_mem[i]; ++i)
- strcpy (grp->gr_mem[i], tempgr->gr_mem[i]);
return 0;
}
/* make a copy of tempgr */
*result = grp;
grp->gr_gid = tempgr->gr_gid;
- grp->gr_name = buffer;
- grp->gr_passwd = grp->gr_name + strlen (tempgr->gr_name) + 1;
- grp->gr_mem = (char **) (grp->gr_passwd + strlen (tempgr->gr_passwd) + 1);
- char *mem = (char *) grp->gr_mem + (i + 1) * sizeof (char *);
+ buffer = stpcpy (grp->gr_name = buffer, tempgr->gr_name);
+ buffer = stpcpy (grp->gr_passwd = buffer + 1, tempgr->gr_passwd);
+ grp->gr_mem = (char **) (buffer + 1);
+ buffer = (char *) grp->gr_mem + (i + 1) * sizeof (char *);
for (i = 0; tempgr->gr_mem[i]; ++i)
- {
- grp->gr_mem[i] = mem;
- mem += strlen (tempgr->gr_mem[i]) + 1;
- }
+ buffer = stpcpy (grp->gr_mem[i] = buffer, tempgr->gr_mem[i]) + 1;
grp->gr_mem[i] = NULL;
- strcpy (grp->gr_name, tempgr->gr_name);
- strcpy (grp->gr_passwd, tempgr->gr_passwd);
- for (i = 0; tempgr->gr_mem[i]; ++i)
- strcpy (grp->gr_mem[i], tempgr->gr_mem[i]);
return 0;
}
/* passwd.cc: getpwnam () and friends
- Copyright 1996, 1997, 1998, 2001, 2002, 2003, 2007 Red Hat, Inc.
+ Copyright 1996, 1997, 1998, 2001, 2002, 2003, 2007, 2008, 2009 Red Hat, Inc.
This file is part of Cygwin.
return 0;
/* check needed buffer size. */
- size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) +
- strlen (temppw->pw_shell) + strlen (temppw->pw_gecos) +
- strlen (temppw->pw_passwd) + 5;
+ size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_passwd)
+ + strlen (temppw->pw_gecos) + strlen (temppw->pw_dir)
+ + strlen (temppw->pw_shell) + 5;
if (needsize > bufsize)
return ERANGE;
*result = pwd;
pwd->pw_uid = temppw->pw_uid;
pwd->pw_gid = temppw->pw_gid;
- pwd->pw_name = buffer;
- pwd->pw_dir = pwd->pw_name + strlen (temppw->pw_name) + 1;
- pwd->pw_shell = pwd->pw_dir + strlen (temppw->pw_dir) + 1;
- pwd->pw_gecos = pwd->pw_shell + strlen (temppw->pw_shell) + 1;
+ buffer = stpcpy (pwd->pw_name = buffer, temppw->pw_name);
+ buffer = stpcpy (pwd->pw_passwd = buffer + 1, temppw->pw_passwd);
+ buffer = stpcpy (pwd->pw_gecos = buffer + 1, temppw->pw_gecos);
+ buffer = stpcpy (pwd->pw_dir = buffer + 1, temppw->pw_dir);
+ stpcpy (pwd->pw_shell = buffer + 1, temppw->pw_shell);
pwd->pw_comment = NULL;
- pwd->pw_passwd = pwd->pw_gecos + strlen (temppw->pw_gecos) + 1;
- strcpy (pwd->pw_name, temppw->pw_name);
- strcpy (pwd->pw_dir, temppw->pw_dir);
- strcpy (pwd->pw_shell, temppw->pw_shell);
- strcpy (pwd->pw_gecos, temppw->pw_gecos);
- strcpy (pwd->pw_passwd, temppw->pw_passwd);
return 0;
}
return 0;
/* check needed buffer size. */
- size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) +
- strlen (temppw->pw_shell) + strlen (temppw->pw_gecos) +
- strlen (temppw->pw_passwd) + 5;
+ size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_passwd)
+ + strlen (temppw->pw_gecos) + strlen (temppw->pw_dir)
+ + strlen (temppw->pw_shell) + 5;
if (needsize > bufsize)
return ERANGE;
*result = pwd;
pwd->pw_uid = temppw->pw_uid;
pwd->pw_gid = temppw->pw_gid;
- pwd->pw_name = buffer;
- pwd->pw_dir = pwd->pw_name + strlen (temppw->pw_name) + 1;
- pwd->pw_shell = pwd->pw_dir + strlen (temppw->pw_dir) + 1;
- pwd->pw_gecos = pwd->pw_shell + strlen (temppw->pw_shell) + 1;
+ buffer = stpcpy (pwd->pw_name = buffer, temppw->pw_name);
+ buffer = stpcpy (pwd->pw_passwd = buffer + 1, temppw->pw_passwd);
+ buffer = stpcpy (pwd->pw_gecos = buffer + 1, temppw->pw_gecos);
+ buffer = stpcpy (pwd->pw_dir = buffer + 1, temppw->pw_dir);
+ stpcpy (pwd->pw_shell = buffer + 1, temppw->pw_shell);
pwd->pw_comment = NULL;
- pwd->pw_passwd = pwd->pw_gecos + strlen (temppw->pw_gecos) + 1;
- strcpy (pwd->pw_name, temppw->pw_name);
- strcpy (pwd->pw_dir, temppw->pw_dir);
- strcpy (pwd->pw_shell, temppw->pw_shell);
- strcpy (pwd->pw_gecos, temppw->pw_gecos);
- strcpy (pwd->pw_passwd, temppw->pw_passwd);
return 0;
}