/*! -*- c++ -*- * \file mg_tools.c * \brief A few util functions for standalone and plugin messaging for the vdr muggle plugindatabase * * \version $Revision: 1.4 $ * \date $Date$ * \author Ralf Klueber, Lars von Wedel, Andreas Kellner * \author file owner: $Author$ */ #include #include #include #include #include #include #include "mg_tools.h" #define __STL_CONFIG_H #include //! \brief buffer for messages #define MAX_BUFLEN 2048 static char buffer[MAX_BUFLEN]; static int DEBUG_LEVEL = 3; void mgSetDebugLevel (int new_level) { DEBUG_LEVEL = new_level; } int msprintf(char **strp, const char *fmt, ...) { va_list ap; int res; va_start (ap, fmt); res=vmsprintf(strp,fmt,ap); va_end (ap); return res; } int vmsprintf(char **strp, const char *fmt, va_list &ap) { *strp=0; int res=vasprintf (strp, fmt, ap); if (res<0) { *strp=strdup("???,see logfile"); mgError("vasprintf() returns %d. This probably means illformed UTF-8 characters." " Please convert your file names to UTF-8",fmt,res); } return res; } void mgDebug (int level, const char *fmt, ...) { if (level <= DEBUG_LEVEL) { va_list ap; va_start (ap, fmt); #ifdef HAVE_PG buffer[0]='P'; #elif HAVE_SQLITE buffer[0]='S'; #else buffer[0]='M'; #endif buffer[1]=' '; vsnprintf (buffer+2, sizeof(buffer)-2, fmt, ap); dsyslog("%s",buffer); va_end (ap); } } void mgDebug (const char *fmt, ...) { va_list ap; va_start (ap, fmt); mgDebug (1, fmt, ap); va_end (ap); } extern void showmessage(int duration,const char*,...); void mgWarning (const char *fmt, ...) { va_list ap; va_start (ap, fmt); vsnprintf (buffer, sizeof(buffer), fmt, ap); isyslog("%s",buffer); showmessage(0,buffer); va_end (ap); } void mgError (const char *fmt, ...) { va_list ap; va_start (ap, fmt); vsnprintf (buffer, sizeof(buffer), fmt, ap); esyslog("%s",buffer); showmessage(0,buffer); va_end (ap); } std::string trim(std::string const& source, char const* delims ) { std::string result(source); std::string::size_type index = result.find_last_not_of(delims); if(index != std::string::npos) result.erase(++index); index = result.find_first_not_of(delims); if(index != std::string::npos) result.erase(0, index); else result.erase(); return result; } char * SeparateFolders(const char *filename, char * folders[], unsigned int fcount) { static char empty[1]; empty[0]=0; for (unsigned int i=0;i