void free_config (struct config * conf) { if (!conf) return; if (conf->dev) FREE(conf->dev); if (conf->udev) udev_unref(conf->udev); if (conf->multipath_dir) FREE(conf->multipath_dir); if (conf->selector) FREE(conf->selector); if (conf->uid_attribute) FREE(conf->uid_attribute); if (conf->features) FREE(conf->features); if (conf->hwhandler) FREE(conf->hwhandler); if (conf->bindings_file) FREE(conf->bindings_file); if (conf->wwids_file) FREE(conf->wwids_file); if (conf->prio_name) FREE(conf->prio_name); if (conf->alias_prefix) FREE(conf->alias_prefix); if (conf->prio_args) FREE(conf->prio_args); if (conf->checker_name) FREE(conf->checker_name); if (conf->reservation_key) FREE(conf->reservation_key); free_blacklist(conf->blist_devnode); free_blacklist(conf->blist_wwid); free_blacklist_device(conf->blist_device); free_blacklist(conf->elist_devnode); free_blacklist(conf->elist_wwid); free_blacklist_device(conf->elist_device); free_mptable(conf->mptable); free_hwtable(conf->hwtable); free_keywords(conf->keywords); FREE(conf); }
static void free_keywords(vector_t *keywords_vec) { keyword_t *keyword_vec; unsigned int i; for (i = 0; i < vector_size(keywords_vec); i++) { keyword_vec = vector_slot(keywords_vec, i); if (keyword_vec->sub) free_keywords(keyword_vec->sub); FREE(keyword_vec); } vector_free(keywords_vec); }
void free_keywords(vector keywords) { struct keyword *keyword; int i; if (!keywords) return; for (i = 0; i < VECTOR_SIZE(keywords); i++) { keyword = VECTOR_SLOT(keywords, i); if (keyword->sub) free_keywords(keyword->sub); FREE(keyword); } vector_free(keywords); }
/* Data initialization */ void init_data(char *conf_file, vector_t * (*init_keywords) (void)) { /* Init Keywords structure */ keywords = vector_alloc(); (*init_keywords) (); #if 0 /* Dump configuration */ vector_dump(keywords); dump_keywords(keywords, 0); #endif /* Stream handling */ current_keywords = keywords; read_conf_file((conf_file) ? conf_file : CONF); free_keywords(keywords); }
/* Data initialization */ void init_data(const char *conf_file, vector_t * (*init_keywords) (void)) { /* Init Keywords structure */ keywords = vector_alloc(); (*init_keywords) (); #if DUMP_KEYWORDS /* Dump configuration */ dump_keywords(keywords, 0, NULL); #endif /* Stream handling */ current_keywords = keywords; register_null_strvec_handler(null_strvec); read_conf_file(conf_file); unregister_null_strvec_handler(); free_keywords(keywords); clear_rt_names(); }
int main(int argc, char **argv) { char **infiles; char *outfile; int nfiles; int nogo; int errs; int reportcols; int debug; /* * Set up initial (default) parameters. */ infiles = mknewa(char *, argc); outfile = NULL; nfiles = 0; nogo = errs = FALSE; reportcols = 0; debug = 0; if (argc == 1) { usage(); exit(EXIT_SUCCESS); } /* * Parse command line arguments. */ while (--argc) { char *p = *++argv; if (*p == '-') { /* * An option. */ while (p && *++p) { char c = *p; switch (c) { case '-': /* * Long option. */ { char *opt, *val; opt = p++; /* opt will have _one_ leading - */ while (*p && *p != '=') p++; /* find end of option */ if (*p == '=') { *p++ = '\0'; val = p; } else val = NULL; if (!strcmp(opt, "-version")) { showversion(); nogo = TRUE; } else if (!strcmp(opt, "-licence") || !strcmp(opt, "-license")) { licence(); nogo = TRUE; } else if (!strcmp(opt, "-output")) { if (!val) errs = TRUE, error(err_optnoarg, opt); else outfile = val; } else if (!strcmp(opt, "-precise")) { reportcols = 1; } else { errs = TRUE, error(err_nosuchopt, opt); } } p = NULL; break; case 'V': case 'L': case 'P': case 'd': /* * Option requiring no parameter. */ switch (c) { case 'V': showversion(); nogo = TRUE; break; case 'L': licence(); nogo = TRUE; break; case 'P': reportcols = 1; break; case 'd': debug = TRUE; break; } break; case 'o': /* * Option requiring parameter. */ p++; if (!*p && argc > 1) --argc, p = *++argv; else if (!*p) { char opt[2]; opt[0] = c; opt[1] = '\0'; errs = TRUE, error(err_optnoarg, opt); } /* * Now c is the option and p is the parameter. */ switch (c) { case 'o': outfile = p; break; } p = NULL; /* prevent continued processing */ break; default: /* * Unrecognised option. */ { char opt[2]; opt[0] = c; opt[1] = '\0'; errs = TRUE, error(err_nosuchopt, opt); } } } } else { /* * A non-option argument. */ infiles[nfiles++] = p; } } if (errs) exit(EXIT_FAILURE); if (nogo) exit(EXIT_SUCCESS); /* * Do the work. */ if (nfiles == 0) { error(err_noinput); usage(); exit(EXIT_FAILURE); } { input in; paragraph *sourceform, *p; indexdata *idx; keywordlist *keywords; in.filenames = infiles; in.nfiles = nfiles; in.currfp = NULL; in.currindex = 0; in.npushback = in.pushbacksize = 0; in.pushback = NULL; in.reportcols = reportcols; in.stack = NULL; idx = make_index(); sourceform = read_input(&in, idx); if (!sourceform) exit(EXIT_FAILURE); sfree(in.pushback); mark_attr_ends(sourceform); sfree(infiles); keywords = get_keywords(sourceform); if (!keywords) exit(EXIT_FAILURE); gen_citations(sourceform, keywords); subst_keywords(sourceform, keywords); for (p = sourceform; p; p = p->next) if (p->type == para_IM) index_merge(idx, TRUE, p->keyword, p->words); build_index(idx); if (debug) { index_debug(idx); dbg_prtkws(keywords); dbg_prtsource(sourceform); } xhtml_backend(sourceform, keywords, idx); free_para_list(sourceform); free_keywords(keywords); cleanup_index(idx); } return 0; }