output: save and reuse output helper results

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2017-11-11 08:26:57 +00:00
parent d5ae2a80c0
commit 4fc4bcd083
No known key found for this signature in database
GPG key ID: A9553245FDE9B739

View file

@ -54,6 +54,7 @@
struct expl { struct expl {
struct range_t *range_p; struct range_t *range_p;
struct shared_network_t *shnet_p; struct shared_network_t *shnet_p;
struct output_helper_t oh;
int current; int current;
}; };
@ -73,7 +74,6 @@ static int must_put_range(void *closure, const char *name, int escape
__attribute__ ((unused)), FILE *file) __attribute__ ((unused)), FILE *file)
{ {
struct expl *e = closure; struct expl *e = closure;
struct output_helper_t oh;
if (!strcmp(name, "location")) { if (!strcmp(name, "location")) {
fprintf(file, "%s", e->range_p->shared_net->name); fprintf(file, "%s", e->range_p->shared_net->name);
@ -100,25 +100,24 @@ static int must_put_range(void *closure, const char *name, int escape
fprintf(file, "%g", e->range_p->touched); fprintf(file, "%g", e->range_p->touched);
return 0; return 0;
} }
range_output_helper(&oh, e->range_p);
if (!strcmp(name, "defined")) { if (!strcmp(name, "defined")) {
fprintf(file, "%g", oh.range_size); fprintf(file, "%g", e->oh.range_size);
return 0; return 0;
} }
if (!strcmp(name, "free")) { if (!strcmp(name, "free")) {
fprintf(file, "%g", oh.range_size - e->range_p->count); fprintf(file, "%g", e->oh.range_size - e->range_p->count);
return 0; return 0;
} }
if (!strcmp(name, "percent")) { if (!strcmp(name, "percent")) {
fprintf(file, "%g", oh.percent); fprintf(file, "%g", e->oh.percent);
return 0; return 0;
} }
if (!strcmp(name, "touch_count")) { if (!strcmp(name, "touch_count")) {
fprintf(file, "%g", oh.tc); fprintf(file, "%g", e->oh.tc);
return 0; return 0;
} }
if (!strcmp(name, "touch_percent")) { if (!strcmp(name, "touch_percent")) {
fprintf(file, "%g", oh.tcp); fprintf(file, "%g", e->oh.tcp);
return 0; return 0;
} }
if (config.backups_found == 1) { if (config.backups_found == 1) {
@ -127,12 +126,12 @@ static int must_put_range(void *closure, const char *name, int escape
return 0; return 0;
} }
if (!strcmp(name, "backup_percent")) { if (!strcmp(name, "backup_percent")) {
fprintf(file, "%g", oh.bup); fprintf(file, "%g", e->oh.bup);
return 0; return 0;
} }
} }
if (!strcmp(name, "status")) { if (!strcmp(name, "status")) {
fprintf(file, "%d", oh.status); fprintf(file, "%d", e->oh.status);
return 0; return 0;
} }
return 0; return 0;
@ -142,7 +141,6 @@ static int must_put_shnet(void *closure, const char *name, int escape
__attribute__ ((unused)), FILE *file) __attribute__ ((unused)), FILE *file)
{ {
struct expl *e = closure; struct expl *e = closure;
struct output_helper_t oh;
if (!strcmp(name, "location")) { if (!strcmp(name, "location")) {
fprintf(file, "%s", e->shnet_p->name); fprintf(file, "%s", e->shnet_p->name);
@ -160,21 +158,20 @@ static int must_put_shnet(void *closure, const char *name, int escape
fprintf(file, "%g", e->shnet_p->touched); fprintf(file, "%g", e->shnet_p->touched);
return 0; return 0;
} }
shnet_output_helper(&oh, e->shnet_p);
if (!strcmp(name, "free")) { if (!strcmp(name, "free")) {
fprintf(file, "%g", e->shnet_p->available - e->shnet_p->used); fprintf(file, "%g", e->shnet_p->available - e->shnet_p->used);
return 0; return 0;
} }
if (!strcmp(name, "percent")) { if (!strcmp(name, "percent")) {
fprintf(file, "%g", oh.percent); fprintf(file, "%g", e->oh.percent);
return 0; return 0;
} }
if (!strcmp(name, "touch_count")) { if (!strcmp(name, "touch_count")) {
fprintf(file, "%g", oh.tc); fprintf(file, "%g", e->oh.tc);
return 0; return 0;
} }
if (!strcmp(name, "touch_percent")) { if (!strcmp(name, "touch_percent")) {
fprintf(file, "%g", oh.tcp); fprintf(file, "%g", e->oh.tcp);
return 0; return 0;
} }
if (config.backups_found == 1) { if (config.backups_found == 1) {
@ -183,12 +180,12 @@ static int must_put_shnet(void *closure, const char *name, int escape
return 0; return 0;
} }
if (!strcmp(name, "backup_percent")) { if (!strcmp(name, "backup_percent")) {
fprintf(file, "%g", oh.bup); fprintf(file, "%g", e->oh.bup);
return 0; return 0;
} }
} }
if (!strcmp(name, "status")) { if (!strcmp(name, "status")) {
fprintf(file, "%d", oh.status); fprintf(file, "%d", e->oh.status);
return 0; return 0;
} }
return 0; return 0;
@ -197,30 +194,28 @@ static int must_put_shnet(void *closure, const char *name, int escape
static int must_next_range(void *closure) static int must_next_range(void *closure)
{ {
struct expl *e = closure; struct expl *e = closure;
struct output_helper_t oh;
do { do {
e->range_p++; e->range_p++;
e->current--; e->current--;
if (e->current <= 0) if (e->current <= 0)
return 0; return 0;
range_output_helper(&oh, e->range_p); range_output_helper(&e->oh, e->range_p);
} while (config.skip_ok && oh.status == STATUS_OK); } while (config.skip_ok && e->oh.status == STATUS_OK);
return 1; return 1;
} }
static int must_next_shnet(void *closure) static int must_next_shnet(void *closure)
{ {
struct expl *e = closure; struct expl *e = closure;
struct output_helper_t oh;
do { do {
e->shnet_p++; e->shnet_p++;
e->current--; e->current--;
if (e->current <= 0) if (e->current <= 0)
return 0; return 0;
shnet_output_helper(&oh, e->shnet_p); shnet_output_helper(&e->oh, e->shnet_p);
} while (config.skip_ok && oh.status == STATUS_OK); } while (config.skip_ok && e->oh.status == STATUS_OK);
return 1; return 1;
} }
@ -248,6 +243,7 @@ static int must_enter(void *closure, const char *name)
itf.put = must_put_shnet; itf.put = must_put_shnet;
itf.next = must_next_shnet; itf.next = must_next_shnet;
e->shnet_p = shared_networks; e->shnet_p = shared_networks;
shnet_output_helper(&e->oh, e->shnet_p);
e->current = 1; e->current = 1;
return 1; return 1;
} }