From 87c7b01dee341e5df016da65cff9c6701e4b5abe Mon Sep 17 00:00:00 2001 From: Vittorio Giovara <vittorio.giovara@savoirfairelinux.com> Date: Fri, 9 May 2014 18:28:56 -0400 Subject: [PATCH] de-cpp-fy logger The functions provided can be expressed in plain C. Document and reformat the API. Refs #47561 Change-Id: Ie93e5fb9a0847a5d2c1ee7c4d0b6e1704bffcbe6 --- daemon/src/Makefile.am | 3 +- daemon/src/history/history.cpp | 2 +- daemon/src/{logger.cpp => logger.c} | 34 +++++------ daemon/src/logger.h | 62 ++++++++++++++------- daemon/src/main.cpp | 4 +- daemon/src/video/libav_utils.cpp | 2 +- daemon/src/video/shm_sink.cpp | 12 ++-- daemon/src/video/socket_pair.cpp | 6 +- daemon/src/video/v4l2/video_preferences.cpp | 2 +- daemon/test/main.cpp | 6 +- 10 files changed, 73 insertions(+), 60 deletions(-) rename daemon/src/{logger.cpp => logger.c} (84%) diff --git a/daemon/src/Makefile.am b/daemon/src/Makefile.am index cc610fdf19..e0cc364b6f 100644 --- a/daemon/src/Makefile.am +++ b/daemon/src/Makefile.am @@ -63,7 +63,6 @@ libsflphone_la_LDFLAGS = \ libsflphone_la_CFLAGS = \ @CCGNU2_CFLAGS@ \ - @CCEXT2_CFLAGS@ \ @ZRTPCPP_CFLAGS@ \ $(PJSIP_CFLAGS) \ @CCRTP_CFLAGS@ \ @@ -82,7 +81,7 @@ libsflphone_la_SOURCES = conference.cpp \ eventthread.cpp \ call.cpp \ account.cpp \ - logger.cpp \ + logger.c \ numbercleaner.cpp \ fileutils.cpp \ threadloop.cpp \ diff --git a/daemon/src/history/history.cpp b/daemon/src/history/history.cpp index eb634ad3fd..d944abd06c 100644 --- a/daemon/src/history/history.cpp +++ b/daemon/src/history/history.cpp @@ -109,7 +109,7 @@ void History::ensurePath() // If directory creation failed if (errno != EEXIST) { DEBUG("Cannot create directory: %s", userdata.c_str()); - Logger::strErr(); + strErr(); return; } } diff --git a/daemon/src/logger.cpp b/daemon/src/logger.c similarity index 84% rename from daemon/src/logger.cpp rename to daemon/src/logger.c index 3281a74b65..f775191836 100644 --- a/daemon/src/logger.cpp +++ b/daemon/src/logger.c @@ -28,17 +28,16 @@ * as that of the covered work. */ -#include "logger.h" -#include <cstdarg> -#include <string> -#include <cstdio> +#include <stdio.h> +#include <stdarg.h> +#include <string.h> -namespace Logger { +#include "logger.h" -bool consoleLog = false; -bool debugMode = false; +static int consoleLog; +static int debugMode; -void log(const int level, const char* format, ...) +void logger(const int level, const char* format, ...) { if (!debugMode && level == LOG_DEBUG) return; @@ -71,28 +70,25 @@ void log(const int level, const char* format, ...) } } -void setConsoleLog(bool c) +void setConsoleLog(int c) { consoleLog = c; } -void setDebugMode(bool d) +void setDebugMode(int d) { debugMode = d; } -bool getDebugMode() +int getDebugMode(void) { return debugMode; } -void strErr(const char *msg) +void strErr(void) { #ifdef __GLIBC__ - if (strlen(msg)) - ERROR("%s: %m", msg); - else - ERROR("%m"); + ERROR("%m"); #else char buf[1000]; const char *errstr; @@ -109,10 +105,6 @@ void strErr(const char *msg) break; } - if (strlen(msg)) - ERROR("%s: %s", msg, errstr); - else - ERROR("%s", errstr); + ERROR("%s", errstr); #endif } -} diff --git a/daemon/src/logger.h b/daemon/src/logger.h index 0ae6e32fef..a1059e8624 100644 --- a/daemon/src/logger.h +++ b/daemon/src/logger.h @@ -28,32 +28,50 @@ * as that of the covered work. */ -#ifndef LOGGER_H_ -#define LOGGER_H_ +#ifndef H_LOGGER +#define H_LOGGER +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> #include <pthread.h> + #ifdef __ANDROID__ -#include <cstring> #include <android/log.h> #else #include <syslog.h> #endif -#include <cstring> +/** + * Print something, coloring it depending on the level + */ +void logger(const int level, const char *format, ...); + +/** + * Allow writing on the console + */ +void setConsoleLog(int c); + +/** + * When debug mode is not set, logging will not print anything + */ +void setDebugMode(int d); -namespace Logger { -void log(const int, const char*, ...); +/** + * Return the current mode + */ +int getDebugMode(void); -void setConsoleLog(bool); -void setDebugMode(bool); -bool getDebugMode(); /** - * Thread-safe function to print the stringified contents of errno appended to a - * user defined message */ -void strErr(const char *message = ""); -}; + * Thread-safe function to print the stringified contents of errno + */ +void strErr(); -#define LOG_FORMAT(M, ...) "%s:%d:0x%x: " M, FILE_NAME, __LINE__, (unsigned long) pthread_self() & 0xffff, ##__VA_ARGS__ +#define LOG_FORMAT(M, ...) "%s:%d:0x%x: " M, FILE_NAME, __LINE__, \ + (unsigned long) pthread_self() & 0xffff, \ + ##__VA_ARGS__ #ifndef __ANDROID__ @@ -62,23 +80,24 @@ void strErr(const char *message = ""); #define WARN(M, ...) LOGGER(M, LOG_WARNING, ##__VA_ARGS__) #define INFO(M, ...) LOGGER(M, LOG_INFO, ##__VA_ARGS__) #define DEBUG(M, ...) LOGGER(M, LOG_DEBUG, ##__VA_ARGS__) -#define LOGGER(M, LEVEL, ...) Logger::log(LEVEL, LOG_FORMAT(M, ##__VA_ARGS__)) +#define LOGGER(M, LEVEL, ...) logger(LEVEL, LOG_FORMAT(M, ##__VA_ARGS__)) -#else /* ANDROID */ +#else /* __ANDROID__ */ #ifndef APP_NAME #define APP_NAME "libsflphone" -#endif +#endif /* APP_NAME */ // Avoid printing whole path on android -#define FILE_NAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +#define FILE_NAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 \ + : __FILE__) #define ERROR(M, ...) LOGGER(M, ANDROID_LOG_ERROR, ##__VA_ARGS__) #define WARN(M, ...) LOGGER(M, ANDROID_LOG_WARN, ##__VA_ARGS__) #define INFO(M, ...) LOGGER(M, ANDROID_LOG_INFO, ##__VA_ARGS__) #define DEBUG(M, ...) LOGGER(M, ANDROID_LOG_DEBUG, ##__VA_ARGS__) #define LOGGER(M, LEVEL, ...) __android_log_print(LEVEL, APP_NAME, LOG_FORMAT(M, ##__VA_ARGS__)) -#endif /* ANDROID */ +#endif /* __ANDROID__ */ #define BLACK "\033[22;30m" #define RED "\033[22;31m" @@ -98,5 +117,8 @@ void strErr(const char *message = ""); #define WHITE "\033[01;37m" #define END_COLOR "\033[0m" -#endif // LOGGER_H_ +#ifdef __cplusplus +} +#endif +#endif // H_LOGGER diff --git a/daemon/src/main.cpp b/daemon/src/main.cpp index 2c0d5acad7..3faac09414 100644 --- a/daemon/src/main.cpp +++ b/daemon/src/main.cpp @@ -116,8 +116,8 @@ namespace { // We've always print the title/version, so we can just exit quit = true; } else { - Logger::setConsoleLog(consoleFlag); - Logger::setDebugMode(debugFlag); + setConsoleLog(consoleFlag); + setDebugMode(debugFlag); } return quit; } diff --git a/daemon/src/video/libav_utils.cpp b/daemon/src/video/libav_utils.cpp index 512199da76..d461e90064 100644 --- a/daemon/src/video/libav_utils.cpp +++ b/daemon/src/video/libav_utils.cpp @@ -118,7 +118,7 @@ void init_once() av_lockmgr_register(avcodecManageMutex); - if (Logger::getDebugMode()) + if (getDebugMode()) av_log_set_level(AV_LOG_VERBOSE); /* list of codecs tested and confirmed to work */ diff --git a/daemon/src/video/shm_sink.cpp b/daemon/src/video/shm_sink.cpp index 510a6d010c..d539c1cda5 100644 --- a/daemon/src/video/shm_sink.cpp +++ b/daemon/src/video/shm_sink.cpp @@ -84,7 +84,7 @@ bool SHMSink::start() fd_ = shm_open(shm_name_.c_str(), flags, perms); if (fd_ < 0) { ERROR("could not open shm area \"%s\"", shm_name_.c_str()); - Logger::strErr(); + strErr(); return false; } } else { @@ -94,7 +94,7 @@ bool SHMSink::start() shm_name_ = name.str(); fd_ = shm_open(shm_name_.c_str(), flags, perms); if (fd_ < 0 and errno != EEXIST) { - Logger::strErr(); + strErr(); return false; } } @@ -107,7 +107,7 @@ bool SHMSink::start() if (ftruncate(fd_, shm_area_len_)) { ERROR("Could not make shm area large enough for header"); - Logger::strErr(); + strErr(); return false; } @@ -133,7 +133,7 @@ bool SHMSink::start() bool SHMSink::stop() { if (fd_ >= 0 and close(fd_) == -1) - Logger::strErr(); + strErr(); fd_ = -1; @@ -159,13 +159,13 @@ bool SHMSink::resize_area(size_t desired_length) if (munmap(shm_area_, shm_area_len_)) { ERROR("Could not unmap shared area"); - Logger::strErr(); + strErr(); return false; } if (ftruncate(fd_, desired_length)) { ERROR("Could not resize shared area"); - Logger::strErr(); + strErr(); return false; } diff --git a/daemon/src/video/socket_pair.cpp b/daemon/src/video/socket_pair.cpp index a9fb9a1588..f542652723 100644 --- a/daemon/src/video/socket_pair.cpp +++ b/daemon/src/video/socket_pair.cpp @@ -124,7 +124,7 @@ int udp_socket_create(sockaddr_storage *addr, socklen_t *addr_len, // on local port if (bind(udp_fd, reinterpret_cast<sockaddr*>(addr), *addr_len) < 0) { ERROR("Bind failed"); - Logger::strErr(); + strErr(); close(udp_fd); udp_fd = -1; } @@ -168,9 +168,9 @@ void SocketPair::interrupt() void SocketPair::closeSockets() { if (rtcpHandle_ > 0 and close(rtcpHandle_)) - Logger::strErr(); + strErr(); if (rtpHandle_ > 0 and close(rtpHandle_)) - Logger::strErr(); + strErr(); } void SocketPair::openSockets(const char *uri, int local_rtp_port) diff --git a/daemon/src/video/v4l2/video_preferences.cpp b/daemon/src/video/v4l2/video_preferences.cpp index 6dc9e28f09..244acdd74c 100644 --- a/daemon/src/video/v4l2/video_preferences.cpp +++ b/daemon/src/video/v4l2/video_preferences.cpp @@ -326,7 +326,7 @@ bool VideoDeviceMonitorImpl::addDevice(const string &dev) int fd = open(dev.c_str(), O_RDWR); if (fd == -1) { ERROR("Problem opening device"); - Logger::strErr(); + strErr(); return false; } diff --git a/daemon/test/main.cpp b/daemon/test/main.cpp index 80528e5673..401b23132b 100644 --- a/daemon/test/main.cpp +++ b/daemon/test/main.cpp @@ -63,8 +63,8 @@ int main(int argc, char* argv[]) { atexit(cleanup); printf("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2014\n\n"); - Logger::setConsoleLog(true); - Logger::setDebugMode(true); + setConsoleLog(true); + setDebugMode(true); fileutils::FileHandle f(fileutils::create_pidfile()); if (f.fd == -1) { fprintf(stderr, "An sflphoned instance is already running, quitting...\n"); @@ -96,7 +96,7 @@ int main(int argc, char* argv[]) } else if (strcmp("--debug", argv[1]) == 0) { argvIndex++; - Logger::setDebugMode(true); + setDebugMode(true); INFO("Debug mode activated"); } else if (strcmp("--xml", argv[1]) == 0) { -- GitLab