summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ConfigureChecks.cmake27
-rw-r--r--config.h.cmake1
-rw-r--r--src/socket_wrapper.c16
3 files changed, 39 insertions, 5 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index 0691c8a..cb2ea92 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -198,6 +198,33 @@ int main(void) {
}" HAVE_DESTRUCTOR_ATTRIBUTE)
check_c_source_compiles("
+#define FALL_THROUGH __attribute__((fallthrough))
+
+enum direction_e {
+ UP = 0,
+ DOWN,
+};
+
+int main(void) {
+ enum direction_e key = UP;
+ int i = 10;
+ int j = 0;
+
+ switch (key) {
+ case UP:
+ i = 5;
+ FALL_THROUGH;
+ case DOWN:
+ j = i * 2;
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}" HAVE_FALLTHROUGH_ATTRIBUTE)
+
+check_c_source_compiles("
__thread int tls;
int main(void) {
diff --git a/config.h.cmake b/config.h.cmake
index 2f494a4..b98ceff 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -62,6 +62,7 @@
#cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1
#cmakedefine HAVE_CONSTRUCTOR_ATTRIBUTE 1
#cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1
+#cmakedefine HAVE_FALLTHROUGH_ATTRIBUTE 1
#cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1
#cmakedefine HAVE_SOCKADDR_STORAGE 1
#cmakedefine HAVE_IPV6 1
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index 395d0d7..29cd3f9 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -107,6 +107,12 @@ enum swrap_dbglvl_e {
#define DESTRUCTOR_ATTRIBUTE
#endif
+#ifdef HAVE_FALLTHROUGH_ATTRIBUTE
+#define FALL_THROUGH __attribute__ ((fallthrough))
+#else
+#define FALL_THROUGH
+#endif
+
#ifdef HAVE_ADDRESS_SANITIZER_ATTRIBUTE
#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE __attribute__((no_sanitize_address))
#else
@@ -587,7 +593,7 @@ static void *swrap_load_lib_handle(enum swrap_lib lib)
switch (lib) {
case SWRAP_LIBNSL:
- /* FALL TROUGH */
+ FALL_THROUGH;
case SWRAP_LIBSOCKET:
#ifdef HAVE_LIBSOCKET
handle = swrap.libc.socket_handle;
@@ -606,7 +612,7 @@ static void *swrap_load_lib_handle(enum swrap_lib lib)
}
break;
#endif
- /* FALL TROUGH */
+ FALL_THROUGH;
case SWRAP_LIBC:
handle = swrap.libc.handle;
#ifdef LIBC_SO
@@ -1861,7 +1867,7 @@ static int sockaddr_convert_to_un(struct socket_info *si,
* AF_UNSPEC is mapped to AF_INET and must be treated here.
*/
- /* FALL THROUGH */
+ FALL_THROUGH;
}
case AF_INET:
#ifdef HAVE_IPV6
@@ -2790,12 +2796,12 @@ static int swrap_socket(int family, int type, int protocol)
if (real_type == SOCK_STREAM) {
break;
}
- /*fall through*/
+ FALL_THROUGH;
case 17:
if (real_type == SOCK_DGRAM) {
break;
}
- /*fall through*/
+ FALL_THROUGH;
default:
errno = EPROTONOSUPPORT;
return -1;