summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2013-12-13 18:23:14 +0000
committerpfg <pfg@FreeBSD.org>2013-12-13 18:23:14 +0000
commitc659dd08b2a8d9434dab25b05d9add325bfb6e66 (patch)
treed437da5cb161b4e3669bd7e68db6fca904521251
parent3270502674e0cfc32dca7e8fea47926e7d7570ca (diff)
downloadFreeBSD-src-c659dd08b2a8d9434dab25b05d9add325bfb6e66.zip
FreeBSD-src-c659dd08b2a8d9434dab25b05d9add325bfb6e66.tar.gz
MFC r258115 (partial);
gperf: bring a small update from Apple Developers tools 4.4 From [1] offset.patch Makes use the C offsetof() macro. We are not merging the size_type.patch as it raises some (apparently) bogus warnings and is not really used. [1] http://opensource.apple.com/source/gperf/gperf-9/patches/
-rw-r--r--contrib/gperf/src/output.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/contrib/gperf/src/output.cc b/contrib/gperf/src/output.cc
index 2732057..c5569eb 100644
--- a/contrib/gperf/src/output.cc
+++ b/contrib/gperf/src/output.cc
@@ -1106,9 +1106,7 @@ output_keyword_entry (KeywordExt *temp, int stringpool_index, const char *indent
if (option[TYPE])
printf ("{");
if (option[SHAREDLIB])
- printf ("(int)(long)&((struct %s_t *)0)->%s_str%d",
- option.get_stringpool_name (), option.get_stringpool_name (),
- stringpool_index);
+ printf("offsetof(struct %s_t, %s_str%d)", option.get_stringpool_name (), option.get_stringpool_name (), stringpool_index);
else
output_string (temp->_allchars, temp->_allchars_length);
if (option[TYPE])
@@ -2035,8 +2033,11 @@ Output::output ()
printf ("%s\n", _struct_decl);
}
- if (option[INCLUDE])
+ if (option[INCLUDE]) {
printf ("#include <string.h>\n"); /* Declare strlen(), strcmp(), strncmp(). */
+ if (option[SHAREDLIB])
+ printf("#include <stddef.h>\n"); /* Declare offsetof() */
+ }
if (!option[ENUM])
{
OpenPOWER on IntegriCloud