added sway_assert function

returns false on a failed assertion in release mode and raises SIGABRT in debug mode
This commit is contained in:
minus 2015-08-18 23:38:34 +02:00
parent feb0195341
commit faccaf6112
3 changed files with 24 additions and 5 deletions

View file

@ -3,7 +3,6 @@ project(sway C)
set(CMAKE_C_FLAGS "-g") set(CMAKE_C_FLAGS "-g")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin/") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin/")
add_definitions("-Wall") add_definitions("-Wall")
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMake) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMake)
find_package(XKBCommon REQUIRED) find_package(XKBCommon REQUIRED)

View file

@ -1,5 +1,6 @@
#ifndef _SWAY_LOG_H #ifndef _SWAY_LOG_H
#define _SWAY_LOG_H #define _SWAY_LOG_H
#include <stdbool.h>
typedef enum { typedef enum {
L_SILENT = 0, L_SILENT = 0,
@ -10,7 +11,8 @@ typedef enum {
void init_log(int verbosity); void init_log(int verbosity);
void sway_log_colors(int mode); void sway_log_colors(int mode);
void sway_log(int verbosity, char* format, ...) __attribute__((format(printf,2,3))); void sway_log(int verbosity, const char* format, ...) __attribute__((format(printf,2,3)));
void sway_abort(char* format, ...)__attribute__((format(printf,1,2))); void sway_abort(const char* format, ...) __attribute__((format(printf,1,2)));
bool sway_assert(bool condition, const char* format, ...) __attribute__((format(printf,2,3)));
#endif #endif

View file

@ -4,6 +4,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <signal.h>
int colored = 1; int colored = 1;
int v = 0; int v = 0;
@ -32,7 +33,7 @@ void sway_log_colors(int mode) {
colored = (mode == 1) ? 1 : 0; colored = (mode == 1) ? 1 : 0;
} }
void sway_abort(char *format, ...) { void sway_abort(const char *format, ...) {
fprintf(stderr, "ERROR: "); fprintf(stderr, "ERROR: ");
va_list args; va_list args;
va_start(args, format); va_start(args, format);
@ -42,7 +43,7 @@ void sway_abort(char *format, ...) {
exit(1); exit(1);
} }
void sway_log(int verbosity, char* format, ...) { void sway_log(int verbosity, const char* format, ...) {
if (verbosity <= v) { if (verbosity <= v) {
int c = verbosity; int c = verbosity;
if (c > sizeof(verbosity_colors) / sizeof(char *)) { if (c > sizeof(verbosity_colors) / sizeof(char *)) {
@ -64,3 +65,20 @@ void sway_log(int verbosity, char* format, ...) {
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
} }
bool sway_assert(bool condition, const char* format, ...) {
if (condition) {
return true;
}
#ifndef NDEBUG
raise(SIGABRT);
#endif
va_list args;
va_start(args, format);
sway_log(L_ERROR, format, args);
va_end(args);
return false;
}