Browse Source

Shuffle the logic around a bit

Eric Andersen 23 years ago
parent
commit
04b5339fc7
2 changed files with 62 additions and 54 deletions
  1. 42 43
      libc/pwd_grp/__getgrent.c
  2. 20 11
      libc/pwd_grp/getgrgid.c

+ 42 - 43
libc/pwd_grp/__getgrent.c

@@ -30,14 +30,14 @@
  */
 struct group *__getgrent(int grp_fd)
 {
-#ifndef GR_SCALE_DYNAMIC
-	static char line_buff[GR_MAX_LINE_LEN];
-	static char *members[GR_MAX_MEMBERS];
-#else
+#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;
@@ -54,30 +54,7 @@ struct group *__getgrent(int grp_fd)
 	buff_size = 256;
 #endif
 
-#ifndef GR_SCALE_DYNAMIC
-	/* Read the line into the static buffer */
-	if ((line_len = read(grp_fd, line_buff, GR_MAX_LINE_LEN)) <= 0)
-		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)
-				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';
-
-#else							/* !GR_SCALE_DYNAMIC */
+#ifdef GR_SCALE_DYNAMIC
 	line_buff = realloc(line_buff, buff_size);
 	while (1) {
 		if ((line_len = read(grp_fd, line_buff + line_index,
@@ -100,6 +77,28 @@ struct group *__getgrent(int grp_fd)
 			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)
+		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)
+				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 */
@@ -128,7 +127,20 @@ struct group *__getgrent(int grp_fd)
 	member_num = 0;
 	field_begin = ptr;
 
-#ifndef GR_SCALE_DYNAMIC
+#ifdef GR_SCALE_DYNAMIC
+	if (members != NULL)
+	    free(members);
+	members = (char **) malloc((member_num + 1) * sizeof(char *));
+	for ( ; field_begin && *field_begin != '\0'; field_begin = ptr) {
+	    if ((ptr = strchr(field_begin, ',')) != NULL)
+		*ptr++ = '\0';
+	    members[member_num++] = field_begin;
+	    members = (char **) realloc(members,
+		    (member_num + 1) * sizeof(char *));
+	}
+	members[member_num] = NULL;
+
+#else
 	while ((ptr = strchr(ptr, ',')) != NULL) {
 		*ptr = '\0';
 		ptr++;
@@ -142,20 +154,7 @@ struct group *__getgrent(int grp_fd)
 		members[member_num] = field_begin;
 		members[member_num + 1] = NULL;
 	}
-#else							/* !GR_SCALE_DYNAMIC */
-	if (members != NULL)
-	    free(members);
-	members = (char **) malloc((member_num + 1) * sizeof(char *));
-	for ( ; field_begin && *field_begin != '\0'; field_begin = ptr) {
-	    if ((ptr = strchr(field_begin, ',')) != NULL)
-		*ptr++ = '\0';
-	    members[member_num++] = field_begin;
-	    members = (char **) realloc(members,
-		    (member_num + 1) * sizeof(char *));
-	}
-	members[member_num] = NULL;
-#endif							/* GR_SCALE_DYNAMIC */
-
+#endif
 	group.gr_mem = members;
 	return &group;
 }

+ 20 - 11
libc/pwd_grp/getgrgid.c

@@ -26,18 +26,27 @@
 
 struct group *getgrgid(const gid_t gid)
 {
-	struct group *group;
-	int grp_fd;
+    struct group *group;
+    int grp_fd;
 
-	if ((grp_fd = open(_PATH_GROUP, O_RDONLY)) < 0)
-		return NULL;
+    if ((grp_fd = open(_PATH_GROUP, O_RDONLY)) < 0)
+	return NULL;
 
-	while ((group = __getgrent(grp_fd)) != NULL)
-		if (group->gr_gid == gid) {
-			close(grp_fd);
-			return group;
-		}
+    while ((group = __getgrent(grp_fd)) != NULL)
+	if (group->gr_gid == gid) {
+	    close(grp_fd);
+	    return group;
+	}
+
+    close(grp_fd);
+    return NULL;
+}
+
+#if 0
+/* Search for an entry with a matching group ID.  */
+int getgrgid_r (gid_t gid, struct group *resultbuf, char *buffer, 
+	size_t buflen, struct group **result)
+{
 
-	close(grp_fd);
-	return NULL;
 }
+#endif