diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e6f6be..7a72aab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,6 @@ add_executable(break_interval ${break_interval_SOURCES}) add_compile_options( -Wall -Wextra -Wpedantic -Wno-missing-braces - $<$:-Weffc++> - $<$:-Og> ) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) @@ -17,3 +15,49 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") endif() + +target_compile_options(break_interval PUBLIC + -Wall -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough + -Werror=format-security + -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 + -D_GLIBCXX_ASSERTIONS + -fstrict-flex-arrays=3 + -fstack-clash-protection -fstack-protector-strong + -Wl,-z,nodlopen -Wl,-z,noexecstack + -Wl,-z,relro -Wl,-z,now + -Wl,--as-needed -Wl,--no-copy-dt-needed-entries + -fPIE -pie +) + +target_link_options(break_interval PUBLIC + -Wall -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough + -Werror=format-security + -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 + -D_GLIBCXX_ASSERTIONS + -fstrict-flex-arrays=3 + -fstack-clash-protection -fstack-protector-strong + -Wl,-z,nodlopen -Wl,-z,noexecstack + -Wl,-z,relro -Wl,-z,now + -Wl,--as-needed -Wl,--no-copy-dt-needed-entries + -fPIE -pie +) + +if(CMAKE_BUILD_TYPE STREQUAL "Release") + target_compile_options(break_interval PUBLIC + -O3 + -fno-delete-null-pointer-checks -fno-strict-overflow + -fno-strict-aliasing -ftrivial-auto-var-init=zero + ) + target_link_options(break_interval PUBLIC + -O3 + -fno-delete-null-pointer-checks -fno-strict-overflow + -fno-strict-aliasing -ftrivial-auto-var-init=zero + ) +else() + target_compile_options(break_interval PUBLIC + -Og + ) + target_link_options(break_interval PUBLIC + -Og + ) +endif() diff --git a/src/main.c b/src/main.c index 99319ea..67ffe20 100644 --- a/src/main.c +++ b/src/main.c @@ -104,9 +104,12 @@ int play_jingle_from_file(char *player, default: if (use_internal_file_specified != 0) { close(pipe_filedes[0]); - write(pipe_filedes[1], + ssize_t ret = write(pipe_filedes[1], interval_notification_mp3, interval_notification_mp3_len); + if (ret != interval_notification_mp3_len) { + fprintf(stderr, "WARNING: Did not write all bytes of mp3 to player!\n"); + } close(pipe_filedes[1]); } break; @@ -161,11 +164,16 @@ int play_jingle_from_memory(void) { exit(0); break; default: - close(pipe_filedes[0]); - write(pipe_filedes[1], - interval_notification_mp3, - interval_notification_mp3_len); - close(pipe_filedes[1]); + { + close(pipe_filedes[0]); + ssize_t ret = write(pipe_filedes[1], + interval_notification_mp3, + interval_notification_mp3_len); + if (ret != interval_notification_mp3_len) { + fprintf(stderr, "WARNING: Did not write all bytes of mp3 to player!\n"); + } + close(pipe_filedes[1]); + } break; } @@ -185,7 +193,8 @@ int main(int argc, char **argv) { return 0; } - unsigned int minutes = 5; + unsigned int minutes; + int temp_minutes = 5; char *file_name = NULL; char *player_name = NULL; char **player_args = NULL; @@ -200,28 +209,34 @@ int main(int argc, char **argv) { print_help(); return 4; } - minutes = atoi(argv[1]); + temp_minutes = atoi(argv[1]); } else if (argc == 3) { - minutes = atoi(argv[1]); + temp_minutes = atoi(argv[1]); file_name = argv[2]; } else if (argc == 4) { - minutes = atoi(argv[1]); + temp_minutes = atoi(argv[1]); file_name = argv[2]; player_name = argv[3]; } else if (argc > 4) { - minutes = atoi(argv[1]); + temp_minutes = atoi(argv[1]); file_name = argv[2]; player_name = argv[3]; player_args = argv + 4; - args_count = argc - 4; + args_count = (unsigned int)(argc - 4); } - if (minutes == 0) { + if (temp_minutes == 0) { puts("ERROR: Minutes cannot be set to zero!"); print_help(); return 3; + } else if (temp_minutes < 0) { + puts("ERROR: Minutes cannot be negative!"); + print_help(); + return 3; } + minutes = (unsigned int)temp_minutes; + printf("Set to %u minutes...\n", minutes); if (player_name) { printf("Using player \"%s\"...\n", player_name);