- /* loop through the whole file */
- cur = 0;
- while (1) {
- count = buf_get_line(buf, bufsize, cur);
-
- strncpy(line, buf + cur, count);
- line[count] = '\0';
- temp = line;
-
- cur += count+1;
- if (cur > bufsize)
- break;
-
- dbg_parse("read '%s'", temp);
-
- /* eat the whitespace at the beginning of the line */
- while (isspace(*temp))
- ++temp;
-
- /* empty line? */
- if ((*temp == '\0') || (*temp == '\n'))
- continue;
-
- /* see if this is a comment */
- if (*temp == COMMENT_CHARACTER)
- continue;
-
- memset(&dev, 0x00, sizeof(dev));
-
- /* parse the line */
- temp2 = strsep(&temp, ":");
- if (!temp2) {
- dbg("cannot parse line '%s'", line);
- continue;
- }
- strfieldcpy(dev.name, temp2);
-
- temp2 = strsep(&temp, ":");
- if (!temp2) {
- dbg("cannot parse line '%s'", line);
- continue;
- }
- strfieldcpy(dev.owner, temp2);
-
- temp2 = strsep(&temp, ":");
- if (!temp2) {
- dbg("cannot parse line '%s'", line);
- continue;
- }
- strfieldcpy(dev.group, temp2);
-
- if (!temp) {
- dbg("cannot parse line '%s'", line);
- continue;
- }
- dev.mode = strtol(temp, NULL, 8);
-
- dbg_parse("name='%s', owner='%s', group='%s', mode=%#o",
- dev.name, dev.owner, dev.group, dev.mode);
-
- retval = add_perm_dev(&dev);
- if (retval) {
- dbg("add_perm_dev returned with error %d", retval);
- goto exit;
- }
- }
-
-exit:
- file_unmap(buf, bufsize);
- return retval;
-}
-
-struct files {
- struct list_head list;
- char name[NAME_SIZE];
-};
-
-/* sort files in lexical order */
-static int file_list_insert(char *filename)
-{
- struct files *loop_file;
- struct files *new_file;
-
- list_for_each_entry(loop_file, &file_list, list) {
- if (strcmp(loop_file->name, filename) > 0) {
- break;
- }
- }
-
- new_file = malloc(sizeof(struct files));
- if (new_file == NULL) {
- dbg("error malloc");
- return -ENOMEM;
- }
-
- strfieldcpy(new_file->name, filename);
- list_add_tail(&new_file->list, &loop_file->list);
- return 0;
-}
-
-/* calls function for file or every file found in directory */
-static int call_foreach_file(int parser (char *f) , char *filename, char *extension)
-{
- struct dirent *ent;
- DIR *dir;
- char *ext;
- char file[NAME_SIZE];
- struct stat stats;
- struct files *loop_file;
- struct files *tmp_file;
-
- /* look if we have a plain file or a directory to scan */
- stat(filename, &stats);