diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..0db587396d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cmake.configureOnOpen": true +} \ No newline at end of file diff --git a/include/libwebsockets.h b/include/libwebsockets.h index 87ff280885..bd8ad36c56 100644 --- a/include/libwebsockets.h +++ b/include/libwebsockets.h @@ -702,6 +702,7 @@ lws_fx_string(const lws_fx_t *a, char *buf, size_t size); #if defined(LWS_ROLE_MQTT) #include #endif +#include #include #include #include diff --git a/include/libwebsockets/lws-assert.h b/include/libwebsockets/lws-assert.h new file mode 100644 index 0000000000..2a2d986da1 --- /dev/null +++ b/include/libwebsockets/lws-assert.h @@ -0,0 +1,21 @@ +#if !defined(__LWS_ASSERT_H__) +#define __LWS_ASSERT_H__ + + + + +typedef void (*lws_assert_cb)(const char *file, int line, const char *expression); +void lws_set_assert_cb(lws_assert_cb cb); + +#ifdef LWS_ENABLE_CUSTOM_ASSERT +void lws_assert(const char *file, int line, const char *expression); +# ifdef assert +# undef assert +# endif +#define assert(expression) (void)((expression) || (lws_assert(__FILE__, __LINE__, #expression), 0)) +#endif + + + + +#endif \ No newline at end of file diff --git a/lib/core/CMakeLists.txt b/lib/core/CMakeLists.txt index bd0b05d6f9..93270fb05b 100644 --- a/lib/core/CMakeLists.txt +++ b/lib/core/CMakeLists.txt @@ -32,6 +32,7 @@ if (NOT LWS_ONLY_SSPC) list(APPEND SOURCES core/alloc.c + core/assert.c core/buflist.c core/context.c core/lws_map.c diff --git a/lib/core/assert.c b/lib/core/assert.c new file mode 100644 index 0000000000..cdf3330756 --- /dev/null +++ b/lib/core/assert.c @@ -0,0 +1,16 @@ +#include "private-lib-core.h" + +static lws_assert_cb assert_cb = NULL; + +void lws_set_assert_cb(lws_assert_cb cb) { + assert_cb = cb; +} + +void lws_assert(const char *file, int line, const char *expression) { + if (assert_cb != NULL) { + assert_cb(file, line, expression); + } else { + fprintf(stderr, "Assertion failed: %s, file %s, line %d\n", expression, file, line); + abort(); + } +} diff --git a/lib/core/private-lib-core.h b/lib/core/private-lib-core.h index f894f2debc..595571fbf8 100644 --- a/lib/core/private-lib-core.h +++ b/lib/core/private-lib-core.h @@ -147,6 +147,7 @@ * */ +#define LWS_ENABLE_CUSTOM_ASSERT #include "libwebsockets.h" /* diff --git a/lib/roles/http/client/client-http.c b/lib/roles/http/client/client-http.c index 70373bbcd9..3f9c7784d8 100644 --- a/lib/roles/http/client/client-http.c +++ b/lib/roles/http/client/client-http.c @@ -286,7 +286,7 @@ lws_http_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd) lwsl_debug("ERROR writing to client socket\n"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cws"); - return 0; + return -1; // closed wsi so let callers know case LWS_SSL_CAPABLE_MORE_SERVICE: lws_callback_on_writable(wsi); break; diff --git a/make.sh b/make.sh new file mode 100755 index 0000000000..d731fa603a --- /dev/null +++ b/make.sh @@ -0,0 +1,5 @@ +rm -rf build +mkdir build +cd build +cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1 +make