mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Use FLEXIBLE_ARRAY_MEMBER in a bunch more places.
Replace some bogus "x[1]" declarations with "x[FLEXIBLE_ARRAY_MEMBER]". Aside from being more self-documenting, this should help prevent bogus warnings from static code analyzers and perhaps compiler misoptimizations. This patch is just a down payment on eliminating the whole problem, but it gets rid of a lot of easy-to-fix cases. Note that the main problem with doing this is that one must no longer rely on computing sizeof(the containing struct), since the result would be compiler-dependent. Instead use offsetof(struct, lastfield). Autoconf also warns against spelling that offsetof(struct, lastfield[0]). Michael Paquier, review and additional fixes by me.
This commit is contained in:
@ -23,11 +23,10 @@ typedef struct NDBOX
|
||||
unsigned int header;
|
||||
|
||||
/*
|
||||
* Variable length array. The lower left coordinates for each dimension
|
||||
* come first, followed by upper right coordinates unless the point flag
|
||||
* is set.
|
||||
* The lower left coordinates for each dimension come first, followed by
|
||||
* upper right coordinates unless the point flag is set.
|
||||
*/
|
||||
double x[1];
|
||||
double x[FLEXIBLE_ARRAY_MEMBER];
|
||||
} NDBOX;
|
||||
|
||||
#define POINT_BIT 0x80000000
|
||||
@ -41,9 +40,9 @@ typedef struct NDBOX
|
||||
#define LL_COORD(cube, i) ( (cube)->x[i] )
|
||||
#define UR_COORD(cube, i) ( IS_POINT(cube) ? (cube)->x[i] : (cube)->x[(i) + DIM(cube)] )
|
||||
|
||||
#define POINT_SIZE(_dim) (offsetof(NDBOX, x[0]) + sizeof(double)*(_dim))
|
||||
#define CUBE_SIZE(_dim) (offsetof(NDBOX, x[0]) + sizeof(double)*(_dim)*2)
|
||||
#define POINT_SIZE(_dim) (offsetof(NDBOX, x) + sizeof(double)*(_dim))
|
||||
#define CUBE_SIZE(_dim) (offsetof(NDBOX, x) + sizeof(double)*(_dim)*2)
|
||||
|
||||
#define DatumGetNDBOX(x) ((NDBOX*)DatumGetPointer(x))
|
||||
#define PG_GETARG_NDBOX(x) DatumGetNDBOX( PG_DETOAST_DATUM(PG_GETARG_DATUM(x)) )
|
||||
#define DatumGetNDBOX(x) ((NDBOX *) PG_DETOAST_DATUM(x))
|
||||
#define PG_GETARG_NDBOX(x) DatumGetNDBOX(PG_GETARG_DATUM(x))
|
||||
#define PG_RETURN_NDBOX(x) PG_RETURN_POINTER(x)
|
||||
|
Reference in New Issue
Block a user