Hurd: compliance fixes for getlogin_r

- make LOGIN non-static, as it would make getlogin_r no more reentrant; change its type to string_t
- fail with ERANGE if NAME has not enough space for the actual login string
- copy with memcpy only the chars of the string
This commit is contained in:
Pino Toscano 2012-07-21 00:16:11 +02:00
parent 0ced335ac0
commit b3404dbdeb
2 changed files with 13 additions and 2 deletions

View File

@ -13,6 +13,10 @@
* sysdeps/mach/hurd/getgroups.c: Return -1 and set EINVAL for
negative N or less than NGIDS.
* sysdeps/mach/hurd/getlogin_r.c: Make LOGIN non-static and change its
type to string_t. Set ERANGE as errno and return it if NAME is not big
enough. Use memcpy instead of strncpy.
2012-07-20 Joseph Myers <joseph@codesourcery.com>
* elf/Makefile (check-data): Remove.

View File

@ -29,13 +29,20 @@ getlogin_r (name, name_len)
char *name;
size_t name_len;
{
static char login[1024]; /* XXX */
string_t login;
error_t err;
if (err = __USEPORT (PROC, __proc_getlogin (port, login)))
return errno = err;
strncpy (name, login, name_len);
size_t len = __strnlen (login, sizeof login - 1) + 1;
if (len > name_len)
{
errno = ERANGE;
return errno;
}
memcpy (name, login, len);
return 0;
}
libc_hidden_def (getlogin_r)