Line data Source code
1 : /*-------------------------------------------------------------------------
2 : * link-canary.c
3 : * Detect whether src/common functions came from frontend or backend.
4 : *
5 : * Copyright (c) 2018-2021, PostgreSQL Global Development Group
6 : *
7 : * IDENTIFICATION
8 : * src/common/link-canary.c
9 : *
10 : *-------------------------------------------------------------------------
11 : */
12 : #include "c.h"
13 :
14 : #include "common/link-canary.h"
15 :
16 : /*
17 : * This function just reports whether this file was compiled for frontend
18 : * or backend environment. We need this because in some systems, mainly
19 : * ELF-based platforms, it is possible for a shlib (such as libpq) loaded
20 : * into the backend to call a backend function named XYZ in preference to
21 : * the shlib's own function XYZ. That's bad if the two functions don't
22 : * act identically. This exact situation comes up for many functions in
23 : * src/common and src/port, where the same function names exist in both
24 : * libpq and the backend but they don't act quite identically. To verify
25 : * that appropriate measures have been taken to prevent incorrect symbol
26 : * resolution, libpq should test that this function returns true.
27 : */
28 : bool
29 10230 : pg_link_canary_is_frontend(void)
30 : {
31 : #ifdef FRONTEND
32 9826 : return true;
33 : #else
34 404 : return false;
35 : #endif
36 : }
|