summaryrefslogtreecommitdiff
path: root/libc/pwd_grp/__getgrent.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-08-18 18:50:52 +0000
committerEric Andersen <andersen@codepoet.org>2002-08-18 18:50:52 +0000
commit160212fe2d074af5bdc25b219e2276576f52b6e3 (patch)
treea18295e8f38e392f16191e4e8480a8caf25a66dc /libc/pwd_grp/__getgrent.c
parented43cbaf96c89d13675d2afeb8c73109982c64d9 (diff)
Yet more rework to make __getgrent and the functions that use it
reentrant... -Erik
Diffstat (limited to 'libc/pwd_grp/__getgrent.c')
-rw-r--r--libc/pwd_grp/__getgrent.c59
1 files changed, 1 insertions, 58 deletions
diff --git a/libc/pwd_grp/__getgrent.c b/libc/pwd_grp/__getgrent.c
index e89f914ad..393c42de1 100644
--- a/libc/pwd_grp/__getgrent.c
+++ b/libc/pwd_grp/__getgrent.c
@@ -39,17 +39,10 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
* getgrent() except that it is passed a file descriptor. getgrent()
* is just a wrapper for this function.
*/
-struct group *__getgrent(int grp_fd)
+struct group *__getgrent(int grp_fd, char *line_buff, char **members)
{
-#ifdef GR_SCALE_DYNAMIC
- static char *line_buff = NULL;
- static char **members = NULL;
short line_index;
short buff_size;
-#else
- static char line_buff[GR_MAX_LINE_LEN];
- static char *members[GR_MAX_MEMBERS];
-#endif
static struct group group;
register char *ptr;
char *field_begin;
@@ -58,21 +51,15 @@ struct group *__getgrent(int grp_fd)
int line_len;
- LOCK;
-
/* We use the restart label to handle malformatted lines */
restart:
-#ifdef GR_SCALE_DYNAMIC
line_index = 0;
buff_size = 256;
-#endif
-#ifdef GR_SCALE_DYNAMIC
line_buff = realloc(line_buff, buff_size);
while (1) {
if ((line_len = read(grp_fd, line_buff + line_index,
buff_size - line_index)) <= 0) {
- UNLOCK;
return NULL;
}
field_begin = strchr(line_buff, '\n');
@@ -92,33 +79,6 @@ restart:
line_buff = realloc(line_buff, buff_size);
}
}
-#else
- /* Read the line into the static buffer */
- if ((line_len = read(grp_fd, line_buff, GR_MAX_LINE_LEN)) <= 0) {
- UNLOCK;
- return NULL;
- }
- field_begin = strchr(line_buff, '\n');
- if (field_begin != NULL)
- lseek(grp_fd, (long) (1 + field_begin - (line_buff + line_len)),
- SEEK_CUR);
- else { /* The line is too long - skip it :-\ */
-
- do {
- if ((line_len = read(grp_fd, line_buff, GR_MAX_LINE_LEN)) <= 0) {
- UNLOCK;
- return NULL;
- }
- } while (!(field_begin = strchr(line_buff, '\n')));
- lseek(grp_fd, (long) ((field_begin - line_buff) - line_len + 1),
- SEEK_CUR);
- goto restart;
- }
- if (*line_buff == '#' || *line_buff == ' ' || *line_buff == '\n' ||
- *line_buff == '\t')
- goto restart;
- *field_begin = '\0';
-#endif /* GR_SCALE_DYNAMIC */
/* Now parse the line */
group.gr_name = line_buff;
@@ -146,7 +106,6 @@ restart:
member_num = 0;
field_begin = ptr;
-#ifdef GR_SCALE_DYNAMIC
if (members != NULL)
free(members);
members = (char **) malloc((member_num + 1) * sizeof(char *));
@@ -159,22 +118,6 @@ restart:
}
members[member_num] = NULL;
-#else
- while ((ptr = strchr(ptr, ',')) != NULL) {
- *ptr = '\0';
- ptr++;
- members[member_num] = field_begin;
- field_begin = ptr;
- member_num++;
- }
- if (*field_begin == '\0')
- members[member_num] = NULL;
- else {
- members[member_num] = field_begin;
- members[member_num + 1] = NULL;
- }
-#endif
group.gr_mem = members;
- UNLOCK;
return &group;
}