Revert the behavior of inet/cidr functions to not unpack the arguments.
I forgot to change the functions to use the PG_GETARG_INET_PP() macro, when I changed DatumGetInetP() to unpack the datum, like Datum*P macros usually do. Also, I screwed up the definition of the PG_GETARG_INET_PP() macro, and didn't notice because it wasn't used. This fixes the memory leak when sorting inet values, as reported by Jochen Erwied and debugged by Andres Freund. Backpatch to 8.3, like the previous patch that broke it.
This commit is contained in:
parent
8ec76895b7
commit
c1a03230b7
@ -172,7 +172,7 @@ network_out(inet *src, bool is_cidr)
|
|||||||
Datum
|
Datum
|
||||||
inet_out(PG_FUNCTION_ARGS)
|
inet_out(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *src = PG_GETARG_INET_P(0);
|
inet *src = PG_GETARG_INET_PP(0);
|
||||||
|
|
||||||
PG_RETURN_CSTRING(network_out(src, false));
|
PG_RETURN_CSTRING(network_out(src, false));
|
||||||
}
|
}
|
||||||
@ -180,7 +180,7 @@ inet_out(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
cidr_out(PG_FUNCTION_ARGS)
|
cidr_out(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *src = PG_GETARG_INET_P(0);
|
inet *src = PG_GETARG_INET_PP(0);
|
||||||
|
|
||||||
PG_RETURN_CSTRING(network_out(src, true));
|
PG_RETURN_CSTRING(network_out(src, true));
|
||||||
}
|
}
|
||||||
@ -299,7 +299,7 @@ network_send(inet *addr, bool is_cidr)
|
|||||||
Datum
|
Datum
|
||||||
inet_send(PG_FUNCTION_ARGS)
|
inet_send(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *addr = PG_GETARG_INET_P(0);
|
inet *addr = PG_GETARG_INET_PP(0);
|
||||||
|
|
||||||
PG_RETURN_BYTEA_P(network_send(addr, false));
|
PG_RETURN_BYTEA_P(network_send(addr, false));
|
||||||
}
|
}
|
||||||
@ -307,7 +307,7 @@ inet_send(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
cidr_send(PG_FUNCTION_ARGS)
|
cidr_send(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *addr = PG_GETARG_INET_P(0);
|
inet *addr = PG_GETARG_INET_PP(0);
|
||||||
|
|
||||||
PG_RETURN_BYTEA_P(network_send(addr, true));
|
PG_RETURN_BYTEA_P(network_send(addr, true));
|
||||||
}
|
}
|
||||||
@ -316,7 +316,7 @@ cidr_send(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inet_to_cidr(PG_FUNCTION_ARGS)
|
inet_to_cidr(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *src = PG_GETARG_INET_P(0);
|
inet *src = PG_GETARG_INET_PP(0);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
int bits;
|
int bits;
|
||||||
int byte;
|
int byte;
|
||||||
@ -356,7 +356,7 @@ inet_to_cidr(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inet_set_masklen(PG_FUNCTION_ARGS)
|
inet_set_masklen(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *src = PG_GETARG_INET_P(0);
|
inet *src = PG_GETARG_INET_PP(0);
|
||||||
int bits = PG_GETARG_INT32(1);
|
int bits = PG_GETARG_INT32(1);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
|
|
||||||
@ -380,7 +380,7 @@ inet_set_masklen(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
cidr_set_masklen(PG_FUNCTION_ARGS)
|
cidr_set_masklen(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *src = PG_GETARG_INET_P(0);
|
inet *src = PG_GETARG_INET_PP(0);
|
||||||
int bits = PG_GETARG_INT32(1);
|
int bits = PG_GETARG_INT32(1);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
int byte;
|
int byte;
|
||||||
@ -455,8 +455,8 @@ network_cmp_internal(inet *a1, inet *a2)
|
|||||||
Datum
|
Datum
|
||||||
network_cmp(PG_FUNCTION_ARGS)
|
network_cmp(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_INT32(network_cmp_internal(a1, a2));
|
PG_RETURN_INT32(network_cmp_internal(a1, a2));
|
||||||
}
|
}
|
||||||
@ -467,8 +467,8 @@ network_cmp(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_lt(PG_FUNCTION_ARGS)
|
network_lt(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_BOOL(network_cmp_internal(a1, a2) < 0);
|
PG_RETURN_BOOL(network_cmp_internal(a1, a2) < 0);
|
||||||
}
|
}
|
||||||
@ -476,8 +476,8 @@ network_lt(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_le(PG_FUNCTION_ARGS)
|
network_le(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_BOOL(network_cmp_internal(a1, a2) <= 0);
|
PG_RETURN_BOOL(network_cmp_internal(a1, a2) <= 0);
|
||||||
}
|
}
|
||||||
@ -485,8 +485,8 @@ network_le(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_eq(PG_FUNCTION_ARGS)
|
network_eq(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_BOOL(network_cmp_internal(a1, a2) == 0);
|
PG_RETURN_BOOL(network_cmp_internal(a1, a2) == 0);
|
||||||
}
|
}
|
||||||
@ -494,8 +494,8 @@ network_eq(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_ge(PG_FUNCTION_ARGS)
|
network_ge(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_BOOL(network_cmp_internal(a1, a2) >= 0);
|
PG_RETURN_BOOL(network_cmp_internal(a1, a2) >= 0);
|
||||||
}
|
}
|
||||||
@ -503,8 +503,8 @@ network_ge(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_gt(PG_FUNCTION_ARGS)
|
network_gt(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_BOOL(network_cmp_internal(a1, a2) > 0);
|
PG_RETURN_BOOL(network_cmp_internal(a1, a2) > 0);
|
||||||
}
|
}
|
||||||
@ -512,8 +512,8 @@ network_gt(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_ne(PG_FUNCTION_ARGS)
|
network_ne(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
PG_RETURN_BOOL(network_cmp_internal(a1, a2) != 0);
|
PG_RETURN_BOOL(network_cmp_internal(a1, a2) != 0);
|
||||||
}
|
}
|
||||||
@ -524,7 +524,7 @@ network_ne(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
hashinet(PG_FUNCTION_ARGS)
|
hashinet(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *addr = PG_GETARG_INET_P(0);
|
inet *addr = PG_GETARG_INET_PP(0);
|
||||||
int addrsize = ip_addrsize(addr);
|
int addrsize = ip_addrsize(addr);
|
||||||
|
|
||||||
/* XXX this assumes there are no pad bytes in the data structure */
|
/* XXX this assumes there are no pad bytes in the data structure */
|
||||||
@ -537,8 +537,8 @@ hashinet(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_sub(PG_FUNCTION_ARGS)
|
network_sub(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
if (ip_family(a1) == ip_family(a2))
|
if (ip_family(a1) == ip_family(a2))
|
||||||
{
|
{
|
||||||
@ -552,8 +552,8 @@ network_sub(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_subeq(PG_FUNCTION_ARGS)
|
network_subeq(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
if (ip_family(a1) == ip_family(a2))
|
if (ip_family(a1) == ip_family(a2))
|
||||||
{
|
{
|
||||||
@ -567,8 +567,8 @@ network_subeq(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_sup(PG_FUNCTION_ARGS)
|
network_sup(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
if (ip_family(a1) == ip_family(a2))
|
if (ip_family(a1) == ip_family(a2))
|
||||||
{
|
{
|
||||||
@ -582,8 +582,8 @@ network_sup(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_supeq(PG_FUNCTION_ARGS)
|
network_supeq(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *a1 = PG_GETARG_INET_P(0);
|
inet *a1 = PG_GETARG_INET_PP(0);
|
||||||
inet *a2 = PG_GETARG_INET_P(1);
|
inet *a2 = PG_GETARG_INET_PP(1);
|
||||||
|
|
||||||
if (ip_family(a1) == ip_family(a2))
|
if (ip_family(a1) == ip_family(a2))
|
||||||
{
|
{
|
||||||
@ -600,7 +600,7 @@ network_supeq(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_host(PG_FUNCTION_ARGS)
|
network_host(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
text *ret;
|
text *ret;
|
||||||
int len;
|
int len;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
@ -633,7 +633,7 @@ network_host(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_show(PG_FUNCTION_ARGS)
|
network_show(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
text *ret;
|
text *ret;
|
||||||
int len;
|
int len;
|
||||||
char tmp[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255/128")];
|
char tmp[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255/128")];
|
||||||
@ -662,7 +662,7 @@ network_show(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inet_abbrev(PG_FUNCTION_ARGS)
|
inet_abbrev(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
text *ret;
|
text *ret;
|
||||||
char *dst;
|
char *dst;
|
||||||
int len;
|
int len;
|
||||||
@ -687,7 +687,7 @@ inet_abbrev(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
cidr_abbrev(PG_FUNCTION_ARGS)
|
cidr_abbrev(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
text *ret;
|
text *ret;
|
||||||
char *dst;
|
char *dst;
|
||||||
int len;
|
int len;
|
||||||
@ -712,7 +712,7 @@ cidr_abbrev(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_masklen(PG_FUNCTION_ARGS)
|
network_masklen(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
|
|
||||||
PG_RETURN_INT32(ip_bits(ip));
|
PG_RETURN_INT32(ip_bits(ip));
|
||||||
}
|
}
|
||||||
@ -720,7 +720,7 @@ network_masklen(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_family(PG_FUNCTION_ARGS)
|
network_family(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
|
|
||||||
switch (ip_family(ip))
|
switch (ip_family(ip))
|
||||||
{
|
{
|
||||||
@ -739,7 +739,7 @@ network_family(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_broadcast(PG_FUNCTION_ARGS)
|
network_broadcast(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
int byte;
|
int byte;
|
||||||
int bits;
|
int bits;
|
||||||
@ -788,7 +788,7 @@ network_broadcast(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_network(PG_FUNCTION_ARGS)
|
network_network(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
int byte;
|
int byte;
|
||||||
int bits;
|
int bits;
|
||||||
@ -831,7 +831,7 @@ network_network(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_netmask(PG_FUNCTION_ARGS)
|
network_netmask(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
int byte;
|
int byte;
|
||||||
int bits;
|
int bits;
|
||||||
@ -872,7 +872,7 @@ network_netmask(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
network_hostmask(PG_FUNCTION_ARGS)
|
network_hostmask(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
int byte;
|
int byte;
|
||||||
int bits;
|
int bits;
|
||||||
@ -1239,7 +1239,7 @@ inet_server_port(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inetnot(PG_FUNCTION_ARGS)
|
inetnot(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
|
|
||||||
dst = (inet *) palloc0(sizeof(inet));
|
dst = (inet *) palloc0(sizeof(inet));
|
||||||
@ -1264,8 +1264,8 @@ inetnot(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inetand(PG_FUNCTION_ARGS)
|
inetand(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *ip2 = PG_GETARG_INET_P(1);
|
inet *ip2 = PG_GETARG_INET_PP(1);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
|
|
||||||
dst = (inet *) palloc0(sizeof(inet));
|
dst = (inet *) palloc0(sizeof(inet));
|
||||||
@ -1296,8 +1296,8 @@ inetand(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inetor(PG_FUNCTION_ARGS)
|
inetor(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *ip2 = PG_GETARG_INET_P(1);
|
inet *ip2 = PG_GETARG_INET_PP(1);
|
||||||
inet *dst;
|
inet *dst;
|
||||||
|
|
||||||
dst = (inet *) palloc0(sizeof(inet));
|
dst = (inet *) palloc0(sizeof(inet));
|
||||||
@ -1380,7 +1380,7 @@ internal_inetpl(inet *ip, int64 addend)
|
|||||||
Datum
|
Datum
|
||||||
inetpl(PG_FUNCTION_ARGS)
|
inetpl(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
int64 addend = PG_GETARG_INT64(1);
|
int64 addend = PG_GETARG_INT64(1);
|
||||||
|
|
||||||
PG_RETURN_INET_P(internal_inetpl(ip, addend));
|
PG_RETURN_INET_P(internal_inetpl(ip, addend));
|
||||||
@ -1390,7 +1390,7 @@ inetpl(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inetmi_int8(PG_FUNCTION_ARGS)
|
inetmi_int8(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
int64 addend = PG_GETARG_INT64(1);
|
int64 addend = PG_GETARG_INT64(1);
|
||||||
|
|
||||||
PG_RETURN_INET_P(internal_inetpl(ip, -addend));
|
PG_RETURN_INET_P(internal_inetpl(ip, -addend));
|
||||||
@ -1400,8 +1400,8 @@ inetmi_int8(PG_FUNCTION_ARGS)
|
|||||||
Datum
|
Datum
|
||||||
inetmi(PG_FUNCTION_ARGS)
|
inetmi(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
inet *ip = PG_GETARG_INET_P(0);
|
inet *ip = PG_GETARG_INET_PP(0);
|
||||||
inet *ip2 = PG_GETARG_INET_P(1);
|
inet *ip2 = PG_GETARG_INET_PP(1);
|
||||||
int64 res = 0;
|
int64 res = 0;
|
||||||
|
|
||||||
if (ip_family(ip) != ip_family(ip2))
|
if (ip_family(ip) != ip_family(ip2))
|
||||||
|
@ -74,7 +74,7 @@ typedef struct macaddr
|
|||||||
#define DatumGetInetPP(X) ((inet *) PG_DETOAST_DATUM_PACKED(X))
|
#define DatumGetInetPP(X) ((inet *) PG_DETOAST_DATUM_PACKED(X))
|
||||||
#define InetPGetDatum(X) PointerGetDatum(X)
|
#define InetPGetDatum(X) PointerGetDatum(X)
|
||||||
#define PG_GETARG_INET_P(n) DatumGetInetP(PG_GETARG_DATUM(n))
|
#define PG_GETARG_INET_P(n) DatumGetInetP(PG_GETARG_DATUM(n))
|
||||||
#define PG_GETARG_INET_PP(n) DatumGetInetP(PG_GETARG_DATUM_PACKED(n))
|
#define PG_GETARG_INET_PP(n) DatumGetInetPP(PG_GETARG_DATUM(n))
|
||||||
#define PG_RETURN_INET_P(x) return InetPGetDatum(x)
|
#define PG_RETURN_INET_P(x) return InetPGetDatum(x)
|
||||||
/* macaddr is a fixed-length pass-by-reference datatype */
|
/* macaddr is a fixed-length pass-by-reference datatype */
|
||||||
#define DatumGetMacaddrP(X) ((macaddr *) DatumGetPointer(X))
|
#define DatumGetMacaddrP(X) ((macaddr *) DatumGetPointer(X))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user