vdr  1.7.31
Classes | Macros | Typedefs | Functions | Variables
tools.h File Reference
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <float.h>
#include <iconv.h>
#include <math.h>
#include <poll.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <sys/stat.h>
#include <sys/types.h>

Go to the source code of this file.

Classes

class  cCharSetConv
class  cString
class  cBase64Encoder
class  cBitStream
class  cTimeMs
class  cReadLine
class  cPoller
class  cReadDir
class  cFile
class  cSafeFile
class  cUnbufferedFile
 cUnbufferedFile is used for large files that are mainly written or read in a streaming manner, and thus should not be cached. More...
class  cLockFile
class  cListObject
class  cListBase
class  cList< T >
class  cVector< T >
class  cStringList
class  cFileNameList
class  cHashObject
class  cHashBase
class  cHash< T >

Macros

#define esyslog(a...)   void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR, a) : void() )
#define isyslog(a...)   void( (SysLogLevel > 1) ? syslog_with_tid(LOG_ERR, a) : void() )
#define dsyslog(a...)   void( (SysLogLevel > 2) ? syslog_with_tid(LOG_ERR, a) : void() )
#define LOG_ERROR   esyslog("ERROR (%s,%d): %m", __FILE__, __LINE__)
#define LOG_ERROR_STR(s)   esyslog("ERROR (%s,%d): %s: %m", __FILE__, __LINE__, s)
#define SECSINDAY   86400
#define KILOBYTE(n)   ((n) * 1024)
#define MEGABYTE(n)   ((n) * 1024LL * 1024LL)
#define MALLOC(type, size)   (type *)malloc(sizeof(type) * (size))
#define CHECK(s)   { if ((s) < 0) LOG_ERROR; }
#define FATALERRNO   (errno && errno != EAGAIN && errno != EINTR)
#define BCDCHARTOINT(x)   (10 * ((x & 0xF0) >> 4) + (x & 0xF))
#define Utf8BufSize(s)   ((s) * 4)
#define Utf8to(conv, c)   (cCharSetConv::SystemCharacterTable() ? to##conv(c) : tow##conv(c))
#define Utf8is(ccls, c)   (cCharSetConv::SystemCharacterTable() ? is##ccls(c) : isw##ccls(c))
#define HASHSIZE   512

Typedefs

typedef unsigned char uchar

Functions

