[Dctrl-tools-devel] [SCM] Debian control file query tools branch, master, updated. 2.22.2-16-g672a5ab

Antti-Juhani Kaijanaho ajk at debian.org
Fri Jul 13 21:47:29 UTC 2012


The following commit has been merged in the master branch:
commit f0c4039e025767c0f0c3a9bad6dd51230918183e
Author: Antti-Juhani Kaijanaho <ajk at debian.org>
Date:   Mon Jul 2 21:33:18 2012 +0300

    grep-dctrl: Move is_show_field and backup_field to fieldtrie
    
    This gets rid of the silly bit fiddling macros.
    
    Signed-off-by: Antti-Juhani Kaijanaho <ajk at debian.org>

diff --git a/grep-dctrl/grep-dctrl.c b/grep-dctrl/grep-dctrl.c
index c68f439..dd2e085 100644
--- a/grep-dctrl/grep-dctrl.c
+++ b/grep-dctrl/grep-dctrl.c
@@ -171,13 +171,6 @@ struct arguments {
         size_t show_fields[MAX_FIELDS];
 };
 
-#define IS_SHOW_FIELD(field_app_data) ((field_app_data) & 1)
-#define SET_SHOW_FIELD(field_app_data,val) \
-  ((field_app_data) = ((field_app_data & ~1) | val))
-#define GET_BACKUP_FIELD(field_app_data) (((field_app_data & ~0)) == (unsigned)-1 ? (size_t)-1 : (size_t)(field_app_data) >> 1)
-#define SET_BACKUP_FIELD(field_app_data,val) \
-  ((field_app_data) = (((field_app_data)&1) | (val<<1)))
-
 #define APPTOK(tok) do { apptok(args, (tok)); } while (0)
 
 static void apptok(struct arguments * args, const int tok)
@@ -252,13 +245,13 @@ static error_t parse_opt (int key, char * arg, struct argp_state * state)
                         if (fa == description_attr) {
                                 args->description_selected = true;
                         }
-                        SET_SHOW_FIELD(fa->application_data, true);
+                        fa->is_show_field = true;
 
                         size_t repl_inx = repl == NULL
                                 ? (size_t)(-1)
                                 : fieldtrie_insert(repl)->inx;
 
-                        SET_BACKUP_FIELD(fa->application_data, repl_inx);
+                        fa->backup_field = repl_inx;
 
 			++args->num_show_fields;
 		}
@@ -749,7 +742,7 @@ static void show_field(struct arguments *args,
         struct field_data fds =
                 find_field_wr(para,
                               fa->inx,
-                              GET_BACKUP_FIELD(fa->application_data));
+                              fa->backup_field);
         for (struct field_datum *fd = fds.first; fd != NULL; fd = fd->next) {
                 struct fsaf_read_rv r =
                         fsaf_read(para->common->fp,
@@ -828,7 +821,7 @@ int main (int argc, char * argv[])
 		}
 		message(L_INFORMATIONAL, 0,
 			_("Adding \"Description\" to selected output fields because of -d"));
-                SET_SHOW_FIELD(description_attr->application_data, 1);
+                description_attr->is_show_field = 1;
                 args.show_fields[args.num_show_fields] = description_attr->inx;
 		++args.num_show_fields;
 	}
@@ -925,7 +918,7 @@ int main (int argc, char * argv[])
                                      j++) {
                                         struct field_attr *fa = 
                                                 fieldtrie_get(j);
-                                        if (IS_SHOW_FIELD(fa->application_data)) {
+                                        if (fa->is_show_field) {
                                                 continue;
                                         }
                                         show_field(&args, &para, fa);
@@ -936,8 +929,7 @@ int main (int argc, char * argv[])
                                         size_t inx = args.show_fields[j];
                                         struct field_attr *fa = 
                                                 fieldtrie_get(inx);
-                                        assert(IS_SHOW_FIELD
-                                               (fa->application_data));
+                                        assert(fa->is_show_field);
                                         show_field(&args, &para, fa);
                                 }
                                 if ((args.show_field_name &&
diff --git a/lib/fieldtrie.c b/lib/fieldtrie.c
index c2ecafb..b8d48cc 100644
--- a/lib/fieldtrie.c
+++ b/lib/fieldtrie.c
@@ -60,7 +60,8 @@ struct field_attr *fieldtrie_insert_n(char const * s, size_t slen)
 	*(size_t*)&b->attr.namelen = slen;
         assert(trie.nextfree < sizeof trie.field_map / sizeof *trie.field_map);
 	*(size_t*)&b->attr.inx = trie.nextfree++;
-        b->attr.application_data = 0;
+        b->attr.is_show_field = 0;
+        b->attr.backup_field = (size_t)-1;
 	unsigned char c = tolower((unsigned char)(b->attr.name[0]));
 	b->next = trie.fields[c];
 	trie.fields[c] = b;
diff --git a/lib/fieldtrie.h b/lib/fieldtrie.h
index 946d181..9e13648 100644
--- a/lib/fieldtrie.h
+++ b/lib/fieldtrie.h
@@ -27,7 +27,11 @@ struct field_attr {
 	char const *const name;
 	const size_t namelen;
 	const size_t inx;
-        unsigned application_data;
+        _Bool is_show_field; /* whether this field is (globally) selected
+                                for showing */
+        size_t backup_field; /* index to field whose value should be
+                                used if this field is empty, or
+                                (size_t)-1 */
 };
 
 void fieldtrie_init(void);

-- 
Debian control file query tools



More information about the Dctrl-tools-devel mailing list