mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 23:40:19 +08:00
@@ -64,6 +64,8 @@ int getgrbuf_r(gid_t gid, FAR const char *name, FAR const char *passwd,
|
||||
{
|
||||
size_t reqdlen;
|
||||
size_t padlen;
|
||||
size_t namesize;
|
||||
size_t passwdsize;
|
||||
|
||||
/* In 'buf' a NULL pointer value will be stored, which must be naturally
|
||||
* aligned, followed by the null terminated group name string and the null
|
||||
@@ -71,8 +73,10 @@ int getgrbuf_r(gid_t gid, FAR const char *name, FAR const char *passwd,
|
||||
* sufficient buffer space was supplied by the caller.
|
||||
*/
|
||||
|
||||
namesize = strlen(name) + 1;
|
||||
passwdsize = strlen(passwd) + 1;
|
||||
padlen = sizeof(FAR void *) - ((uintptr_t)buf % sizeof(FAR char *));
|
||||
reqdlen = sizeof(FAR void *) + strlen(name) + 1 + strlen(passwd) + 1;
|
||||
reqdlen = sizeof(FAR void *) + namesize + passwdsize;
|
||||
|
||||
if (buflen < padlen + reqdlen)
|
||||
{
|
||||
@@ -84,10 +88,10 @@ int getgrbuf_r(gid_t gid, FAR const char *name, FAR const char *passwd,
|
||||
|
||||
grp->gr_mem = (FAR char **)&buf[padlen];
|
||||
grp->gr_name = &buf[padlen + sizeof(FAR char *)];
|
||||
grp->gr_passwd = &buf[padlen + sizeof(FAR char *) + strlen(name) + 1];
|
||||
grp->gr_passwd = &buf[padlen + sizeof(FAR char *) + namesize];
|
||||
|
||||
strcpy(grp->gr_name, name);
|
||||
strcpy(grp->gr_passwd, passwd);
|
||||
strlcpy(grp->gr_name, name, namesize);
|
||||
strlcpy(grp->gr_passwd, passwd, passwdsize);
|
||||
grp->gr_gid = gid;
|
||||
*grp->gr_mem = NULL;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user