mirror of
https://github.com/zebrajr/postgres.git
synced 2025-12-06 12:20:15 +01:00
We want to support a "noreturn" decoration on more compilers besides
just GCC-compatible ones, but for that we need to move the decoration
in front of the function declaration instead of either behind it or
wherever, which is the current style afforded by GCC-style attributes.
Also rename the macro to "pg_noreturn" to be similar to the C11
standard "noreturn".
pg_noreturn is now supported on all compilers that support C11 (using
_Noreturn), as well as GCC-compatible ones (using __attribute__, as
before), as well as MSVC (using __declspec). (When PostgreSQL
requires C11, the latter two variants can be dropped.)
Now, all supported compilers effectively support pg_noreturn, so the
extra code for !HAVE_PG_ATTRIBUTE_NORETURN can be dropped.
This also fixes a possible problem if third-party code includes
stdnoreturn.h, because then the current definition of
#define pg_attribute_noreturn() __attribute__((noreturn))
would cause an error.
Note that the C standard does not support a noreturn attribute on
function pointer types. So we have to drop these here. There are
only two instances at this time, so it's not a big loss. In one case,
we can make up for it by adding the pg_noreturn to a wrapper function
and adding a pg_unreachable(), in the other case, the latter was
already done before.
Reviewed-by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/flat/pxr5b3z7jmkpenssra5zroxi7qzzp6eswuggokw64axmdixpnk@zbwxuq7gbbcw
42 lines
1.2 KiB
C
42 lines
1.2 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pg_backup_utils.h
|
|
* Utility routines shared by pg_dump and pg_restore.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/bin/pg_dump/pg_backup_utils.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef PG_BACKUP_UTILS_H
|
|
#define PG_BACKUP_UTILS_H
|
|
|
|
#include "common/logging.h"
|
|
|
|
/* bits returned by set_dump_section */
|
|
#define DUMP_PRE_DATA 0x01
|
|
#define DUMP_DATA 0x02
|
|
#define DUMP_POST_DATA 0x04
|
|
#define DUMP_UNSECTIONED 0xff
|
|
|
|
typedef void (*on_exit_nicely_callback) (int code, void *arg);
|
|
|
|
extern const char *progname;
|
|
|
|
extern void set_dump_section(const char *arg, int *dumpSections);
|
|
extern void on_exit_nicely(on_exit_nicely_callback function, void *arg);
|
|
pg_noreturn extern void exit_nicely(int code);
|
|
|
|
/* In pg_dump, we modify pg_fatal to call exit_nicely instead of exit */
|
|
#undef pg_fatal
|
|
#define pg_fatal(...) do { \
|
|
pg_log_generic(PG_LOG_ERROR, PG_LOG_PRIMARY, __VA_ARGS__); \
|
|
exit_nicely(1); \
|
|
} while(0)
|
|
|
|
#endif /* PG_BACKUP_UTILS_H */
|