summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2015-02-24 22:36:20 +0800
committerMatt Johnston <matt@ucc.asn.au>2015-02-24 22:36:20 +0800
commitd967455c85cbaa7523401bcb1139620ecd082b94 (patch)
treed019654d3b242c8f1941fed0c485671fbeef67fa
parent150aeddb7db53d617ff7467e6d4d841ad243d335 (diff)
downloaddropbear-d967455c85cbaa7523401bcb1139620ecd082b94.tar.gz
Add more ATTRIB_NORETURN annotations, from Thorsten Horstmann
-rw-r--r--cli-session.c4
-rw-r--r--libtomcrypt/src/headers/tomcrypt_argchk.h10
-rw-r--r--session.h6
3 files changed, 14 insertions, 6 deletions
diff --git a/cli-session.c b/cli-session.c
index a484bf7..6be8472 100644
--- a/cli-session.c
+++ b/cli-session.c
@@ -38,10 +38,10 @@
#include "agentfwd.h"
#include "crypto_desc.h"
-static void cli_remoteclosed();
+static void cli_remoteclosed() ATTRIB_NORETURN;
static void cli_sessionloop();
static void cli_session_init();
-static void cli_finished();
+static void cli_finished() ATTRIB_NORETURN;
static void recv_msg_service_accept(void);
static void cli_session_cleanup(void);
static void recv_msg_global_request_cli(void);
diff --git a/libtomcrypt/src/headers/tomcrypt_argchk.h b/libtomcrypt/src/headers/tomcrypt_argchk.h
index cfc93ad..38e1bdd 100644
--- a/libtomcrypt/src/headers/tomcrypt_argchk.h
+++ b/libtomcrypt/src/headers/tomcrypt_argchk.h
@@ -4,8 +4,16 @@
#include <signal.h>
+/* portability macros for compiler-specific code attributes */
+#ifdef __GNUC__
+#define ATTRIB_NORETURN __attribute__((noreturn))
+#else
+#define ATTRIB_NORETURN
+#endif
+
+
/* this is the default LibTomCrypt macro */
-void crypt_argchk(char *v, char *s, int d);
+void crypt_argchk(char *v, char *s, int d) ATTRIB_NORETURN;
#define LTC_ARGCHK(x) if (!(x)) { crypt_argchk(#x, __FILE__, __LINE__); }
#define LTC_ARGCHKVD(x) LTC_ARGCHK(x)
diff --git a/session.h b/session.h
index 0f49247..189e335 100644
--- a/session.h
+++ b/session.h
@@ -43,7 +43,7 @@ extern int sessinitdone; /* Is set to 0 somewhere */
extern int exitflag;
void common_session_init(int sock_in, int sock_out);
-void session_loop(void(*loophandler)());
+void session_loop(void(*loophandler)()) ATTRIB_NORETURN;
void session_cleanup();
void send_session_identification();
void send_msg_ignore();
@@ -55,12 +55,12 @@ const char* get_user_shell();
void fill_passwd(const char* username);
/* Server */
-void svr_session(int sock, int childpipe);
+void svr_session(int sock, int childpipe) ATTRIB_NORETURN;
void svr_dropbear_exit(int exitcode, const char* format, va_list param) ATTRIB_NORETURN;
void svr_dropbear_log(int priority, const char* format, va_list param);
/* Client */
-void cli_session(int sock_in, int sock_out);
+void cli_session(int sock_in, int sock_out) ATTRIB_NORETURN;
void cleantext(unsigned char* dirtytext);
/* crypto parameters that are stored individually for transmit and receive */