template<class T >
void DELETENULL (T *&p)
template<class T >
min (T a, T b)
template<class T >
max (T a, T b)
template<class T >
int sgn (T a)
template<class T >
void swap (T &a, T &b)
template<class T >
constrain (T v, T l, T h)
void syslog_with_tid (int priority, const char *format,...) __attribute__((format(printf
int BCD2INT (int x)
template<class T >
get_unaligned (T *p)
template<class T >
void put_unaligned (unsigned int v, T *p)
bool DoubleEqual (double a, double b)
int Utf8CharLen (const char *s)
uint Utf8CharGet (const char *s, int Length=0)
int Utf8CharSet (uint c, char *s=NULL)
int Utf8SymChars (const char *s, int Symbols)
int Utf8StrLen (const char *s)
char * Utf8Strn0Cpy (char *Dest, const char *Src, int n)
int Utf8ToArray (const char *s, uint *a, int Size)
int Utf8FromArray (const uint *a, char *s, int Size, int Max=-1)
ssize_t safe_read (int filedes, void *buffer, size_t size)
ssize_t safe_write (int filedes, const void *buffer, size_t size)
void writechar (int filedes, char c)
int WriteAllOrNothing (int fd, const uchar *Data, int Length, int TimeoutMs=0, int RetryMs=0)
char * strcpyrealloc (char *dest, const char *src)
char * strn0cpy (char *dest, const char *src, size_t n)
char * strreplace (char *s, char c1, char c2)
char * strreplace (char *s, const char *s1, const char *s2)
char * skipspace (const char *s)
char * stripspace (char *s)
char * compactspace (char *s)
cString strescape (const char *s, const char *chars)
bool startswith (const char *s, const char *p)
bool endswith (const char *s, const char *p)
bool isempty (const char *s)
int numdigits (int n)
bool isnumber (const char *s)
int64_t StrToNum (const char *s)
bool StrInArray (const char *a[], const char *s)
cString itoa (int n)
cString AddDirectory (const char *DirName, const char *FileName)
bool EntriesOnSameFileSystem (const char *File1, const char *File2)
int FreeDiskSpaceMB (const char *Directory, int *UsedMB=NULL)
bool DirectoryOk (const char *DirName, bool LogErrors=false)
bool MakeDirs (const char *FileName, bool IsDirectory=false)
bool RemoveFileOrDir (const char *FileName, bool FollowSymlinks=false)
bool RemoveEmptyDirectories (const char *DirName, bool RemoveThis=false, const char *IgnoreFiles[]=NULL)
int DirSizeMB (const char *DirName)
char * ReadLink (const char *FileName)
bool SpinUpDisk (const char *FileName)
void TouchFile (const char *FileName)
time_t LastModifiedTime (const char *FileName)
off_t FileSize (const char *FileName)
cString WeekDayName (int WeekDay)
cString WeekDayName (time_t t)
cString WeekDayNameFull (int WeekDay)
cString WeekDayNameFull (time_t t)
cString DayDateTime (time_t t=0)
cString TimeToString (time_t t)
cString DateString (time_t t)
cString ShortDateString (time_t t)
cString TimeString (time_t t)
ucharRgbToJpeg (uchar *Mem, int Width, int Height, int &Size, int Quality=100)
int CompareStrings (const void *a, const void *b)
int CompareStringsIgnoreCase (const void *a, const void *b)

Variables

int SysLogLevel

Macro Definition Documentation

#define BCDCHARTOINT (   x)    (10 * ((x & 0xF0) >> 4) + (x & 0xF))

Definition at line 64 of file tools.h.

#define CHECK (   s)    { if ((s) < 0) LOG_ERROR; }

Definition at line 50 of file tools.h.

#define dsyslog (   a...)    void( (SysLogLevel > 2) ? syslog_with_tid(LOG_ERR, a) : void() )

Definition at line 36 of file tools.h.

#define esyslog (   a...)    void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR, a) : void() )

Definition at line 34 of file tools.h.

Referenced by cVector< const cTimer * >::Realloc().

#define FATALERRNO   (errno && errno != EAGAIN && errno != EINTR)

Definition at line 51 of file tools.h.

#define HASHSIZE   512

Definition at line 618 of file tools.h.

#define isyslog (   a...)    void( (SysLogLevel > 1) ? syslog_with_tid(LOG_ERR, a) : void() )

Definition at line 35 of file tools.h.

#define KILOBYTE (   n)    ((n) * 1024)

Definition at line 43 of file tools.h.

#define LOG_ERROR   esyslog("ERROR (%s,%d): %m", __FILE__, __LINE__)

Definition at line 38 of file tools.h.

#define LOG_ERROR_STR (   s)    esyslog("ERROR (%s,%d): %s: %m", __FILE__, __LINE__, s)

Definition at line 39 of file tools.h.

#define MALLOC (   type,
  size 
)    (type *)malloc(sizeof(type) * (size))

Definition at line 46 of file tools.h.

#define MEGABYTE (   n)    ((n) * 1024LL * 1024LL)

Definition at line 44 of file tools.h.

#define SECSINDAY   86400

Definition at line 41 of file tools.h.

#define Utf8BufSize (   s)    ((s) * 4)

Definition at line 131 of file tools.h.

#define Utf8is (   ccls,
 
)    (cCharSetConv::SystemCharacterTable() ? is##ccls(c) : isw##ccls(c))

Definition at line 137 of file tools.h.

#define Utf8to (   conv,
 
)    (cCharSetConv::SystemCharacterTable() ? to##conv(c) : tow##conv(c))

Definition at line 136 of file tools.h.

Typedef Documentation

typedef unsigned char uchar

Definition at line 30 of file tools.h.

Function Documentation

cString AddDirectory ( const char *  DirName,
const char *  FileName 
)

Definition at line 300 of file tools.c.

References cString::sprintf().

int BCD2INT ( int  x)

Definition at line 44 of file tools.c.

References BCDCHARTOINT.

char* compactspace ( char *  s)

Definition at line 187 of file tools.c.

References skipspace(), and stripspace().

int CompareStrings ( const void *  a,
const void *  b 
)
inline

Definition at line 561 of file tools.h.

int CompareStringsIgnoreCase ( const void *  a,
const void *  b 
)
inline

Definition at line 566 of file tools.h.

template<class T >
T constrain ( v,
l,
h 
)
inline

Definition at line 60 of file tools.h.

cString DateString ( time_t  t)

Converts the given time to a string of the form "www dd.mm.yyyy".

Definition at line 1062 of file tools.c.

References WeekDayName().

cString DayDateTime ( time_t  t = 0)

Converts the given time to a string of the form "www dd.mm. hh:mm".

If no time is given, the current time is taken.

Definition at line 1041 of file tools.c.

References WeekDayName().

template<class T >
void DELETENULL ( T *&  p)
inline

Definition at line 48 of file tools.h.

bool DirectoryOk ( const char *  DirName,
bool  LogErrors = false 
)

Definition at line 344 of file tools.c.

References esyslog, and LOG_ERROR_STR.

int DirSizeMB ( const char *  DirName)

returns the total size of the files in the given directory, or -1 in case of an error

Definition at line 502 of file tools.c.

References AddDirectory(), DirSizeMB(), LOG_ERROR_STR, MEGABYTE, cReadDir::Next(), and cReadDir::Ok().

bool DoubleEqual ( double  a,
double  b 
)
inline

Definition at line 85 of file tools.h.

bool endswith ( const char *  s,
const char *  p 
)

Definition at line 236 of file tools.c.

bool EntriesOnSameFileSystem ( const char *  File1,
const char *  File2 
)

Definition at line 312 of file tools.c.

References LOG_ERROR_STR.

off_t FileSize ( const char *  FileName)

returns the size of the given file, or -1 in case of an error (e.g. if the file doesn't exist)

Definition at line 594 of file tools.c.

int FreeDiskSpaceMB ( const char *  Directory,
int *  UsedMB = NULL 
)

Definition at line 327 of file tools.c.

References LOG_ERROR_STR.

template<class T >
T get_unaligned ( T *  p)
inline

Definition at line 70 of file tools.h.

bool isempty ( const char *  s)

Definition at line 247 of file tools.c.

References skipspace().

bool isnumber ( const char *  s)

Definition at line 262 of file tools.c.

cString itoa ( int  n)

Definition at line 305 of file tools.c.

time_t LastModifiedTime ( const char *  FileName)

Definition at line 586 of file tools.c.

bool MakeDirs ( const char *  FileName,
bool  IsDirectory = false 
)

Definition at line 362 of file tools.c.

References dsyslog, and LOG_ERROR_STR.

template<class T >
T max ( a,
b 
)
inline

Definition at line 55 of file tools.h.

template<class T >
T min ( a,
b 
)
inline

Definition at line 54 of file tools.h.

int numdigits ( int  n)

Definition at line 252 of file tools.c.

template<class T >
void put_unaligned ( unsigned int  v,
T *  p 
)
inline

Definition at line 76 of file tools.h.

char* ReadLink ( const char *  FileName)

returns a new string allocated on the heap, which the caller must delete (or NULL in case of an error)

Definition at line 534 of file tools.c.

References LOG_ERROR_STR.

bool RemoveEmptyDirectories ( const char *  DirName,
bool  RemoveThis = false,
const char *  IgnoreFiles[] = NULL 
)

Removes all empty directories under the given directory DirName.

If RemoveThis is true, DirName will also be removed if it is empty. IgnoreFiles can be set to an array of file names that will be ignored when considering whether a directory is empty. If IgnoreFiles is given, the array must end with a NULL pointer.

Definition at line 448 of file tools.c.

References AddDirectory(), dsyslog, LOG_ERROR_STR, cReadDir::Next(), cReadDir::Ok(), RemoveEmptyDirectories(), and StrInArray().

bool RemoveFileOrDir ( const char *  FileName,
bool  FollowSymlinks = false 
)

Definition at line 390 of file tools.c.

References AddDirectory(), dsyslog, LOG_ERROR_STR, MALLOC, cReadDir::Next(), and cReadDir::Ok().

uchar* RgbToJpeg ( uchar Mem,
int  Width,
int  Height,
int &  Size,
int  Quality = 100 
)

Converts the given Memory to a JPEG image and returns a pointer to the resulting image.

Mem must point to a data block of exactly (Width * Height) triplets of RGB image data bytes. Upon return, Size will hold the number of bytes of the resulting JPEG data. Quality can be in the range 0..100 and controls the quality of the resulting image, where 100 is "best". The caller takes ownership of the result and has to delete it once it is no longer needed. The result may be NULL in case of an error.

Definition at line 1147 of file tools.c.

References JpegCompressEmptyOutputBuffer(), JpegCompressInitDestination(), JpegCompressTermDestination(), tJpegCompressData::mem, and tJpegCompressData::size.

ssize_t safe_read ( int  filedes,
void *  buffer,
size_t  size 
)

Definition at line 52 of file tools.c.

References dsyslog.

ssize_t safe_write ( int  filedes,
const void *  buffer,
size_t  size 
)

Definition at line 64 of file tools.c.

References dsyslog.

template<class T >
int sgn ( a)
inline

Definition at line 56 of file tools.h.

cString ShortDateString ( time_t  t)

Converts the given time to a string of the form "dd.mm.yy".

Definition at line 1073 of file tools.c.

char* skipspace ( const char *  s)
inline

Definition at line 194 of file tools.h.

References cString::s.

bool SpinUpDisk ( const char *  FileName)

Definition at line 548 of file tools.c.

References DirectoryOk(), dsyslog, esyslog, LOG_ERROR_STR, and cString::sprintf().

bool startswith ( const char *  s,
const char *  p 
)

Definition at line 227 of file tools.c.

char* strcpyrealloc ( char *  dest,
const char *  src 
)

Definition at line 113 of file tools.c.

References esyslog, and max().

cString strescape ( const char *  s,
const char *  chars 
)

Definition at line 204 of file tools.c.

References MALLOC.

bool StrInArray ( const char *  a[],
const char *  s 
)

Returns true if the string s is equal to one of the strings pointed to by the (NULL terminated) array a.

Definition at line 288 of file tools.c.

char* stripspace ( char *  s)

Definition at line 175 of file tools.c.

char* strn0cpy ( char *  dest,
const char *  src,
size_t  n 
)

Definition at line 130 of file tools.c.

char* strreplace ( char *  s,
char  c1,
char  c2 
)

Definition at line 138 of file tools.c.

char* strreplace ( char *  s,
const char *  s1,
const char *  s2 
)

re-allocates 's' and deletes the original string if necessary!

Definition at line 151 of file tools.c.

References esyslog.

int64_t StrToNum ( const char *  s)

Converts the given string to a number.

The numerical part of the string may be followed by one of the letters K, M, G or T to abbreviate Kilo-, Mega-, Giga- or Terabyte, respectively (based on 1024). Everything after the first non-numeric character is silently ignored, as are any characters other than the ones mentioned here.

Definition at line 273 of file tools.c.

template<class T >
void swap ( T &  a,
T &  b 
)
inline

Definition at line 57 of file tools.h.

void syslog_with_tid ( int  priority,
const char *  format,
  ... 
)
cString TimeString ( time_t  t)

Converts the given time to a string of the form "hh:mm".

Definition at line 1082 of file tools.c.

cString TimeToString ( time_t  t)

Converts the given time to a string of the form "www mmm dd hh:mm:ss yyyy".

Definition at line 1052 of file tools.c.

void TouchFile ( const char *  FileName)

Definition at line 580 of file tools.c.

References LOG_ERROR_STR.

uint Utf8CharGet ( const char *  s,
int  Length = 0 
)

Returns the UTF-8 symbol at the beginning of the given string.

Length can be given from a previous call to Utf8CharLen() to avoid calculating it again. If no Length is given, Utf8CharLen() will be called.

Definition at line 688 of file tools.c.

References cCharSetConv::SystemCharacterTable(), SystemToUtf8, and Utf8CharLen().

int Utf8CharLen ( const char *  s)

Returns the number of character bytes at the beginning of the given string that form a UTF-8 symbol.

Definition at line 674 of file tools.c.

References MT, and cCharSetConv::SystemCharacterTable().

int Utf8CharSet ( uint  c,
char *  s = NULL 
)

Converts the given UTF-8 symbol to a sequence of character bytes and copies them to the given string.

Returns the number of bytes written. If no string is given, only the number of bytes is returned and nothing is copied.

Definition at line 703 of file tools.c.

References cCharSetConv::SystemCharacterTable().

int Utf8FromArray ( const uint *  a,
char *  s,
int  Size,
int  Max = -1 
)

Converts the given array of UTF-8 symbols (including the terminating 0) into a sequence of character bytes of at most Size length.

Returns the number of character bytes written (without the terminating 0). If Max is given, only that many symbols will be converted. The resulting string is always zero-terminated if Size is big enough.

Definition at line 799 of file tools.c.

References cCharSetConv::SystemCharacterTable(), and Utf8CharSet().

int Utf8StrLen ( const char *  s)

Returns the number of UTF-8 symbols formed by the given string of character bytes.

Definition at line 750 of file tools.c.

References cCharSetConv::SystemCharacterTable(), and Utf8CharLen().

char* Utf8Strn0Cpy ( char *  Dest,
const char *  Src,
int  n 
)

Copies at most n character bytes from Src to Dest, making sure that the resulting copy ends with a complete UTF-8 symbol.

The copy is guaranteed to be zero terminated. Returns a pointer to Dest.

Definition at line 762 of file tools.c.

References strn0cpy(), cCharSetConv::SystemCharacterTable(), and Utf8CharLen().

int Utf8SymChars ( const char *  s,
int  Symbols 
)

Returns the number of character bytes at the beginning of the given string that form at most the given number of UTF-8 symbols.

Definition at line 737 of file tools.c.

References cCharSetConv::SystemCharacterTable(), and Utf8CharLen().

int Utf8ToArray ( const char *  s,
uint *  a,
int  Size 
)

Converts the given character bytes (including the terminating 0) into an array of UTF-8 symbols of the given Size.

Returns the number of symbols in the array (without the terminating 0).

Definition at line 781 of file tools.c.

References cCharSetConv::SystemCharacterTable(), Utf8CharGet(), and Utf8CharLen().

cString WeekDayName ( int  WeekDay)

Converts the given WeekDay (0=Sunday, 1=Monday, ...) to a three letter day name.

Definition at line 999 of file tools.c.

References min(), strn0cpy(), tr, and Utf8SymChars().

cString WeekDayName ( time_t  t)

Converts the week day of the given time to a three letter day name.

Definition at line 1014 of file tools.c.

References WeekDayName().

cString WeekDayNameFull ( int  WeekDay)

Converts the given WeekDay (0=Sunday, 1=Monday, ...) to a full day name.

Definition at line 1020 of file tools.c.

References tr.

cString WeekDayNameFull ( time_t  t)

Converts the week day of the given time to a full day name.

Definition at line 1035 of file tools.c.

References WeekDayNameFull().

int WriteAllOrNothing ( int  fd,
const uchar Data,
int  Length,
int  TimeoutMs = 0,
int  RetryMs = 0 
)

Writes either all Data to the given file descriptor, or nothing at all.

If TimeoutMs is greater than 0, it will only retry for that long, otherwise it will retry forever. RetryMs defines the time between two retries.

Definition at line 89 of file tools.c.

References cTimeMs::Elapsed(), FATALERRNO, and cPoller::Poll().

void writechar ( int  filedes,
char  c 
)

Definition at line 84 of file tools.c.

References safe_write().

Variable Documentation

int SysLogLevel

Definition at line 30 of file tools.c.