Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package yder for openSUSE:Factory checked in at 2022-05-30 12:43:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yder (Old) and /work/SRC/openSUSE:Factory/.yder.new.2254 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yder" Mon May 30 12:43:58 2022 rev:14 rq:979710 version:1.4.17 Changes: -------- --- /work/SRC/openSUSE:Factory/yder/yder.changes 2022-03-14 19:37:47.990179148 +0100 +++ /work/SRC/openSUSE:Factory/.yder.new.2254/yder.changes 2022-05-30 12:44:52.400464231 +0200 @@ -1,0 +2,16 @@ +Sun May 29 18:20:32 UTC 2022 - Martin Hauke <[email protected]> + +- Update to version 1.4.17 + * Fix CMAKE_MODULE_PATH who was used as single value (for real) + +------------------------------------------------------------------- +Sat May 28 18:57:01 UTC 2022 - Martin Hauke <[email protected]> + +- Update to version 1.4.16 + * Fix pkg-config file with absolute path for + CMAKE_INSTALL_{INCLUDE,LIB}DIR + * Fix CMAKE_MODULE_PATH who was used as single value + * Add y_set_split_message_newline to split log messages on + newline characters + +------------------------------------------------------------------- Old: ---- yder-1.4.15.tar.gz New: ---- yder-1.4.17.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yder.spec ++++++ --- /var/tmp/diff_new_pack.1MzPpm/_old 2022-05-30 12:44:52.956464971 +0200 +++ /var/tmp/diff_new_pack.1MzPpm/_new 2022-05-30 12:44:52.960464976 +0200 @@ -19,7 +19,7 @@ %define sover 1_4 Name: yder -Version: 1.4.15 +Version: 1.4.17 Release: 0 Summary: Logging library written in C # Example programs in subfolder examples/ are licensed under MIT ++++++ yder-1.4.15.tar.gz -> yder-1.4.17.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/.github/workflows/codeql-analysis.yml new/yder-1.4.17/.github/workflows/codeql-analysis.yml --- old/yder-1.4.15/.github/workflows/codeql-analysis.yml 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/.github/workflows/codeql-analysis.yml 2022-05-29 20:04:28.000000000 +0200 @@ -46,9 +46,21 @@ # and modify them (or add more) to build your code if your project # uses a compiled language - - run: | + - name: dependencies + run: | sudo apt-get update sudo apt-get install -y cmake pkg-config libsystemd-dev doxygen + + cd /opt + git clone https://github.com/babelouest/orcania.git + mkdir build + cd build + + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib ../orcania + make + sudo make install + rm -rf * + - run: | mkdir build cd build cmake -DBUILD_YDER_DOCUMENTATION=on .. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/.github/workflows/main.yml new/yder-1.4.17/.github/workflows/main.yml --- old/yder-1.4.15/.github/workflows/main.yml 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/.github/workflows/main.yml 2022-05-29 20:04:28.000000000 +0200 @@ -13,6 +13,17 @@ sudo apt-get install -y cmake pkg-config check libsubunit-dev cppcheck libsystemd-dev doxygen - name: cppcheck run: cppcheck --force --enable=warning,missingInclude --error-exitcode=1 . + - name: dependencies + run: | + cd /opt + git clone https://github.com/babelouest/orcania.git + mkdir build + cd build + + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib ../orcania + make + sudo make install + rm -rf * - name: build run: | mkdir build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/API.md new/yder-1.4.17/API.md --- old/yder-1.4.15/API.md 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/API.md 2022-05-29 20:04:28.000000000 +0200 @@ -6,4 +6,4 @@ Yder is multi-thread, which mean that you can use multiple instances of the function `y_log_message` at the same time in your program. -Yet, `y_init_logs`, `y_set_logs_callback`, `y_set_date_format` and `y_close_logs` are mono-thread. You might use those functions in the `main()` routine to ensure safety. +Yet, `y_init_logs`, `y_set_logs_callback`, `y_set_date_format`, `y_set_split_message_newline` and `y_close_logs` are mono-thread. You might use those functions in the `main()` routine to ensure safety. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/CHANGELOG.md new/yder-1.4.17/CHANGELOG.md --- old/yder-1.4.15/CHANGELOG.md 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/CHANGELOG.md 2022-05-29 20:04:28.000000000 +0200 @@ -1,5 +1,15 @@ # Yder Changelog +## 1.4.17 + +- Fix `CMAKE_MODULE_PATH` who was used as single value (for real) + +## 1.4.16 + +- Fix pkg-config file with absolute path for `CMAKE_INSTALL_{INCLUDE,LIB}DIR` +- Fix `CMAKE_MODULE_PATH` who was used as single value +- Add `y_set_split_message_newline` to split log messages on newline characters + ## 1.4.15 - Use `o_strnullempty` instead of `o_strlen` to check if a `char *` has data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/CMakeLists.txt new/yder-1.4.17/CMakeLists.txt --- old/yder-1.4.15/CMakeLists.txt 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/CMakeLists.txt 2022-05-29 20:04:28.000000000 +0200 @@ -30,7 +30,7 @@ set(PROJECT_BUGREPORT_PATH "https://github.com/babelouest/yder/issues") set(LIBRARY_VERSION_MAJOR "1") set(LIBRARY_VERSION_MINOR "4") -set(LIBRARY_VERSION_PATCH "15") +set(LIBRARY_VERSION_PATCH "17") set(PROJECT_VERSION "${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}.${LIBRARY_VERSION_PATCH}") set(PROJECT_VERSION_MAJOR ${LIBRARY_VERSION_MAJOR}) @@ -56,11 +56,12 @@ set(LIBRARY_VERSION "${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}.${LIBRARY_VERSION_PATCH}") set(LIBRARY_SOVERSION "${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}") -set(ORCANIA_VERSION_REQUIRED "2.2.2") +set(ORCANIA_VERSION_REQUIRED "2.3.0") # cmake modules -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules) +set(Y_CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules) +list(APPEND CMAKE_MODULE_PATH "${Y_CMAKE_MODULE_PATH}") include(GNUInstallDirs) include(CheckSymbolExists) @@ -155,6 +156,7 @@ message( FATAL_ERROR "Orcania not found") endif () else() + message(STATUS "Orcania found") set(LIBS ${LIBS} ${ORCANIA_LIBRARIES}) include_directories(${ORCANIA_INCLUDE_DIRS}) include_directories(${orcania_BINARY_DIR}) @@ -231,7 +233,7 @@ set(TESTS yder_test) configure_file( - "${CMAKE_MODULE_PATH}/CTestCustom.cmake.in" + "${Y_CMAKE_MODULE_PATH}/CTestCustom.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake" @ONLY) @@ -250,6 +252,18 @@ option(INSTALL_HEADER "Install the header files" ON) # Install yder.h or not +if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") + set(PKGCONFIG_TARGET_INCLUDES "${CMAKE_INSTALL_INCLUDEDIR}") +else() + set(PKGCONFIG_TARGET_INCLUDES "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") +endif() + +if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") + set(PKGCONFIG_TARGET_LIBDIR "${CMAKE_INSTALL_LIBDIR}") +else() + set(PKGCONFIG_TARGET_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}") +endif() + configure_file(libyder.pc.in libyder.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libyder.pc @@ -281,7 +295,7 @@ if (NOT TARGET uninstall) configure_file( - "${CMAKE_MODULE_PATH}/CMakeUninstall.cmake.in" + "${Y_CMAKE_MODULE_PATH}/CMakeUninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/examples/.gitignore new/yder-1.4.17/examples/.gitignore --- old/yder-1.4.15/examples/.gitignore 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/examples/.gitignore 2022-05-29 20:04:28.000000000 +0200 @@ -4,3 +4,5 @@ log_syslog log_journald log_callback +log_newline +valgrind.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/examples/Makefile new/yder-1.4.17/examples/Makefile --- old/yder-1.4.15/examples/Makefile 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/examples/Makefile 2022-05-29 20:04:28.000000000 +0200 @@ -19,7 +19,7 @@ INCLUDE_LOCATION=../include LIBS=-lc -lyder -L$(YDER_LOCATION) ADDITIONALFLAGS=-O3 -TARGET=log_console log_syslog log_file log_combined log_callback +TARGET=log_console log_syslog log_file log_combined log_callback log_newline ifndef Y_DISABLE_JOURNALD TARGET+= log_journald @@ -28,7 +28,7 @@ all: libyder.so $(TARGET) clean: - rm -f *.o log_console log_syslog log_file log_combined log_journald log_callback + rm -f *.o valgrind.txt log_console log_syslog log_file log_combined log_journald log_callback log_newline debug: ADDITIONALFLAGS=-DDEBUG -g -O0 @@ -61,6 +61,10 @@ $(CC) -c $(CFLAGS) log_callback.c $(CC) -o log_callback log_callback.o $(LIBS) +log_newline: log_newline.c + $(CC) -c $(CFLAGS) log_newline.c + $(CC) -o log_newline log_newline.o $(LIBS) + test_console: libyder.so log_console LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_console @@ -79,6 +83,9 @@ test_callback: libyder.so log_callback LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_callback +test_newline: libyder.so log_newline + LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_newline + ifndef Y_DISABLE_JOURNALD test: libyder.so $(TARGET) LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_console @@ -87,12 +94,14 @@ LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_combined LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_journald LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_callback + LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_newline else LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_console LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_syslog LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_file LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_combined LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_callback + LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_newline endif ifndef Y_DISABLE_JOURNALD @@ -103,10 +112,12 @@ LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_combined 2>>valgrind.txt LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_journald 2>>valgrind.txt LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_callback 2>>valgrind.txt + LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_newline 2>>valgrind.txt else LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_console 2>valgrind.txt LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_syslog 2>>valgrind.txt LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_file 2>>valgrind.txt LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_combined 2>>valgrind.txt LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_callback 2>>valgrind.txt + LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./log_newline 2>>valgrind.txt endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/examples/log_file.c new/yder-1.4.17/examples/log_file.c --- old/yder-1.4.15/examples/log_file.c 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/examples/log_file.c 2022-05-29 20:04:28.000000000 +0200 @@ -24,22 +24,22 @@ int main(int argc, char ** argv) { - if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_ERROR, "/tmp/yder_log_error.log", "Initializing logs mode: console, logs level: error")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_ERROR, "/tmp/yder_log_error.log", "Initializing logs mode: file, logs level: error")) { write_logs("error"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_WARNING, "/tmp/yder_log_warning.log", "Initializing logs mode: console, logs level: warning")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_WARNING, "/tmp/yder_log_warning.log", "Initializing logs mode: file, logs level: warning")) { write_logs("warning"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_INFO, "/tmp/yder_log_info.log", "Initializing logs mode: console, logs level: info")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_INFO, "/tmp/yder_log_info.log", "Initializing logs mode: file, logs level: info")) { write_logs("info"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_DEBUG, "/tmp/yder_log_debug.log", "Initializing logs mode: console, logs level: debug")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_DEBUG, "/tmp/yder_log_debug.log", "Initializing logs mode: file, logs level: debug")) { write_logs("debug"); y_close_logs(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/examples/log_journald.c new/yder-1.4.17/examples/log_journald.c --- old/yder-1.4.15/examples/log_journald.c 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/examples/log_journald.c 2022-05-29 20:04:28.000000000 +0200 @@ -28,22 +28,22 @@ int main(int argc, char ** argv) { - if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_ERROR, NULL, "Initializing logs mode: console, logs level: error")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_ERROR, NULL, "Initializing logs mode: journald, logs level: error")) { write_logs("error"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_WARNING, NULL, "Initializing logs mode: console, logs level: warning")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_WARNING, NULL, "Initializing logs mode: journald, logs level: warning")) { write_logs("warning"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_INFO, NULL, "Initializing logs mode: console, logs level: info")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_INFO, NULL, "Initializing logs mode: journald, logs level: info")) { write_logs("info"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: console, logs level: debug")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: journald, logs level: debug")) { write_logs("debug"); y_close_logs(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/examples/log_newline.c new/yder-1.4.17/examples/log_newline.c --- old/yder-1.4.15/examples/log_newline.c 1970-01-01 01:00:00.000000000 +0100 +++ new/yder-1.4.17/examples/log_newline.c 2022-05-29 20:04:28.000000000 +0200 @@ -0,0 +1,102 @@ +/** + * + * Yder example program + * + * This example program describes the main features + * that are available in a callback function + * + * Copyright 2014-2020 Nicolas Mora <[email protected]> + * + * License MIT + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "yder.h" + +void y_callback_log_message(void * cls, const char * app_name, const time_t date, const unsigned long level, const char * message) { + char *level_name, date_stamp[20]; + struct tm * tm_stamp; + + tm_stamp = localtime (&date); + +#ifndef _WIN32 + strftime (date_stamp, sizeof(date_stamp), "%FT%TZ", tm_stamp); +#else + strftime (date_stamp, sizeof(date_stamp), "%Y-%m-%dT%H:%M:%S", tm_stamp); +#endif + switch (level) { + case Y_LOG_LEVEL_ERROR: + level_name = "ERROR"; + break; + case Y_LOG_LEVEL_WARNING: + level_name = "WARNING"; + break; + case Y_LOG_LEVEL_INFO: + level_name = "INFO"; + break; + case Y_LOG_LEVEL_DEBUG: + level_name = "DEBUG"; + break; + default: + level_name = "NONE"; + break; + } + printf("Here is my callback log function\n- cls is %s\n- app_name is %s\n- date is %s\n- level is %s\n- message is '%s'\n\n", (char *)cls, app_name, date_stamp, level_name, message); +} + +int main(int argc, char ** argv) { + char * cls = "my cls"; + + if (y_init_logs("Yder Tests", Y_LOG_MODE_CONSOLE, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: console, logs level: debug")) { + y_set_split_message_newline(1, "Set newline"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines"); + y_close_logs(); + } + + if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_DEBUG, "/tmp/log_newline.log", "Initializing logs mode: file, logs level: debug")) { + y_set_split_message_newline(1, "Set newline"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines"); + y_close_logs(); + } + + if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: journald, logs level: debug")) { + y_set_split_message_newline(1, "Set newline"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines"); + y_close_logs(); + } + + if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: syslog, logs level: debug")) { + y_set_split_message_newline(1, "Set newline"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines"); + y_close_logs(); + } + + if (y_init_logs("Yder Tests", Y_LOG_MODE_CALLBACK, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: callback, logs level: warning") && y_set_logs_callback(&y_callback_log_message, cls, "callback init")) { + y_set_split_message_newline(1, "Set newline"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines"); + y_close_logs(); + } + + if (y_init_logs("Yder Tests", Y_LOG_MODE_CONSOLE|Y_LOG_MODE_FILE|Y_LOG_MODE_CALLBACK, Y_LOG_LEVEL_DEBUG, "/tmp/log_newline_combined.log", "Initializing logs mode: file, logs level: debug") && y_set_logs_callback(&y_callback_log_message, cls, "callback init")) { + y_set_split_message_newline(1, "Set newline"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines"); + y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines"); + y_close_logs(); + } + + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/examples/log_syslog.c new/yder-1.4.17/examples/log_syslog.c --- old/yder-1.4.15/examples/log_syslog.c 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/examples/log_syslog.c 2022-05-29 20:04:28.000000000 +0200 @@ -24,22 +24,22 @@ int main(int argc, char ** argv) { - if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_ERROR, NULL, "Initializing logs mode: console, logs level: error")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_ERROR, NULL, "Initializing logs mode: syslog, logs level: error")) { write_logs("error"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_WARNING, NULL, "Initializing logs mode: console, logs level: warning")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_WARNING, NULL, "Initializing logs mode: syslog, logs level: warning")) { write_logs("warning"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_INFO, NULL, "Initializing logs mode: console, logs level: info")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_INFO, NULL, "Initializing logs mode: syslog, logs level: info")) { write_logs("info"); y_close_logs(); } - if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: console, logs level: debug")) { + if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_DEBUG, NULL, "Initializing logs mode: syslog, logs level: debug")) { write_logs("debug"); y_close_logs(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/include/yder.h new/yder-1.4.17/include/yder.h --- old/yder-1.4.15/include/yder.h 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/include/yder.h 2022-05-29 20:04:28.000000000 +0200 @@ -56,6 +56,7 @@ #define Y_LOG_LEVEL_DEBUG 0xF000 #define Y_LOG_LEVEL_CURRENT 0xFFFF +#define Y_SPLIT_CURRENT -1 /** * @} */ @@ -101,6 +102,17 @@ int y_set_date_format(const char * format, const char * message); /** + * Specify if the log messages must be splitted when a newline is in it + * This function may have incidence on the application speed, + * because it adds more memory allocations on each log message. + * I recommend to use it only if relevant + * @param split 0 to disable splitted logs, 1 to enable + * @param message message that will be appear in the logs + * @return 1 on success, 0 on error + */ +int y_set_split_message_newline(int split, const char * message); + +/** * Close the logs * @return 1 on success, 0 on error */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/libyder.pc.in new/yder-1.4.17/libyder.pc.in --- old/yder-1.4.15/libyder.pc.in 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/libyder.pc.in 2022-05-29 20:04:28.000000000 +0200 @@ -1,7 +1,7 @@ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@ -libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ +libdir=@PKGCONFIG_TARGET_LIBDIR@ +includedir=@PKGCONFIG_TARGET_INCLUDES@ Name: @PROJECT_NAME@ Description: @PROJECT_DESCRIPTION@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/src/Makefile new/yder-1.4.17/src/Makefile --- old/yder-1.4.15/src/Makefile 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/src/Makefile 2022-05-29 20:04:28.000000000 +0200 @@ -35,7 +35,7 @@ OUTPUT=libyder.so VERSION_MAJOR=1 VERSION_MINOR=4 -VERSION_PATCH=15 +VERSION_PATCH=17 SONAME = -soname ifeq ($(shell uname -s),Darwin) @@ -71,8 +71,8 @@ @cp $(PKGCONFIG_TEMPLATE) $(PKGCONFIG_FILE) @echo Pkgconfig file $(PKGCONFIG_FILE) generated @sed -i -e 's#@CMAKE_INSTALL_PREFIX@#$(DESTDIR)#g' $(PKGCONFIG_FILE) - @sed -i -e 's/@CMAKE_INSTALL_LIBDIR@/lib/g' $(PKGCONFIG_FILE) - @sed -i -e 's/@CMAKE_INSTALL_INCLUDEDIR@/include/g' $(PKGCONFIG_FILE) + @sed -i -e 's#@PKGCONFIG_TARGET_LIBDIR@#$${prefix}/lib#g' $(PKGCONFIG_FILE) + @sed -i -e 's#@PKGCONFIG_TARGET_INCLUDES@#$${prefix}/include#g' $(PKGCONFIG_FILE) @sed -i -e 's/@PROJECT_NAME@/$(PROJECT_NAME)/g' $(PKGCONFIG_FILE) @sed -i -e 's/@PROJECT_DESCRIPTION@/$(PROJECT_DESCRIPTION)/g' $(PKGCONFIG_FILE) @sed -i -e 's|@PROJECT_BUGREPORT_PATH@|$(PROJECT_BUGREPORT_PATH)|g' $(PKGCONFIG_FILE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/src/yder.c new/yder-1.4.17/src/yder.c --- old/yder-1.4.15/src/yder.c 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/src/yder.c 2022-05-29 20:04:28.000000000 +0200 @@ -41,10 +41,11 @@ /** * Write log message to console output (stdout or stderr) */ -static void y_write_log_console(const char * app_name, const char * date_format, const time_t date, const unsigned long level, const char * message) { - char * level_name = NULL, date_stamp[64]; +static void y_write_log_console(const char * app_name, const char * date_format, const time_t date, const unsigned long level, const char * message, int split) { + char * level_name = NULL, date_stamp[64], ** message_split = NULL; FILE * output = NULL; struct tm tm_stamp; + size_t i; #ifdef _WIN32 gmtime_s(&tm_stamp, &date); @@ -85,7 +86,16 @@ // Write to stdout output = stdout; } - fprintf(output, "%s - %s %s: %s\n", date_stamp, app_name, level_name, message); + if (split == 1) { + if (split_string(message, "\n", &message_split)) { + for (i=0; message_split[i] != NULL; i++) { + fprintf(output, "%s - %s %s: %s\n", date_stamp, app_name, level_name, message_split[i]); + } + free_string_array(message_split); + } + } else { + fprintf(output, "%s - %s %s: %s\n", date_stamp, app_name, level_name, message); + } fflush(output); } @@ -138,9 +148,10 @@ /** * Append log message to the log file */ -static void y_write_log_file(const char * app_name, const char * date_format, const time_t date, FILE * log_file, const unsigned long level, const char * message) { - char * level_name = NULL, date_stamp[20]; +static void y_write_log_file(const char * app_name, const char * date_format, const time_t date, FILE * log_file, const unsigned long level, const char * message, int split) { + char * level_name = NULL, date_stamp[20], ** message_split = NULL; struct tm tm_stamp; + size_t i; if (log_file != NULL) { #ifdef _WIN32 @@ -174,7 +185,16 @@ level_name = "NONE"; break; } - fprintf(log_file, "%s - %s %s: %s\n", date_stamp, app_name, level_name, message); + if (split == 1) { + if (split_string(message, "\n", &message_split)) { + for (i=0; message_split[i] != NULL; i++) { + fprintf(log_file, "%s - %s %s: %s\n", date_stamp, app_name, level_name, message_split[i]); + } + free_string_array(message_split); + } + } else { + fprintf(log_file, "%s - %s %s: %s\n", date_stamp, app_name, level_name, message); + } fflush(log_file); } } @@ -190,6 +210,7 @@ void (* y_callback_log_message) (void * cls, const char * app_name, const time_t date, const unsigned long level, const char * message), void * cls, const char * date_format, + int split, const unsigned long level, const char * message) { static unsigned long cur_mode = Y_LOG_MODE_NONE, cur_level = Y_LOG_LEVEL_NONE; @@ -199,7 +220,10 @@ static void (* cur_callback_log_message) (void * cls, const char * app_name, const time_t date, const unsigned long level, const char * message) = NULL; static void * cur_cls = NULL; static char * cur_date_format = NULL; + static int cur_split = 0; time_t now; + char ** message_split = NULL; + size_t i; // Closing logs: free cur_app_name if (app_name == NULL && @@ -234,6 +258,10 @@ cur_date_format = o_strdup(date_format); } + if (split != Y_SPLIT_CURRENT) { + cur_split = split; + } + if (cur_mode == Y_LOG_MODE_NONE && cur_level == Y_LOG_LEVEL_NONE) { // Logs have not been initialized, cancel return 0; @@ -281,7 +309,7 @@ if (cur_level >= level) { if (message != NULL) { if (cur_mode & Y_LOG_MODE_CONSOLE) { - y_write_log_console(cur_app_name, cur_date_format, now, level, message); + y_write_log_console(cur_app_name, cur_date_format, now, level, message, cur_split); } #ifndef _WIN32 if (cur_mode & Y_LOG_MODE_SYSLOG) { @@ -295,10 +323,19 @@ } #endif if (cur_mode & Y_LOG_MODE_FILE) { - y_write_log_file(cur_app_name, cur_date_format, now, cur_log_file, level, message); + y_write_log_file(cur_app_name, cur_date_format, now, cur_log_file, level, message, cur_split); } if (cur_mode & Y_LOG_MODE_CALLBACK && cur_callback_log_message != NULL) { - cur_callback_log_message(cur_cls, cur_app_name, now, level, message); + if (cur_split == 1) { + if (split_string(message, "\n", &message_split)) { + for (i=0; message_split[i] != NULL; i++) { + cur_callback_log_message(cur_cls, cur_app_name, now, level, message_split[i]); + } + free_string_array(message_split); + } + } else { + cur_callback_log_message(cur_cls, cur_app_name, now, level, message); + } } } } @@ -331,7 +368,7 @@ } #endif - return y_write_log(app, init_mode, init_level, init_log_file, NULL, NULL, NULL, Y_LOG_LEVEL_INFO, message); + return y_write_log(app, init_mode, init_level, init_log_file, NULL, NULL, NULL, Y_SPLIT_CURRENT, Y_LOG_LEVEL_INFO, message); } /** @@ -342,7 +379,7 @@ void * cls, const char * message) { if (y_callback_log_message != NULL) { - return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, y_callback_log_message, cls, NULL, Y_LOG_LEVEL_INFO, message); + return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, y_callback_log_message, cls, NULL, Y_SPLIT_CURRENT, Y_LOG_LEVEL_INFO, message); } else { return 0; } @@ -353,17 +390,21 @@ */ int y_set_date_format(const char * format, const char * message) { if (!o_strnullempty(format)) { - return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, NULL, format, Y_LOG_LEVEL_INFO, message); + return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, NULL, format, Y_SPLIT_CURRENT, Y_LOG_LEVEL_INFO, message); } else { return 0; } } +int y_set_split_message_newline(int split, const char * message) { + return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, NULL, NULL, split, Y_LOG_LEVEL_INFO, message); +} + /** * Close logs */ int y_close_logs(void) { - return y_write_log(NULL, 0, 0, NULL, NULL, NULL, NULL, 0, NULL); + return y_write_log(NULL, 0, 0, NULL, NULL, NULL, NULL, Y_SPLIT_CURRENT, 0, NULL); } /** @@ -380,7 +421,7 @@ out = o_malloc((out_len + 1)*sizeof(char)); if (out != NULL) { vsnprintf(out, (out_len + 1), message, args_cpy); - y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, NULL, NULL, level, out); + y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, NULL, NULL, Y_SPLIT_CURRENT, level, out); o_free(out); } va_end(args); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yder-1.4.15/test/yder_test.c new/yder-1.4.17/test/yder_test.c --- old/yder-1.4.15/test/yder_test.c 2022-03-09 23:10:21.000000000 +0100 +++ new/yder-1.4.17/test/yder_test.c 2022-05-29 20:04:28.000000000 +0200 @@ -7,6 +7,7 @@ #include <time.h> #include <check.h> +#include <orcania.h> #include "yder.h" char message[1024]; @@ -19,6 +20,12 @@ level = log_level; } +void unit_test_newline(void * cls, const char * log_app_name, const time_t date, const unsigned long log_level, const char * log_message) { + int * count = (int *)cls; + ck_assert_int_gt(o_strlen(log_message), 0); + (*count)++; +} + START_TEST(test_yder_init_console) { ck_assert_int_eq(y_init_logs("test_yder_console", Y_LOG_MODE_CONSOLE, Y_LOG_LEVEL_DEBUG, NULL, "first test"), 1); @@ -231,6 +238,25 @@ } END_TEST +START_TEST(test_yder_newline_split) +{ + int count = 0; + ck_assert_int_eq(y_init_logs("test_yder_newline_split", Y_LOG_MODE_CALLBACK, Y_LOG_LEVEL_DEBUG, NULL, "yder_newline_split"), 1); + ck_assert_int_eq(y_set_logs_callback(&unit_test_newline, &count, "Start newline unit tests"), 1); + ck_assert_int_eq(y_set_split_message_newline(1, "Set newline"), 1); + count = 0; + y_log_message(Y_LOG_LEVEL_DEBUG, "first test, one line"); + ck_assert_int_eq(count, 1); + count = 0; + y_log_message(Y_LOG_LEVEL_DEBUG, "second test\ntwo lines"); + ck_assert_int_eq(count, 2); + count = 0; + y_log_message(Y_LOG_LEVEL_DEBUG, "third test\nfour\nlines\nahead"); + ck_assert_int_eq(count, 4); + y_close_logs(); +} +END_TEST + static Suite *yder_suite(void) { Suite *s; @@ -252,6 +278,7 @@ tcase_add_test(tc_core, test_yder_level_warning); tcase_add_test(tc_core, test_yder_level_error); tcase_add_test(tc_core, test_yder_date_format); + tcase_add_test(tc_core, test_yder_newline_split); tcase_set_timeout(tc_core, 30); suite_add_tcase(s, tc_core);
