You've already forked pgbackrest
							
							
				mirror of
				https://github.com/pgbackrest/pgbackrest.git
				synced 2025-10-30 23:37:45 +02:00 
			
		
		
		
	Add FN_NO_RETURN macro.
Change all instances of __attribute__((__noreturn__)) to a macro in meson.build / build.auto.h.in. As compiler attributes written in the form of __attribute__ are not supported by MSVC, this is one of several commits to make the code-base more robust and allow using MSVC-style attributes later.
This commit is contained in:
		| @@ -88,6 +88,17 @@ | ||||
|  | ||||
|                         <p>Improve memory usage of mem contexts.</p> | ||||
|                     </release-item> | ||||
|  | ||||
|                     <release-item> | ||||
|                         <github-pull-request id="1773"/> | ||||
|  | ||||
|                         <release-item-contributor-list> | ||||
|                             <release-item-contributor id="sam.bassaly"/> | ||||
|                             <release-item-reviewer id="david.steele"/> | ||||
|                         </release-item-contributor-list> | ||||
|  | ||||
|                         <p>Add <code>FN_NO_RETURN</code> macro.</p> | ||||
|                     </release-item> | ||||
|                 </release-development-list> | ||||
|             </release-core-list> | ||||
|  | ||||
|   | ||||
| @@ -155,6 +155,9 @@ endif | ||||
| # Set configuration path | ||||
| configuration.set_quoted('CFGOPTDEF_CONFIG_PATH', get_option('configdir'), description: 'Configuration path') | ||||
|  | ||||
| # Set FN_NO_RETURN macro | ||||
| configuration.set('FN_NO_RETURN', '__attribute__((__noreturn__))', description: 'Indicate that a function does not return') | ||||
|  | ||||
| #################################################################################################################################### | ||||
| # Include src | ||||
| #################################################################################################################################### | ||||
|   | ||||
| @@ -25,3 +25,6 @@ Build Flags Generated by Configure | ||||
|  | ||||
| // Configuration path | ||||
| #undef CFGOPTDEF_CONFIG_PATH | ||||
|  | ||||
| // Indicate that a function does not return | ||||
| #define FN_NO_RETURN __attribute__((__noreturn__)) | ||||
|   | ||||
| @@ -45,7 +45,7 @@ bool cryptoIsInit(void); | ||||
|  | ||||
| // Throw crypto errors | ||||
| void cryptoError(bool error, const char *description); | ||||
| void cryptoErrorCode(unsigned long code, const char *description) __attribute__((__noreturn__)); | ||||
| FN_NO_RETURN void cryptoErrorCode(unsigned long code, const char *description); | ||||
|  | ||||
| // Generate random bytes | ||||
| void cryptoRandomBytes(unsigned char *buffer, size_t size); | ||||
|   | ||||
| @@ -314,28 +314,27 @@ jmp_buf *errorInternalJump(void); | ||||
| bool errorInternalCatch(const ErrorType *errorTypeCatch, bool fatalCatch); | ||||
|  | ||||
| // Propagate the error up so it can be caught | ||||
| void errorInternalPropagate(void) __attribute__((__noreturn__)); | ||||
| FN_NO_RETURN void errorInternalPropagate(void); | ||||
|  | ||||
| // End the try block | ||||
| void errorInternalTryEnd(void); | ||||
|  | ||||
| // Throw an error | ||||
| void errorInternalThrow( | ||||
| FN_NO_RETURN void errorInternalThrow( | ||||
|     const ErrorType *errorType, const char *fileName, const char *functionName, int fileLine, const char *message, | ||||
|     const char *stackTrace) __attribute__((__noreturn__)); | ||||
| void errorInternalThrowFmt( | ||||
|     const char *stackTrace); | ||||
| FN_NO_RETURN void errorInternalThrowFmt( | ||||
|     const ErrorType *errorType, const char *fileName, const char *functionName, int fileLine, const char *format, ...) | ||||
|     __attribute__((format(printf, 5, 6))) __attribute__((__noreturn__)); | ||||
|     __attribute__((format(printf, 5, 6))); | ||||
|  | ||||
| // Throw a system error | ||||
| void errorInternalThrowSys( | ||||
|     int errNo, const ErrorType *errorType, const char *fileName, const char *functionName, int fileLine, const char *message) | ||||
|     __attribute__((__noreturn__)); | ||||
| FN_NO_RETURN void errorInternalThrowSys( | ||||
|     int errNo, const ErrorType *errorType, const char *fileName, const char *functionName, int fileLine, const char *message); | ||||
|  | ||||
| // Throw a formatted system error | ||||
| void errorInternalThrowSysFmt( | ||||
| FN_NO_RETURN void errorInternalThrowSysFmt( | ||||
|     int errNo, const ErrorType *errorType, const char *fileName, const char *functionName, int fileLine, const char *format, ...) | ||||
|     __attribute__((format(printf, 6, 7))) __attribute__((__noreturn__)); | ||||
|     __attribute__((format(printf, 6, 7))); | ||||
|  | ||||
| // Versions of the above for coverage testing which checks the error condition inside the function | ||||
| #ifdef DEBUG_COVERAGE | ||||
|   | ||||
| @@ -128,7 +128,7 @@ Functions | ||||
| HttpResponse *httpRequestResponse(HttpRequest *this, bool contentCache); | ||||
|  | ||||
| // Throw an error if the request failed | ||||
| void httpRequestError(const HttpRequest *this, HttpResponse *response) __attribute__((__noreturn__)); | ||||
| FN_NO_RETURN void httpRequestError(const HttpRequest *this, HttpResponse *response); | ||||
|  | ||||
| // Move to a new parent mem context | ||||
| __attribute__((always_inline)) static inline HttpRequest * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user