projects
/
rrdtool.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix for memory leak. Rene Gallati <security .. draxinusom.ch>
[rrdtool.git]
/
src
/
rrd_tool.h
diff --git
a/src/rrd_tool.h
b/src/rrd_tool.h
index
5ba481b
..
dbfb26b
100644
(file)
--- a/
src/rrd_tool.h
+++ b/
src/rrd_tool.h
@@
-45,6
+45,36
@@
extern "C" {
#if HAVE_MATH_H
# include <math.h>
#endif
#if HAVE_MATH_H
# include <math.h>
#endif
+/* Sorry: don't know autoconf as well how to check the exist of
+ dirent.h ans sys/stat.h
+*/
+
+#if HAVE_DIRENT_H
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
@@
-80,6
+110,10
@@
int isnan(double value);
#define isnan _isnan
#define finite _finite
#define isinf(a) (_fpclass(a) == _FPCLASS_NINF || _fpclass(a) == _FPCLASS_PINF)
#define isnan _isnan
#define finite _finite
#define isinf(a) (_fpclass(a) == _FPCLASS_NINF || _fpclass(a) == _FPCLASS_PINF)
+struct tm* localtime_r(const time_t *timep, struct tm* result);
+char* ctime_r(const time_t *timep, char* result);
+struct tm* gmtime_r(const time_t *timep, struct tm* result);
+char *strtok_r(char *str, const char *sep, char **last);
#endif
/* local include files -- need to be after the system ones */
#endif
/* local include files -- need to be after the system ones */
@@
-99,12
+133,14
@@
int isnan(double value);
/* rrd info interface */
enum info_type { RD_I_VAL=0,
RD_I_CNT,
/* rrd info interface */
enum info_type { RD_I_VAL=0,
RD_I_CNT,
- RD_I_STR };
+ RD_I_STR,
+ RD_I_INT };
typedef union infoval {
unsigned long u_cnt;
rrd_value_t u_val;
char *u_str;
typedef union infoval {
unsigned long u_cnt;
rrd_value_t u_val;
char *u_str;
+ int u_int;
} infoval;
typedef struct info_t {
} infoval;
typedef struct info_t {
@@
-114,8
+150,10
@@
typedef struct info_t {
struct info_t *next;
} info_t;
struct info_t *next;
} info_t;
-
info_t *rrd_info(int, char **);
info_t *rrd_info(int, char **);
+info_t *rrd_update_v(int, char **);
+char * sprintf_alloc(char *, ...);
+info_t *info_push(info_t *, char *, enum info_type, infoval);
/* HELPER FUNCTIONS */
/* HELPER FUNCTIONS */
@@
-130,10
+168,11
@@
int rrd_fetch_fn(char *filename, enum cf_en cf_idx,
rrd_value_t **data);
void rrd_free(rrd_t *rrd);
rrd_value_t **data);
void rrd_free(rrd_t *rrd);
+void rrd_freemem(void *mem);
void rrd_init(rrd_t *rrd);
void rrd_init(rrd_t *rrd);
-int rrd_open(char *file_name, FILE **in_file, rrd_t *rrd, int rdwr);
-int readfile(char *file, char **buffer, int skipfirst);
+int rrd_open(c
onst c
har *file_name, FILE **in_file, rrd_t *rrd, int rdwr);
+int readfile(c
onst c
har *file, char **buffer, int skipfirst);
#define RRD_READONLY 0
#define RRD_READWRITE 1
#define RRD_READONLY 0
#define RRD_READWRITE 1
@@
-143,6
+182,11
@@
enum dst_en dst_conv(char *string);
long ds_match(rrd_t *rrd,char *ds_nam);
double rrd_diff(char *a, char *b);
long ds_match(rrd_t *rrd,char *ds_nam);
double rrd_diff(char *a, char *b);
+ /* rrd_strerror is thread safe, but still it uses a global buffer
+ (but one per thread), thus subsequent calls within a single
+ thread overwrite the same buffer */
+const char *rrd_strerror(int err);
+
#endif
#ifdef __cplusplus
#endif
#ifdef __cplusplus