From 89887d672aded197a2be95f3d8a6d5bdcb19eb58 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sun, 11 Jul 2010 20:34:43 +0200 Subject: [PATCH] Use offsetof instead of own definition * lisp.h: Include . (OFFSETOF): Don't define. (VECSIZE): Use offsetof instead of OFFSETOF. (PSEUDOVECSIZE): Likewise. * process.c (conv_sockaddr_to_lisp): Likewise. * alloc.c: Don't include . * buffer.h (PER_BUFFER_VAR_OFFSET): Use offsetof. --- src/ChangeLog | 8 ++++++++ src/alloc.c | 4 ---- src/buffer.h | 2 +- src/lisp.h | 12 +++--------- src/process.c | 4 ++-- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 48ba055280c..2e5ea4658dc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,13 @@ 2010-07-11 Andreas Schwab + * lisp.h: Include . + (OFFSETOF): Don't define. + (VECSIZE): Use offsetof instead of OFFSETOF. + (PSEUDOVECSIZE): Likewise. + * process.c (conv_sockaddr_to_lisp): Likewise. + * alloc.c: Don't include . + * buffer.h (PER_BUFFER_VAR_OFFSET): Use offsetof. + * process.c: Remove obsolete comment. 2010-07-11 Chong Yidong diff --git a/src/alloc.c b/src/alloc.c index 02c6022e475..5c860bc1f8e 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -23,10 +23,6 @@ along with GNU Emacs. If not, see . */ #include /* For CHAR_BIT. */ #include -#ifdef STDC_HEADERS -#include /* For offsetof, used by PSEUDOVECSIZE. */ -#endif - #ifdef ALLOC_DEBUG #undef INLINE #endif diff --git a/src/buffer.h b/src/buffer.h index 8e4e5d569ae..339e7d9bb6d 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -954,7 +954,7 @@ extern int last_per_buffer_idx; from the start of a buffer structure. */ #define PER_BUFFER_VAR_OFFSET(VAR) \ - ((char *) &((struct buffer *)0)->VAR - (char *) ((struct buffer *)0)) + offsetof (struct buffer, VAR) /* Return the index of buffer-local variable VAR. Each per-buffer variable has an index > 0 associated with it, except when it always diff --git a/src/lisp.h b/src/lisp.h index d59b75caa2f..656e8fbb624 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see . */ #define EMACS_LISP_H #include +#include /* Use the configure flag --enable-checking[=LIST] to enable various types of run time checks for Lisp objects. */ @@ -784,13 +785,6 @@ struct Lisp_String unsigned char *data; }; -#ifdef offsetof -#define OFFSETOF(type,field) offsetof(type,field) -#else -#define OFFSETOF(type,field) \ - ((int)((char*)&((type*)0)->field - (char*)0)) -#endif - struct Lisp_Vector { EMACS_UINT size; @@ -801,7 +795,7 @@ struct Lisp_Vector /* If a struct is made to look like a vector, this macro returns the length of the shortest vector that would hold that struct. */ #define VECSIZE(type) ((sizeof (type) \ - - OFFSETOF (struct Lisp_Vector, contents[0]) \ + - offsetof (struct Lisp_Vector, contents[0]) \ + sizeof(Lisp_Object) - 1) /* round up */ \ / sizeof (Lisp_Object)) @@ -809,7 +803,7 @@ struct Lisp_Vector at the end and we need to compute the number of Lisp_Object fields (the ones that the GC needs to trace). */ #define PSEUDOVECSIZE(type, nonlispfield) \ - ((OFFSETOF(type, nonlispfield) - OFFSETOF(struct Lisp_Vector, contents[0])) \ + ((offsetof(type, nonlispfield) - offsetof(struct Lisp_Vector, contents[0])) \ / sizeof (Lisp_Object)) /* A char-table is a kind of vectorlike, with contents are like a diff --git a/src/process.c b/src/process.c index ed31657b01c..0fec550ad8f 100644 --- a/src/process.c +++ b/src/process.c @@ -2263,7 +2263,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) /* Workaround for a bug in getsockname on BSD: Names bound to sockets in the UNIX domain are inaccessible; getsockname returns a zero length name. */ - if (len < OFFSETOF (struct sockaddr, sa_family) + sizeof (sa->sa_family)) + if (len < offsetof (struct sockaddr, sa_family) + sizeof (sa->sa_family)) return empty_unibyte_string; switch (sa->sa_family) @@ -2303,7 +2303,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) } #endif default: - len -= OFFSETOF (struct sockaddr, sa_family) + sizeof (sa->sa_family); + len -= offsetof (struct sockaddr, sa_family) + sizeof (sa->sa_family); address = Fcons (make_number (sa->sa_family), Fmake_vector (make_number (len), Qnil)); p = XVECTOR (XCDR (address)); -- 2.39.2