diff options
Diffstat (limited to 'src/grt/ghwlib.c')
-rw-r--r-- | src/grt/ghwlib.c | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/src/grt/ghwlib.c b/src/grt/ghwlib.c index 4ac721ee0..bee84687c 100644 --- a/src/grt/ghwlib.c +++ b/src/grt/ghwlib.c @@ -839,6 +839,7 @@ ghw_read_hie (struct ghw_handler *h) h->hie = blk; h->nbr_sigs++; + h->skip_sigs = NULL; h->sigs = (struct ghw_sig *) malloc (h->nbr_sigs * sizeof (struct ghw_sig)); memset (h->sigs, 0, h->nbr_sigs * sizeof (struct ghw_sig)); @@ -1345,28 +1346,44 @@ ghw_get_value (char *buf, int len, union ghw_val *val, union ghw_type *type) } } -static int +static char is_skip_signal (int *signals_to_keep, int nb_signals_to_keep, int signal) { int i; - for (i = 0; i < nb_signals_to_keep; ++i) { - if (signal==signals_to_keep[i]) - return 0; + if (signal == signals_to_keep[i]) + { + return 0; + } } return 1; } void -ghw_filter_values (struct ghw_handler *h, int *signals_to_keep, int nb_signals_to_keep) +ghw_filter_signals (struct ghw_handler *h, + int *signals_to_keep, int nb_signals_to_keep) { int i; - - for (i = 0; i < h->nbr_sigs; ++i) + if (0 < nb_signals_to_keep && 0 != signals_to_keep) + { + if (0 == h->skip_sigs) + { + h->skip_sigs = (char *) malloc (sizeof (char) * h->nbr_sigs); + } + for (i = 0; i < h->nbr_sigs; ++i) + { + h->skip_sigs[i] = is_skip_signal (signals_to_keep, + nb_signals_to_keep, i); + } + } + else { - struct ghw_sig *s = &(h->sigs[i]); - s->skip = is_skip_signal (signals_to_keep, nb_signals_to_keep, i); + if (0 != h->skip_sigs) + { + free (h->skip_sigs); + h->skip_sigs = 0; + } } } @@ -1374,11 +1391,11 @@ void ghw_disp_values (struct ghw_handler *h) { int i; - for (i = 0; i < h->nbr_sigs; i++) { struct ghw_sig *s = &h->sigs[i]; - if (s->type != NULL && !(s->skip)) + int skip = (0 != h->skip_sigs && (0 != h->skip_sigs[i])); + if (s->type != NULL && !skip) { printf ("#%d: ", i); ghw_disp_value (s->val, s->type); @@ -1386,7 +1403,6 @@ ghw_disp_values (struct ghw_handler *h) } } } - int ghw_read_directory (struct ghw_handler *h) { |