static void read_depends(const char *dirname, const char *start_name, struct list_head *list) { char *modules_dep_name; char *line; FILE *modules_dep; int done = 0; if (use_binary_indexes) if (read_depends_file(dirname, start_name, list)) return; nofail_asprintf(&modules_dep_name, "%s/%s", dirname, "modules.dep"); modules_dep = fopen(modules_dep_name, "r"); if (!modules_dep) fatal("Could not load %s: %s\n", modules_dep_name, strerror(errno)); /* Stop at first line, as we can have duplicates (eg. symlinks from boot/ */ while (!done && (line = getline_wrapped(modules_dep, NULL)) != NULL) { done = add_modules_dep_line(line, start_name, list, dirname); free(line); } fclose(modules_dep); free(modules_dep_name); }
static void write_index(const char *filename) { struct index_node *index; char *line; FILE *cfile; cfile = fopen(filename, "w"); if (!cfile) fatal("Could not open %s for writing: %s\n", filename, strerror(errno)); index = index_create(); while((line = getline_wrapped(stdin, NULL))) { index_insert(index, line); free(line); } index_write(index, cfile); index_destroy(index); fclose(cfile); }
/* * Take an fd and own it. It will be closed on return. filename is used only * for debug messages */ static int kmod_config_parse(struct kmod_config *config, int fd, const char *filename) { struct kmod_ctx *ctx = config->ctx; char *line; FILE *fp; unsigned int linenum = 0; int err; fp = fdopen(fd, "r"); if (fp == NULL) { err = -errno; ERR(config->ctx, "fd %d: %m\n", fd); close(fd); return err; } while ((line = getline_wrapped(fp, &linenum)) != NULL) { char *cmd, *saveptr; if (line[0] == '\0' || line[0] == '#') goto done_next; cmd = strtok_r(line, "\t ", &saveptr); if (cmd == NULL) goto done_next; if (streq(cmd, "alias")) { char *alias = strtok_r(NULL, "\t ", &saveptr); char *modname = strtok_r(NULL, "\t ", &saveptr); if (alias == NULL || modname == NULL) goto syntax_error; kmod_config_add_alias(config, underscores(ctx, alias), underscores(ctx, modname)); } else if (streq(cmd, "blacklist")) { char *modname = strtok_r(NULL, "\t ", &saveptr); if (modname == NULL) goto syntax_error; kmod_config_add_blacklist(config, underscores(ctx, modname)); } else if (streq(cmd, "options")) { char *modname = strtok_r(NULL, "\t ", &saveptr); char *options = strtok_r(NULL, "\0", &saveptr); if (modname == NULL || options == NULL) goto syntax_error; kmod_config_add_options(config, underscores(ctx, modname), options); } else if (streq(cmd, "install")) { char *modname = strtok_r(NULL, "\t ", &saveptr); char *installcmd = strtok_r(NULL, "\0", &saveptr); if (modname == NULL || installcmd == NULL) goto syntax_error; kmod_config_add_command(config, underscores(ctx, modname), installcmd, cmd, &config->install_commands); } else if (streq(cmd, "remove")) { char *modname = strtok_r(NULL, "\t ", &saveptr); char *removecmd = strtok_r(NULL, "\0", &saveptr); if (modname == NULL || removecmd == NULL) goto syntax_error; kmod_config_add_command(config, underscores(ctx, modname), removecmd, cmd, &config->remove_commands); } else if (streq(cmd, "softdep")) { char *modname = strtok_r(NULL, "\t ", &saveptr); char *softdeps = strtok_r(NULL, "\0", &saveptr); if (modname == NULL || softdeps == NULL) goto syntax_error; kmod_config_add_softdep(config, underscores(ctx, modname), softdeps); } else if (streq(cmd, "include") || streq(cmd, "config")) { ERR(ctx, "%s: command %s is deprecated and not parsed anymore\n", filename, cmd); } else { syntax_error: ERR(ctx, "%s line %u: ignoring bad line starting with '%s'\n", filename, linenum, cmd); } done_next: free(line); } fclose(fp); return 0; }