From 52944ff61a455770da451b551ffa0ae10c19ea2e Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 4 Jan 2012 19:27:18 -0500 Subject: [PATCH] Use offsetof() in set_header_word to get field offset 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 Reviewed-by: Derrick Brashear --- src/budb/database.h | 6 +++++- src/kauth/kadatabase.c | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/budb/database.h b/src/budb/database.h index 6a359a7..fdb3da5 100644 --- a/src/budb/database.h +++ b/src/budb/database.h @@ -12,6 +12,10 @@ #include #include "budb.h" +#if !defined(offsetof) +#include /* 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)) diff --git a/src/kauth/kadatabase.c b/src/kauth/kadatabase.c index 8864bc8..9b489a7 100644 --- a/src/kauth/kadatabase.c +++ b/src/kauth/kadatabase.c @@ -21,11 +21,15 @@ #include "kautils.h" #include "kaserver.h" +#if !defined(offsetof) +#include /* 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); -- 1.9.4