diff options
Diffstat (limited to 'src/backend/utils/fmgr/fmgr.c')
-rw-r--r-- | src/backend/utils/fmgr/fmgr.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index 544dc840c19..45ca532de24 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.53 2001/06/01 02:41:36 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.54 2001/08/14 22:21:58 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1414,10 +1414,24 @@ fmgr(Oid procedureId,...) Datum Int64GetDatum(int64 X) { +#ifndef INT64_IS_BUSTED int64 *retval = (int64 *) palloc(sizeof(int64)); *retval = X; return PointerGetDatum(retval); +#else /* INT64_IS_BUSTED */ + /* + * On a machine with no 64-bit-int C datatype, sizeof(int64) will not be + * 8, but we want Int64GetDatum to return an 8-byte object anyway, with + * zeroes in the unused bits. This is needed so that, for example, + * hash join of int8 will behave properly. + */ + int64 *retval = (int64 *) palloc(Max(sizeof(int64), 8)); + + MemSet(retval, 0, Max(sizeof(int64), 8)); + *retval = X; + return PointerGetDatum(retval); +#endif /* INT64_IS_BUSTED */ } Datum |