2018-09-09 18:23:23 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* link-canary.c
|
|
|
|
* Detect whether src/common functions came from frontend or backend.
|
|
|
|
*
|
2021-01-02 19:06:25 +01:00
|
|
|
* Copyright (c) 2018-2021, PostgreSQL Global Development Group
|
2018-09-09 18:23:23 +02:00
|
|
|
*
|
|
|
|
* IDENTIFICATION
|
|
|
|
* src/common/link-canary.c
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
#include "c.h"
|
|
|
|
|
|
|
|
#include "common/link-canary.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This function just reports whether this file was compiled for frontend
|
|
|
|
* or backend environment. We need this because in some systems, mainly
|
|
|
|
* ELF-based platforms, it is possible for a shlib (such as libpq) loaded
|
|
|
|
* into the backend to call a backend function named XYZ in preference to
|
|
|
|
* the shlib's own function XYZ. That's bad if the two functions don't
|
|
|
|
* act identically. This exact situation comes up for many functions in
|
|
|
|
* src/common and src/port, where the same function names exist in both
|
|
|
|
* libpq and the backend but they don't act quite identically. To verify
|
|
|
|
* that appropriate measures have been taken to prevent incorrect symbol
|
|
|
|
* resolution, libpq should test that this function returns true.
|
|
|
|
*/
|
|
|
|
bool
|
|
|
|
pg_link_canary_is_frontend(void)
|
|
|
|
{
|
|
|
|
#ifdef FRONTEND
|
|
|
|
return true;
|
|
|
|
#else
|
|
|
|
return false;
|
|
|
|
#endif
|
|
|
|
}
|