source doc. turned on printf warnings, fixed some printfs

This commit is contained in:
Axel Kittenberger 2010-08-06 13:26:50 +00:00
parent c40cb79894
commit 0e063bd41f

101
lsyncd.c
View File

@ -343,7 +343,14 @@ struct call_option standard_callopts[] = {
* Used for comfortable log messages only. * Used for comfortable log messages only.
*/ */
struct inotify_mask_text { struct inotify_mask_text {
/**
* the bit
*/
int mask; int mask;
/**
* and its meaning
*/
char const * text; char const * text;
}; };
@ -373,10 +380,18 @@ struct inotify_mask_text mask_texts[] = {
*/ */
struct watch_vector { struct watch_vector {
/** /**
* TODO * list of pointers to all watches
*/ */
struct watch **data; struct watch **data;
/**
* number of entries allocated
*/
size_t size; size_t size;
/**
* number of entries used
*/
size_t len; size_t len;
}; };
@ -385,10 +400,18 @@ struct watch_vector {
*/ */
struct delay_vector { struct delay_vector {
/** /**
* TODO * list of pointers to all delays
*/ */
struct watch **data; struct watch **data;
/**
* number of entries allocated
*/
size_t size; size_t size;
/**
* number of entries used
*/
size_t len; size_t len;
}; };
@ -412,13 +435,29 @@ struct exclude_vector {
* have not been freed. Debugging purposes. * have not been freed. Debugging purposes.
*/ */
#ifdef MEMCHECK #ifdef MEMCHECK
#include <search.h> #include <search.h>
/**
* Counts the number of s_[m|c]alloc's.
*/
int memc = 0; int memc = 0;
/**
* A binary tree administered by the clib to store the
* pointers with a short description.
*/
void * mroot = NULL; void * mroot = NULL;
/**
* An entry to that tree
*/
struct mentry { struct mentry {
const void *data; const void *data;
const char *desc; const char *desc;
}; };
/**
* Compares two pointers simply by their address
*/
int mcompare(const void *pa, const void *pb) { int mcompare(const void *pa, const void *pb) {
const struct mentry *ma = (const struct mentry *) pa; const struct mentry *ma = (const struct mentry *) pa;
const struct mentry *mb = (const struct mentry *) pb; const struct mentry *mb = (const struct mentry *) pb;
@ -431,6 +470,9 @@ int mcompare(const void *pa, const void *pb) {
return 0; return 0;
} }
/**
* Prints nonfreed memory usage on exit/HUP
*/
void maction(const void *nodep, const VISIT which, const int depth) { void maction(const void *nodep, const VISIT which, const int depth) {
if (which == leaf || which == postorder) { if (which == leaf || which == postorder) {
struct mentry * r = *((struct mentry **) nodep); struct mentry * r = *((struct mentry **) nodep);
@ -440,10 +482,6 @@ void maction(const void *nodep, const VISIT which, const int depth) {
} }
#endif #endif
#ifndef MEMCHECK
#define s_free(x) free(x)
#endif
/*--------------------------------------------------------------------------* /*--------------------------------------------------------------------------*
* Small generic helper routines. * Small generic helper routines.
* (signal catching, memory fetching, message output) * (signal catching, memory fetching, message output)
@ -509,8 +547,18 @@ terminate(const struct log *log, int status)
* _and_ displayed on screen. If lsyncd daemonized already, * _and_ displayed on screen. If lsyncd daemonized already,
* stderr will be run into the void of /dev/null. * stderr will be run into the void of /dev/null.
*/ */
// activates gcc's printf warnings.
void void
printlogf(const struct log *log, int level, const char *fmt, ...) printlogf(const struct log *log,
int level,
const char *fmt, ...)
__attribute__((format(printf, 3, 4)));
void
printlogf(const struct log *log,
int level,
const char *fmt, ...)
{ {
va_list ap; va_list ap;
char * ct; char * ct;
@ -742,6 +790,10 @@ s_strdup(const struct log *log, const char *src, const char *desc)
#ifdef MEMCHECK #ifdef MEMCHECK
/**
* Only needed when memory usage checking.
* Removes the entry of the freed memory from the tracking tree.
*/
void void
s_free(void *p) { s_free(void *p) {
struct mentry mentry = {0,}; struct mentry mentry = {0,};
@ -758,6 +810,8 @@ s_free(void *p) {
} }
free(p); free(p);
} }
#else
#define s_free(x) free(x)
#endif #endif
/** /**
@ -813,8 +867,6 @@ free_options(struct call_option *options) {
/** /**
* (Re)sets global options to default values. * (Re)sets global options to default values.
*
* TODO memfree's
*/ */
void void
reset_options(struct global_options *opts) { reset_options(struct global_options *opts) {
@ -971,7 +1023,6 @@ append_delay(const struct log *log,
struct watch *watch, struct watch *watch,
clock_t alarm) clock_t alarm)
{ {
printlogf(log, DEBUG, "append_delay(%s, %d)", watch->dirname, alarm);
if (watch->delayed) { if (watch->delayed) {
return false; return false;
} }
@ -1035,7 +1086,7 @@ parse_option_text(const struct log *log, char *text, bool recursive)
case 0: // wtf, '%' was at the end of the string! case 0: // wtf, '%' was at the end of the string!
default : // unknown char default : // unknown char
printlogf(log, ERROR, printlogf(log, ERROR,
"don't know how to handle '\%' specifier in \"%s\"!", *text); "don't know how to handle '%%%c' specifier in \"%s\"!", chr[1], text);
terminate(log, LSYNCD_BADPARAMETERS); terminate(log, LSYNCD_BADPARAMETERS);
} }
} }
@ -1459,7 +1510,7 @@ event_text_to_mask(char * text)
/** /**
* Adds a directory including all subdirectories to watch. * Adds a directory including all subdirectories to watch.
* Puts the directory with all subdirectories on the delay FIFO. * And puts the directory with all subdirectories on the delay FIFO if act is true.
* *
* @param opts global options * @param opts global options
* @param watches the watch vector * @param watches the watch vector
@ -1672,7 +1723,8 @@ get_watch(const struct watch_vector *watches,
* *
* @param opts global options * @param opts global options
* @param watches the watch vector * @param watches the watch vector
* @param delays the delay FIFO. * @param delays the delay FIFO
* @param exlucdes the exclusions
* @param inotify_fd inotify file descriptor * @param inotify_fd inotify file descriptor
* @param event the event to handle * @param event the event to handle
* @param alarm times() moment when it should fire * @param alarm times() moment when it should fire
@ -1755,7 +1807,7 @@ handle_event(const struct global_options *opts,
} }
/** /**
* The control loop waiting for inotify events. * The control loop waiting for inotify events
* *
* @param opts global options * @param opts global options
* @param watches the watch vector * @param watches the watch vector
@ -1783,7 +1835,7 @@ master_loop(const struct global_options *opts,
if (opts->delay > 0) { if (opts->delay > 0) {
if (clocks_per_sec <= 0) { if (clocks_per_sec <= 0) {
printlogf(log, ERROR, "Clocks per seoond invalid! %d", printlogf); printlogf(log, ERROR, "Clocks per second invalid (%li)!", clocks_per_sec);
terminate(log, LSYNCD_INTERNALFAIL); terminate(log, LSYNCD_INTERNALFAIL);
} }
} }
@ -1870,14 +1922,18 @@ master_loop(const struct global_options *opts,
* Utility function to check file exists. * Utility function to check file exists.
* Prints out error message and die. * Prints out error message and die.
* *
* @param log logging information
* @param filename filename to check * @param filename filename to check
* @param errmsg error message to print
*/ */
void void
check_file_exists(const struct log* log, const char* filename, const char *errmsg) check_file_exists(const struct log* log,
const char* filename,
const char *errmsg)
{ {
struct stat st; struct stat st;
if (-1==stat(filename, &st)) { if (-1==stat(filename, &st)) {
printlogf(log, ERROR, "%s [%s] does not exist.\n", filename); printlogf(log, ERROR, "%s [%s] does not exist.\n", errmsg, filename);
terminate(log, LSYNCD_FILENOTFOUND); terminate(log, LSYNCD_FILENOTFOUND);
} }
} }
@ -1885,11 +1941,14 @@ check_file_exists(const struct log* log, const char* filename, const char *errms
/** /**
* Utility function to check given path is absolute path. * Utility function to check given path is absolute path.
* *
* @param filename Filename to check * @param log logging information
* @param errmsg Filetype text to prepend to the error message. * @param filename filename to check
* @param errmsg filetype text to prepend to the error message.
*/ */
void void
check_absolute_path(const struct log* log, const char* filename, const char *filetype) check_absolute_path(const struct log* log,
const char* filename,
const char *filetype)
{ {
if (filename[0] != '/') { if (filename[0] != '/') {
printlogf(log, ERROR, "%s [%s] has do be an absolute path.\n", filetype, filename); printlogf(log, ERROR, "%s [%s] has do be an absolute path.\n", filetype, filename);