aboutsummaryrefslogtreecommitdiff
path: root/scripts/parse_kconfig/output.c
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2015-04-11 13:18:07 +0200
committerKarel Kočí <cynerd@email.cz>2015-04-11 13:18:07 +0200
commitdc3c959a5f6d74e91f9a2d997d20e47b07b65628 (patch)
tree6010f883f1b916d004c64b8c88d8938cf10e3dcb /scripts/parse_kconfig/output.c
parentef33b81dfe8fe8b3b161618b4a7f48fc196b105d (diff)
downloadlinux-conf-perf-dc3c959a5f6d74e91f9a2d997d20e47b07b65628.tar.gz
linux-conf-perf-dc3c959a5f6d74e91f9a2d997d20e47b07b65628.tar.bz2
linux-conf-perf-dc3c959a5f6d74e91f9a2d997d20e47b07b65628.zip
Kconfig_parser renamed to parse_kconfig
Diffstat (limited to 'scripts/parse_kconfig/output.c')
-rw-r--r--scripts/parse_kconfig/output.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/parse_kconfig/output.c b/scripts/parse_kconfig/output.c
new file mode 100644
index 0000000..989f4f0
--- /dev/null
+++ b/scripts/parse_kconfig/output.c
@@ -0,0 +1,65 @@
+#include "output.h"
+
+void fprint_rules_cnf(FILE * f, unsigned id, struct cnfexpr *cnf, bool nt) {
+ unsigned i, y;
+ switch (cnf->type) {
+ case CT_FALSE:
+ // Never satisfiable
+ if (!nt)
+ fprintf(f, "-");
+ fprintf(f, "%d\n", id);
+ break;
+ case CT_TRUE:
+ // Always satisfiable
+ break;
+ case CT_EXPR:
+ for (i = 0; i < cnf->size; i++) {
+ if (!nt)
+ fprintf(f, "-");
+ fprintf(f, "%d ", id);
+ for (y = 0; y < cnf->sizes[i] - 1; y++) {
+ fprintf(f, "%d ", cnf->exprs[i][y]);
+ }
+ fprintf(f, "%d ", cnf->exprs[i][cnf->sizes[i] - 1]);
+ fprintf(f, "\n");
+ }
+ break;
+ }
+}
+
+void fprint_rules(struct symlist *sl, char *output) {
+ FILE *f;
+ f = fopen(output, "w");
+ if (f == NULL) {
+ fprintf(stderr, "Can't create file: %s\n", output);
+ return;
+ }
+ size_t i;
+ struct symlist_el *el;
+ for (i = 0; i < sl->pos; i++) {
+ if (sl->array[i].be != NULL) {
+ el = sl->array + i;
+ if (el->be != NULL) {
+ fprint_rules_cnf(f, el->id, el->be, false);
+ }
+ if (el->re_be != NULL) {
+ fprint_rules_cnf(f, el->id, el->re_be, true);
+ }
+ }
+ }
+ fclose(f);
+}
+
+void fprint_symbol_map(struct symlist *sl, char *output) {
+ FILE *f;
+ f = fopen(output, "w");
+ if (f == NULL) {
+ fprintf(stderr, "Can't create file: %s\n", output);
+ return;
+ }
+ size_t i;
+ for (i = 0; i < sl->pos; i++) {
+ fprintf(f, "%d:%s\n", sl->array[i].id, sl->array[i].name);
+ }
+ fclose(f);
+}