projects
/
kopensolaris-gnu
/
glibc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
265b7d5
)
(lookup): Add new argument. Store error number in *ERRNOP. Little
author
drepper
<drepper>
Mon, 8 Dec 1997 02:29:28 +0000
(
02:29
+0000)
committer
drepper
<drepper>
Mon, 8 Dec 1997 02:29:28 +0000
(
02:29
+0000)
optimization.
hesiod/nss_hesiod/hesiod-grp.c
patch
|
blob
|
history
diff --git
a/hesiod/nss_hesiod/hesiod-grp.c
b/hesiod/nss_hesiod/hesiod-grp.c
index
7b0832d
..
e08b9dc
100644
(file)
--- a/
hesiod/nss_hesiod/hesiod-grp.c
+++ b/
hesiod/nss_hesiod/hesiod-grp.c
@@
-81,13
+81,14
@@
_nss_hesiod_endgrent (void)
static enum nss_status
lookup (const char *name, const char *type, struct group *grp,
static enum nss_status
lookup (const char *name, const char *type, struct group *grp,
- char *buffer, size_t buflen)
+ char *buffer, size_t buflen
, int *errnop
)
{
enum nss_status status;
struct parser_data *data = (void *) buffer;
size_t linebuflen;
char **list;
int parse_res;
{
enum nss_status status;
struct parser_data *data = (void *) buffer;
size_t linebuflen;
char **list;
int parse_res;
+ size_t len;
status = internal_setgrent ();
if (status != NSS_STATUS_SUCCESS)
status = internal_setgrent ();
if (status != NSS_STATUS_SUCCESS)
@@
-98,17
+99,18
@@
lookup (const char *name, const char *type, struct group *grp,
return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
linebuflen = buffer + buflen - data->linebuffer;
return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
linebuflen = buffer + buflen - data->linebuffer;
- if (linebuflen < strlen (*list) + 1)
+ len = strlen (*list) + 1;
+ if (linebuflen < len)
{
hesiod_free_list (context, list);
{
hesiod_free_list (context, list);
-
__set_errno (ERANGE)
;
+
*errnop = ERANGE
;
return NSS_STATUS_TRYAGAIN;
}
return NSS_STATUS_TRYAGAIN;
}
-
strcpy (buffer, *list
);
+
memcpy (data->linebuffer, *list, len
);
hesiod_free_list (context, list);
hesiod_free_list (context, list);
- parse_res = _nss_files_parse_grent (buffer, grp, data, buflen);
+ parse_res = _nss_files_parse_grent (buffer, grp, data, buflen
, errnop
);
if (parse_res < 1)
return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
if (parse_res < 1)
return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
@@
-117,13
+119,13
@@
lookup (const char *name, const char *type, struct group *grp,
enum nss_status
_nss_hesiod_getgrnam_r (const char *name, struct group *grp,
enum nss_status
_nss_hesiod_getgrnam_r (const char *name, struct group *grp,
- char *buffer, size_t buflen)
+ char *buffer, size_t buflen
, int *errnop
)
{
enum nss_status status;
__libc_lock_lock (lock);
{
enum nss_status status;
__libc_lock_lock (lock);
- status = lookup (name, "group", grp, buffer, buflen);
+ status = lookup (name, "group", grp, buffer, buflen
, errnop
);
__libc_lock_unlock (lock);
__libc_lock_unlock (lock);
@@
-132,7
+134,7
@@
_nss_hesiod_getgrnam_r (const char *name, struct group *grp,
enum nss_status
_nss_hesiod_getgrgid_r (gid_t gid, struct group *grp,
enum nss_status
_nss_hesiod_getgrgid_r (gid_t gid, struct group *grp,
- char *buffer, size_t buflen)
+ char *buffer, size_t buflen
, int *errnop
)
{
enum nss_status status = NSS_STATUS_UNAVAIL;
char gidstr[21]; /* We will probably never have a gid_t with more
{
enum nss_status status = NSS_STATUS_UNAVAIL;
char gidstr[21]; /* We will probably never have a gid_t with more
@@
-142,7
+144,7
@@
_nss_hesiod_getgrgid_r (gid_t gid, struct group *grp,
__libc_lock_lock (lock);
__libc_lock_lock (lock);
- status = lookup (gidstr, "gid", grp, buffer, buflen);
+ status = lookup (gidstr, "gid", grp, buffer, buflen
, errnop
);
__libc_lock_unlock (lock);
__libc_lock_unlock (lock);