diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 73eb35a67..c63b89fc1 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2009-01-26 Corinna Vinschen + + * grp.cc (getgrgid_r): Simplify code by using stpcpy. + (getgrnam_r): Ditto. + * passwd.cc (getpwuid_r32): Simplify code by using stpcpy. + (getpwnam_r): Ditto. + 2009-01-26 Corinna Vinschen * uinfo.cc (pwdgrp::load): Open file with FILE_OPEN_FOR_BACKUP_INTENT diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc index d9fe4f343..970e62627 100644 --- a/winsup/cygwin/grp.cc +++ b/winsup/cygwin/grp.cc @@ -1,7 +1,7 @@ /* 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 @@ -195,20 +195,13 @@ getgrgid_r (__gid32_t gid, struct __group32 *grp, char *buffer, size_t bufsize, /* 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; } @@ -252,20 +245,13 @@ getgrnam_r (const char *nam, struct __group32 *grp, char *buffer, /* 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; } diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc index b034cf412..8c51c22a0 100644 --- a/winsup/cygwin/passwd.cc +++ b/winsup/cygwin/passwd.cc @@ -1,6 +1,6 @@ /* 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. @@ -159,9 +159,9 @@ getpwuid_r32 (__uid32_t uid, struct passwd *pwd, char *buffer, size_t bufsize, s 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; @@ -169,17 +169,12 @@ getpwuid_r32 (__uid32_t uid, struct passwd *pwd, char *buffer, size_t bufsize, s *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; } @@ -217,9 +212,9 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s 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; @@ -227,17 +222,12 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s *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; }