Wirte formatted error messages into a memory buffer.
This module is not thread safe.
LogBuffer | Wirte formatted error messages into a memory buffer. |
Copyright | This program is free software. |
Files | |
C-kern/ | Header file LogBuffer. |
C-kern/ | Implementation file LogBuffer impl. |
Types | |
struct logbuffer_t | Export logbuffer_t into global namespace. |
Functions | |
test | |
unittest_io_writer_log_logbuffer | Test logbuffer_t functionality. |
logbuffer_t | A logbuffer_t writes error messages to a buffer. |
addr | Holds start address of memory buffer. |
size | Holds size in bytes of memory buffer. |
logsize | Stores the size in bytes of the buffered log entries. |
io | Holds iochannel the log is written to. |
lifetime | |
logbuffer_FREE | Static initializer. |
logbuffer_INIT | Static initializer. |
init_logbuffer | Initializes object. |
free_logbuffer | Clears all members. |
query | |
sizefree_logbuffer | Returns free size usable by the next written entry. |
io_logbuffer | Returns the iochannel_t the content of the buffer is written to. |
getbuffer_logbuffer | Returns the start address of the memory buffer and size of written log. |
compare_logbuffer | Returns 0 if logbuffer compares equal to content in logbuf. |
update | |
clear_logbuffer | Clears the buffer without writting it out. |
write_logbuffer | Writes (flushes) the buffer to the configured io channel. |
printf_logbuffer | Writes new log entry to log buffer. |
printheader_logbuffer | Appends header to log buffer. |
vprintf_logbuffer | Same as printf_logbuffer. |
inline implementation | |
Macros | |
clear_logbuffer | Implements logbuffer_t.clear_logbuffer. |
getbuffer_logbuffer | Implements logbuffer_t.getbuffer_logbuffer. |
io_logbuffer | Implements logbuffer_t.io_logbuffer. |
sizefree_logbuffer | Implements logbuffer_t.sizefree_logbuffer. |
This program is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
© 2013 Jörg Seebohn
Header file LogBuffer.
Implementation file LogBuffer impl.
typedef struct logbuffer_t logbuffer_t
Export logbuffer_t into global namespace.
test | |
unittest_io_writer_log_logbuffer | Test logbuffer_t functionality. |
int unittest_io_writer_log_logbuffer( void )
Test logbuffer_t functionality.
struct logbuffer_t
A logbuffer_t writes error messages to a buffer. If a new messages is always appended and it is truncated if there is no more space in the buffer. If new messages should not be appended and less then log_config_MINSIZE plus “terminating \0 byte” bytes are free the buffer is written to a configured iochannel_t before the new message is written into the buffer.
addr | Holds start address of memory buffer. |
size | Holds size in bytes of memory buffer. |
logsize | Stores the size in bytes of the buffered log entries. |
io | Holds iochannel the log is written to. |
lifetime | |
logbuffer_FREE | Static initializer. |
logbuffer_INIT | Static initializer. |
init_logbuffer | Initializes object. |
free_logbuffer | Clears all members. |
query | |
sizefree_logbuffer | Returns free size usable by the next written entry. |
io_logbuffer | Returns the iochannel_t the content of the buffer is written to. |
getbuffer_logbuffer | Returns the start address of the memory buffer and size of written log. |
compare_logbuffer | Returns 0 if logbuffer compares equal to content in logbuf. |
update | |
clear_logbuffer | Clears the buffer without writting it out. |
write_logbuffer | Writes (flushes) the buffer to the configured io channel. |
printf_logbuffer | Writes new log entry to log buffer. |
printheader_logbuffer | Appends header to log buffer. |
vprintf_logbuffer | Same as printf_logbuffer. |
#define logbuffer_INIT( size, addr, io ) { (addr), (size), ((addr)[0] = 0), (io) }
Static initializer. You do not need to free an object initialized in such a manner but you can.
size | Size of a temporary or static buffer. |
addr | Start address of the buffer. |
io | iochannel_t the buffer is written to. |
int free_logbuffer( logbuffer_t * logbuf )
Clears all members. The memory is not freed it is considered managed by the calling object. The configured iochannel_t is freed if it does not equal iochannel_STDERR or iochannel_STDOUT.
uint32_t sizefree_logbuffer( const logbuffer_t * logbuf )
Returns free size usable by the next written entry. Call write_logbuffer if this value is less than log_config_MINSIZE+”terminating \0 byte”.
sys_iochannel_t io_logbuffer( const logbuffer_t * logbuf )
Returns the iochannel_t the content of the buffer is written to.
int compare_logbuffer( const logbuffer_t * logbuf, size_t logsize, const uint8_t logbuffer[logsize] )
Returns 0 if logbuffer compares equal to content in logbuf. The compare equal the logsize must much and all written texts. The timestamps are not compared so they are allowed to differ. The value EINVAL is returned in case the comparison is not equal.
void printf_logbuffer( logbuffer_t * logbuf, const char * format, ... ) __attribute__ ((__format__ (__printf__, 2, 3)))
Writes new log entry to log buffer. If the written content is bigger than sizefree_logbuffer it is truncated. A truncated message is indicated by “ ...” as last characters in the buffer.
void vprintf_logbuffer( logbuffer_t * logbuf, const char * format, va_list args )
Same as printf_logbuffer. The argument after format must be of type va_list and replaces the variable number of argumens in printf_logbuffer.
Macros | |
clear_logbuffer | Implements logbuffer_t.clear_logbuffer. |
getbuffer_logbuffer | Implements logbuffer_t.getbuffer_logbuffer. |
io_logbuffer | Implements logbuffer_t.io_logbuffer. |
sizefree_logbuffer | Implements logbuffer_t.sizefree_logbuffer. |
#define clear_logbuffer( logbuf ) ( __extension__ ({ logbuffer_t * _lb ; _lb = (logbuf) ; _lb->addr[0] = 0 ; _lb->logsize = 0 ; }))
Implements logbuffer_t.clear_logbuffer.
#define getbuffer_logbuffer( logbuf, _addr, _logsize ) ( __extension__ ({ const logbuffer_t * _lb ; _lb = (logbuf) ; *(_addr) = _lb->addr ; *(_logsize) = _lb->logsize ; }))
Implements logbuffer_t.getbuffer_logbuffer.
#define io_logbuffer( logbuf ) ((logbuf)->io)
Implements logbuffer_t.io_logbuffer.
#define sizefree_logbuffer( logbuf ) ( __extension__ ({ const logbuffer_t * _lb ; _lb = (logbuf) ; _lb->size - _lb->logsize ; }))
Implements logbuffer_t.sizefree_logbuffer.
Export logbuffer_t into global namespace.
typedef struct logbuffer_t logbuffer_t
A logbuffer_t writes error messages to a buffer.
struct logbuffer_t
Test logbuffer_t functionality.
int unittest_io_writer_log_logbuffer( void )
Holds start address of memory buffer.
uint8_t * addr
Holds size in bytes of memory buffer.
uint32_t size
Stores the size in bytes of the buffered log entries.
uint32_t logsize
Holds iochannel the log is written to.
sys_iochannel_t io
Static initializer.
#define logbuffer_FREE { 0, 0, 0, sys_iochannel_FREE }
Static initializer.
#define logbuffer_INIT( size, addr, io ) { (addr), (size), ((addr)[0] = 0), (io) }
Initializes object.
int init_logbuffer( /*out*/logbuffer_t * logbuf, uint32_t buffer_size, uint8_t buffer_addr[buffer_size], sys_iochannel_t io )
Clears all members.
int free_logbuffer( logbuffer_t * logbuf )
Returns free size usable by the next written entry.
uint32_t sizefree_logbuffer( const logbuffer_t * logbuf )
Returns the iochannel_t the content of the buffer is written to.
sys_iochannel_t io_logbuffer( const logbuffer_t * logbuf )
Describes an input/output channel like a file or network connection.
typedef sys_iochannel_t iochannel_t
Returns the start address of the memory buffer and size of written log.
void getbuffer_logbuffer( const logbuffer_t * logbuf, /*out*/uint8_t ** addr, /*out*/size_t * logsize )
Returns 0 if logbuffer compares equal to content in logbuf.
int compare_logbuffer( const logbuffer_t * logbuf, size_t logsize, const uint8_t logbuffer[logsize] )
Clears the buffer without writting it out.
void clear_logbuffer( logbuffer_t * logbuf )
Writes (flushes) the buffer to the configured io channel.
int write_logbuffer( logbuffer_t * logbuf )
Writes new log entry to log buffer.
void printf_logbuffer( logbuffer_t * logbuf, const char * format, ... ) __attribute__ ((__format__ (__printf__, 2, 3)))
Appends header to log buffer.
void printheader_logbuffer( logbuffer_t * logbuf, const struct log_header_t * header )
Same as printf_logbuffer.
void vprintf_logbuffer( logbuffer_t * logbuf, const char * format, va_list args )
Implements logbuffer_t.clear_logbuffer.
#define clear_logbuffer( logbuf ) ( __extension__ ({ logbuffer_t * _lb ; _lb = (logbuf) ; _lb->addr[0] = 0 ; _lb->logsize = 0 ; }))
Implements logbuffer_t.getbuffer_logbuffer.
#define getbuffer_logbuffer( logbuf, _addr, _logsize ) ( __extension__ ({ const logbuffer_t * _lb ; _lb = (logbuf) ; *(_addr) = _lb->addr ; *(_logsize) = _lb->logsize ; }))
Implements logbuffer_t.io_logbuffer.
#define io_logbuffer( logbuf ) ((logbuf)->io)
Implements logbuffer_t.sizefree_logbuffer.
#define sizefree_logbuffer( logbuf ) ( __extension__ ({ const logbuffer_t * _lb ; _lb = (logbuf) ; _lb->size - _lb->logsize ; }))