0
0
mirror of https://github.com/vim/vim.git synced 2025-10-01 04:54:07 -04:00

patch 7.4.2062

Problem:    Using dummy variable to compute struct member offset.
Solution:   Use offsetof().
This commit is contained in:
Bram Moolenaar
2016-07-17 20:37:43 +02:00
parent e87e6dddc2
commit 840268400d
5 changed files with 17 additions and 14 deletions

View File

@@ -1649,18 +1649,6 @@ EXTERN int did_add_timer INIT(= FALSE);
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
EXTERN time_T time_for_testing INIT(= 0); EXTERN time_T time_for_testing INIT(= 0);
/*
* In a hashtab item "hi_key" points to "di_key" in a dictitem.
* This avoids adding a pointer to the hashtab item.
* DI2HIKEY() converts a dictitem pointer to a hashitem key pointer.
* HIKEY2DI() converts a hashitem key pointer to a dictitem pointer.
* HI2DI() converts a hashitem pointer to a dictitem pointer.
*/
EXTERN dictitem_T dumdi;
# define DI2HIKEY(di) ((di)->di_key)
# define HIKEY2DI(p) ((dictitem_T *)(p - (dumdi.di_key - (char_u *)&dumdi)))
# define HI2DI(hi) HIKEY2DI((hi)->hi_key)
/* Abort conversion to string after a recursion error. */ /* Abort conversion to string after a recursion error. */
EXTERN int did_echo_string_emsg INIT(= FALSE); EXTERN int did_echo_string_emsg INIT(= FALSE);
#endif #endif

View File

@@ -353,3 +353,14 @@
# endif # endif
# endif # endif
#endif #endif
/*
* In a hashtab item "hi_key" points to "di_key" in a dictitem.
* This avoids adding a pointer to the hashtab item.
* DI2HIKEY() converts a dictitem pointer to a hashitem key pointer.
* HIKEY2DI() converts a hashitem key pointer to a dictitem pointer.
* HI2DI() converts a hashitem pointer to a dictitem pointer.
*/
# define DI2HIKEY(di) ((di)->di_key)
# define HIKEY2DI(p) ((dictitem_T *)(p - offsetof(dictitem_T, di_key)))
# define HI2DI(hi) HIKEY2DI((hi)->hi_key)

View File

@@ -600,8 +600,7 @@ typedef struct wordcount_S
char_u wc_word[1]; /* word, actually longer */ char_u wc_word[1]; /* word, actually longer */
} wordcount_T; } wordcount_T;
static wordcount_T dumwc; #define WC_KEY_OFF offsetof(wordcount_T, wc_word)
#define WC_KEY_OFF (unsigned)(dumwc.wc_word - (char_u *)&dumwc)
#define HI2WC(hi) ((wordcount_T *)((hi)->hi_key - WC_KEY_OFF)) #define HI2WC(hi) ((wordcount_T *)((hi)->hi_key - WC_KEY_OFF))
#define MAXWORDCOUNT 0xffff #define MAXWORDCOUNT 0xffff

View File

@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2062,
/**/ /**/
2061, 2061,
/**/ /**/

View File

@@ -505,6 +505,9 @@ typedef unsigned long u8char_T; /* long should be 32 bits or more */
#endif #endif
#include <stdarg.h> #include <stdarg.h>
/* for offsetof() */
#include <stddef.h>
#if defined(HAVE_SYS_SELECT_H) && \ #if defined(HAVE_SYS_SELECT_H) && \
(!defined(HAVE_SYS_TIME_H) || defined(SYS_SELECT_WITH_SYS_TIME)) (!defined(HAVE_SYS_TIME_H) || defined(SYS_SELECT_WITH_SYS_TIME))
# include <sys/select.h> # include <sys/select.h>