diff options
Diffstat (limited to 'libc/pwd_grp/__getgrent.c')
-rw-r--r-- | libc/pwd_grp/__getgrent.c | 240 |
1 files changed, 122 insertions, 118 deletions
diff --git a/libc/pwd_grp/__getgrent.c b/libc/pwd_grp/__getgrent.c index 612f1124d..d1bf8e61e 100644 --- a/libc/pwd_grp/__getgrent.c +++ b/libc/pwd_grp/__getgrent.c @@ -29,140 +29,144 @@ * 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) { -#ifndef GR_SCALE_DYNAMIC - static char line_buff[GR_MAX_LINE_LEN]; - static char * members[GR_MAX_MEMBERS]; +#ifndef GR_SCALE_DYNAMIC + static char line_buff[GR_MAX_LINE_LEN]; + static char *members[GR_MAX_MEMBERS]; #else - static char * line_buff = NULL; - static char ** members = NULL; - short line_index; - short buff_size; + static char *line_buff = NULL; + static char **members = NULL; + short line_index; + short buff_size; #endif - static struct group group; - register char * ptr; - char * field_begin; - short member_num; - char * endptr; - int line_len; + static struct group group; + register char *ptr; + char *field_begin; + short member_num; + char *endptr; + int line_len; - /* We use the restart label to handle malformatted lines */ -restart: + /* We use the restart label to handle malformatted lines */ + restart: #ifdef GR_SCALE_DYNAMIC - line_index=0; - buff_size=256; + line_index = 0; + 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 */ - line_buff=realloc(line_buff, buff_size); - while (1) - { - if ((line_len=read(grp_fd, line_buff+line_index, - buff_size-line_index))<=0) - return NULL; - field_begin=strchr(line_buff, '\n'); - if (field_begin!=NULL) - { - lseek(grp_fd, (long) (1+field_begin-(line_len+line_index+line_buff)), - SEEK_CUR); - *field_begin='\0'; - if (*line_buff=='#' || *line_buff==' ' || *line_buff=='\n' || - *line_buff=='\t') - goto restart; - break; + /* 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; } - else /* Allocate some more space */ - { - line_index=buff_size; - buff_size+=256; - line_buff=realloc(line_buff, buff_size); + if (*line_buff == '#' || *line_buff == ' ' || *line_buff == '\n' || + *line_buff == '\t') + goto restart; + *field_begin = '\0'; + +#else /* !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) + return NULL; + field_begin = strchr(line_buff, '\n'); + if (field_begin != NULL) { + lseek(grp_fd, + (long) (1 + field_begin - + (line_len + line_index + line_buff)), SEEK_CUR); + *field_begin = '\0'; + if (*line_buff == '#' || *line_buff == ' ' + || *line_buff == '\n' || *line_buff == '\t') + goto restart; + break; + } else { /* Allocate some more space */ + + line_index = buff_size; + buff_size += 256; + line_buff = realloc(line_buff, buff_size); + } } - } -#endif /* GR_SCALE_DYNAMIC */ +#endif /* GR_SCALE_DYNAMIC */ - /* Now parse the line */ - group.gr_name=line_buff; - ptr=strchr(line_buff, ':'); - if (ptr==NULL) goto restart; - *ptr++='\0'; + /* Now parse the line */ + group.gr_name = line_buff; + ptr = strchr(line_buff, ':'); + if (ptr == NULL) + goto restart; + *ptr++ = '\0'; - group.gr_passwd=ptr; - ptr=strchr(ptr, ':'); - if (ptr==NULL) goto restart; - *ptr++='\0'; + group.gr_passwd = ptr; + ptr = strchr(ptr, ':'); + if (ptr == NULL) + goto restart; + *ptr++ = '\0'; - field_begin=ptr; - ptr=strchr(ptr, ':'); - if (ptr==NULL) goto restart; - *ptr++='\0'; + field_begin = ptr; + ptr = strchr(ptr, ':'); + if (ptr == NULL) + goto restart; + *ptr++ = '\0'; - group.gr_gid=(gid_t) strtoul(field_begin, &endptr, 10); - if (*endptr!='\0') goto restart; + group.gr_gid = (gid_t) strtoul(field_begin, &endptr, 10); + if (*endptr != '\0') + goto restart; - member_num=0; - field_begin=ptr; + member_num = 0; + field_begin = ptr; #ifndef GR_SCALE_DYNAMIC - 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; - } -#else /* !GR_SCALE_DYNAMIC */ - if (members!=NULL) - free (members); - members=(char **) malloc(1*sizeof(char *)); - while ((ptr=strchr(ptr, ','))!=NULL) - { - *ptr='\0'; - ptr++; - members[member_num]=field_begin; - field_begin=ptr; - member_num++; - members=(char **)realloc((void *)members, (member_num+1)*sizeof(char *)); - } - if (*field_begin=='\0') - members[member_num]=NULL; - else - { - members[member_num]=field_begin; - members[member_num+1]=NULL; - } -#endif /* GR_SCALE_DYNAMIC */ - - group.gr_mem=members; - return &group; + 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; + } +#else /* !GR_SCALE_DYNAMIC */ + if (members != NULL) + free(members); + members = (char **) malloc(1 * sizeof(char *)); + + while ((ptr = strchr(ptr, ',')) != NULL) { + *ptr = '\0'; + ptr++; + members[member_num] = field_begin; + field_begin = ptr; + member_num++; + members = + (char **) realloc((void *) members, + + (member_num + 1) * sizeof(char *)); + } + if (*field_begin == '\0') + members[member_num] = NULL; + else { + members[member_num] = field_begin; + members[member_num + 1] = NULL; + } +#endif /* GR_SCALE_DYNAMIC */ + + group.gr_mem = members; + return &group; } |