X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_fetch_libdbi.c;h=fb0dc7e81aef9b3794e28fea962ec19fe8a040a3;hp=ad9a7664d0439af7fb20bb22e8a483b496e759fa;hb=c3c9e029ac5763156769afdbb3c6846316c70dd5;hpb=d4110e29da41ce702bcc3327e86768c6f266915e diff --git a/src/rrd_fetch_libdbi.c b/src/rrd_fetch_libdbi.c index ad9a766..fb0dc7e 100644 --- a/src/rrd_fetch_libdbi.c +++ b/src/rrd_fetch_libdbi.c @@ -1,4 +1,5 @@ #include "rrd_tool.h" +#include "unused.h" #include #include @@ -17,20 +18,20 @@ struct sql_table_helper { }; /* the prototypes */ -void _sql_close(struct sql_table_helper* th); -int _sql_setparam(struct sql_table_helper* th,char* key, char* value); -int _sql_fetchrow(struct sql_table_helper* th,time_t *timestamp, rrd_value_t *value,int ordered); -char* _find_next_separator(char* start,char separator); -char* _find_next_separator_twice(char*start,char separator); -char _hexcharhelper(char c); -int _inline_unescape (char* string); -double rrd_fetch_dbi_double(dbi_result *result,int idx); -long rrd_fetch_dbi_long(dbi_result *result,int idx); +static void _sql_close(struct sql_table_helper* th); +static int _sql_setparam(struct sql_table_helper* th,char* key, char* value); +static int _sql_fetchrow(struct sql_table_helper* th,time_t *timestamp, rrd_value_t *value,int ordered); +static char* _find_next_separator(char* start,char separator); +static char* _find_next_separator_twice(char*start,char separator); +static char _hexcharhelper(char c); +static int _inline_unescape (char* string); +static double rrd_fetch_dbi_double(dbi_result *result,int idx); +static long rrd_fetch_dbi_long(dbi_result *result,int idx); /* the real code */ /* helpers to get correctly converted values from DB*/ -long rrd_fetch_dbi_long(dbi_result *result,int idx) { +static long rrd_fetch_dbi_long(dbi_result *result,int idx) { char *ptmp=""; long value=DNAN; /* get the attributes for this filed */ @@ -87,7 +88,7 @@ long rrd_fetch_dbi_long(dbi_result *result,int idx) { return value; } -double rrd_fetch_dbi_double(dbi_result *result,int idx) { +static double rrd_fetch_dbi_double(dbi_result *result,int idx) { char *ptmp=""; double value=DNAN; /* get the attributes for this filed */ @@ -144,7 +145,7 @@ double rrd_fetch_dbi_double(dbi_result *result,int idx) { return value; } -void _sql_close(struct sql_table_helper* th) { +static void _sql_close(struct sql_table_helper* th) { /* close only if connected */ if (th->conn) { if (getenv("RRDDEBUGSQL")) { fprintf(stderr,"RRDDEBUGSQL: %li: close connection\n",time(NULL) ); } @@ -158,7 +159,7 @@ void _sql_close(struct sql_table_helper* th) { } } -int _sql_setparam(struct sql_table_helper* th,char* key, char* value) { +static int _sql_setparam(struct sql_table_helper* th,char* key, char* value) { char* dbi_errstr=NULL; dbi_driver driver; /* if not connected */ @@ -200,7 +201,7 @@ int _sql_setparam(struct sql_table_helper* th,char* key, char* value) { return 0; } -int _sql_fetchrow(struct sql_table_helper* th,time_t *timestamp, rrd_value_t *value,int ordered) { +static int _sql_fetchrow(struct sql_table_helper* th,time_t *timestamp, rrd_value_t *value,int ordered) { char* dbi_errstr=NULL; char sql[10240]; time_t startt=0,endt=0; @@ -269,7 +270,7 @@ int _sql_fetchrow(struct sql_table_helper* th,time_t *timestamp, rrd_value_t *va return 1; } -char* _find_next_separator(char* start,char separator) { +static char* _find_next_separator(char* start,char separator) { char* found=strchr(start,separator); /* have we found it */ if (found) { @@ -282,7 +283,7 @@ char* _find_next_separator(char* start,char separator) { return NULL; } -char* _find_next_separator_twice(char*start,char separator) { +static char* _find_next_separator_twice(char*start,char separator) { char *found=start; /* find next separator in string*/ while (found) { @@ -300,7 +301,7 @@ char* _find_next_separator_twice(char*start,char separator) { return NULL; } -char _hexcharhelper(char c) { +static char _hexcharhelper(char c) { switch (c) { case '0': return 0 ; break; case '1': return 1 ; break; @@ -328,7 +329,7 @@ char _hexcharhelper(char c) { return -1; } -int _inline_unescape (char* string) { +static int _inline_unescape (char* string) { char *src=string; char *dst=string; char c,h1,h2; @@ -341,9 +342,15 @@ int _inline_unescape (char* string) { } else { /* try to calculate hex value from the next 2 values*/ h1=_hexcharhelper(*src); - if (h1<0) { rrd_set_error( "string escape error at: %s\n",string);return(1); } + if (h1 == (char)-1) { + rrd_set_error("string escape error at: %s\n",string); + return(1); + } h2=_hexcharhelper(*(src+1)); - if (h2<0) { rrd_set_error( "string escape error at: %s\n",string);return(1); } + if (h1 == (char)-1) { + rrd_set_error("string escape error at: %s\n",string); + return(1); + } c=h2+(h1<<4); /* increase src pointer by 2 skiping 2 chars */ src+=2; @@ -358,8 +365,8 @@ int _inline_unescape (char* string) { int rrd_fetch_fn_libdbi( - char *filename, /* name of the rrd */ - enum cf_en cf_idx, /* which consolidation function ?*/ + const char *filename, /* name of the rrd */ + enum cf_en UNUSED(cf_idx), /* consolidation function */ time_t *start, time_t *end, /* which time frame do you want ? * will be changed to represent reality */ @@ -394,6 +401,7 @@ rrd_fetch_fn_libdbi( char where[10240]; table_help.conn=NULL; table_help.where=where; + table_help.filtename=filename; /* some loop variables */ int i=0; @@ -557,7 +565,7 @@ rrd_fetch_fn_libdbi( } /* allocate memory for resultset (with the following columns: min,avg,max,count,sigma) */ - i=rows * sizeof(rrd_value_t)*(*ds_cnt); + i=(rows+1) * sizeof(rrd_value_t)*(*ds_cnt); if (((*data) = malloc(i))==NULL){ /* and return error */ rrd_set_error("malloc failed for %i bytes",i);