Use offsetof() in set_header_word to get field offset
authorMarc Dionne <marc.c.dionne@gmail.com>
Thu, 5 Jan 2012 00:27:18 +0000 (19:27 -0500)
committerDerrick Brashear <shadow@dementix.org>
Thu, 5 Jan 2012 02:10:09 +0000 (18:10 -0800)
Use offsetof() to replace a few instances where the same logic is
open coded in set_header_word and inc_header_word macros.  In cases
where the field name involves a variable as an index to an array,
newer gcc gives a sequence point warning.

Change-Id: I43e3d6ef6a63b51003496a1beb72c445a9109615
Reviewed-on: http://gerrit.openafs.org/6513
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>

src/budb/database.h
src/kauth/kadatabase.c

index 6a359a7..fdb3da5 100644 (file)
 #include <lock.h>
 #include "budb.h"
 
+#if !defined(offsetof)
+#include <stddef.h>             /* for definition of offsetof() */
+#endif
+
 typedef afs_uint32 dbadr;
 
 struct hashTable {
@@ -289,7 +293,7 @@ struct memoryDB {           /* in core copies of database structures */
 extern struct memoryDB db;
 
 #define set_header_word(ut,field,value) \
-    dbwrite ((ut), ((char *)&(db.h.field) - (char *)&db.h), \
+    dbwrite ((ut), (offsetof(struct dbHeader, field)), \
             ((db.h.field = (value)), (char *)&(db.h.field)), \
             sizeof(afs_int32))
 
index 8864bc8..9b489a7 100644 (file)
 #include "kautils.h"
 #include "kaserver.h"
 
+#if !defined(offsetof)
+#include <stddef.h>             /* for definition of offsetof() */
+#endif
+
 extern Date cheaderReadTime;   /* time cheader last read in */
 
-#define set_header_word(tt,field,value) kawrite ((tt), ((char *)&(cheader.field) - (char *)&cheader), ((cheader.field = (value)), (char *)&(cheader.field)), sizeof(afs_int32))
+#define set_header_word(tt,field,value) kawrite ((tt), (offsetof(struct kaheader, field)), ((cheader.field = (value)), (char *)&(cheader.field)), sizeof(afs_int32))
 
-#define inc_header_word(tt,field) kawrite ((tt), ((char *)&(cheader.field) - (char *)&cheader), ((cheader.field = (htonl(ntohl(cheader.field)+1))), (char *)&(cheader.field)), sizeof(afs_int32))
+#define inc_header_word(tt,field) kawrite ((tt), (offsetof(struct kaheader, field)), ((cheader.field = (htonl(ntohl(cheader.field)+1))), (char *)&(cheader.field)), sizeof(afs_int32))
 
 static int index_OK(afs_int32);