}
#endif
+/*
+ * rrd_tool.h includes config.h, but at least on Ubuntu Breezy Badger
+ * 5.10 with gcc 4.0.2, the C preprocessor picks up Perl's config.h
+ * which is included from the Perl includes and never reads rrdtool's
+ * config.h. Without including rrdtool's config.h, this module does
+ * not compile, so include it here with an explicit path.
+ *
+ * Because rrdtool's config.h redefines VERSION which is originally
+ * set via Perl's Makefile.PL and passed down to the C compiler's
+ * command line, save the original value and reset it after the
+ * includes.
+ */
+#define VERSION_SAVED VERSION
+#undef VERSION
+#ifndef WIN32
+#include "../../rrd_config.h"
+#endif
#include "../../src/rrd_tool.h"
+#undef VERSION
+#define VERSION VERSION_SAVED
+#undef VERSION_SAVED
/* perl 5.004 compatibility */
-#if PERLPATCHLEVEL < 5
+#ifndef PL_sv_undef
#define PL_sv_undef sv_undef
#endif
argv[i+1] = (char *) malloc((strlen(handle)+1)*sizeof(char)); \
strcpy(argv[i+1],handle); \
} \
- optind=0; opterr=0; \
rrd_clear_error();\
RETVAL=name(items+1,argv); \
for (i=0; i < items; i++) {\
argv[i+1] = (char *) malloc((strlen(handle)+1)*sizeof(char)); \
strcpy(argv[i+1],handle); \
} \
- optind=0; opterr=0; \
rrd_clear_error(); \
data=name(items+1, argv); \
for (i=0; i < items; i++) { \
free(argv); \
if (rrd_test_error()) XSRETURN_UNDEF; \
hash = newHV(); \
+ save=data; \
while (data) { \
- save=data; \
/* the newSV will get copied by hv so we create it as a mortal \
to make sure it does not keep hanging round after the fact */ \
switch (data->type) { \
break; \
case RD_I_STR: \
hvs(newSVpv(data->value.u_str,0)); \
- rrd_freemem(data->value.u_str); \
+ break; \
+ case RD_I_BLO: \
+ hvs(newSVpv(data->value.u_blo.ptr,data->value.u_blo.size)); \
break; \
} \
- rrd_freemem(data->key); \
data = data->next; \
- rrd_freemem(save); \
- } \
- rrd_freemem(data); \
+ } \
+ rrd_info_free(save); \
RETVAL = newRV_noinc((SV*)hash);
/*
#ifdef MUST_DISABLE_FPMASK
fpsetmask(0);
#endif
-
SV*
rrd_error()
OUTPUT:
RETVAL
-
int
rrd_last(...)
PROTOTYPE: @
OUTPUT:
RETVAL
+int
+rrd_first(...)
+ PROTOTYPE: @
+ PREINIT:
+ int i;
+ char **argv;
+ CODE:
+ rrdcode(rrd_first);
+ OUTPUT:
+ RETVAL
int
rrd_create(...)
OUTPUT:
RETVAL
-
int
rrd_update(...)
PROTOTYPE: @
OUTPUT:
RETVAL
-
int
rrd_tune(...)
PROTOTYPE: @
OUTPUT:
RETVAL
-
-void
+SV *
rrd_graph(...)
PROTOTYPE: @
PREINIT:
char **calcpr=NULL;
int i,xsize,ysize;
+ double ymin,ymax;
char **argv;
AV *retar;
PPCODE:
argv[i+1] = (char *) malloc((strlen(handle)+1)*sizeof(char));
strcpy(argv[i+1],handle);
}
- optind=0; opterr=0;
rrd_clear_error();
- rrd_graph(items+1,argv,&calcpr,&xsize,&ysize,NULL);
+ rrd_graph(items+1,argv,&calcpr,&xsize,&ysize,NULL,&ymin,&ymax);
for (i=0; i < items; i++) {
free(argv[i+1]);
}
PUSHs(sv_2mortal(newSViv(xsize)));
PUSHs(sv_2mortal(newSViv(ysize)));
-void
+SV *
rrd_fetch(...)
PROTOTYPE: @
PREINIT:
argv[i+1] = (char *) malloc((strlen(handle)+1)*sizeof(char));
strcpy(argv[i+1],handle);
}
- optind=0; opterr=0;
rrd_clear_error();
rrd_fetch(items+1,argv,&start,&end,&step,&ds_cnt,&ds_namv,&data);
for (i=0; i < items; i++) {
PUSHs(sv_2mortal(newRV_noinc((SV*)names)));
PUSHs(sv_2mortal(newRV_noinc((SV*)retar)));
-void
+SV *
rrd_times(start, end)
char *start
char *end
PREINIT:
- struct rrd_time_value start_tv, end_tv;
+ rrd_time_value_t start_tv, end_tv;
char *parsetime_error = NULL;
time_t start_tmp, end_tmp;
PPCODE:
rrd_clear_error();
- if( (parsetime_error = parsetime( start, &start_tv))) {
- rrd_set_error( "start time: %s", parsetime_error);
+ if ((parsetime_error = rrd_parsetime(start, &start_tv))) {
+ rrd_set_error("start time: %s", parsetime_error);
XSRETURN_UNDEF;
}
- if( (parsetime_error = parsetime( end, &end_tv))) {
- rrd_set_error( "end time: %s", parsetime_error);
+ if ((parsetime_error = rrd_parsetime(end, &end_tv))) {
+ rrd_set_error("end time: %s", parsetime_error);
XSRETURN_UNDEF;
}
- if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
+ if (rrd_proc_start_end(&start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
XSRETURN_UNDEF;
}
EXTEND(sp,2);
argv[i+1] = (char *) malloc((strlen(handle)+1)*sizeof(char));
strcpy(argv[i+1],handle);
}
- optind=0; opterr=0;
rrd_clear_error();
rrd_xport(items+1,argv,&xsize,&start,&end,&step,&col_cnt,&legend_v,&data);
for (i=0; i < items; i++) {
rrd_info(...)
PROTOTYPE: @
PREINIT:
- info_t *data,*save;
+ rrd_info_t *data,*save;
int i;
char **argv;
HV *hash;
rrd_updatev(...)
PROTOTYPE: @
PREINIT:
- info_t *data,*save;
+ rrd_info_t *data,*save;
int i;
char **argv;
HV *hash;
OUTPUT:
RETVAL
+SV*
+rrd_graphv(...)
+ PROTOTYPE: @
+ PREINIT:
+ rrd_info_t *data,*save;
+ int i;
+ char **argv;
+ HV *hash;
+ CODE:
+ rrdinfocode(rrd_graph_v);
+ OUTPUT:
+ RETVAL
+
int
rrd_dump(...)
PROTOTYPE: @
OUTPUT:
RETVAL
+#ifndef WIN32
+int
+rrd_flushcached(...)
+ PROTOTYPE: @
+ PREINIT:
+ int i;
+ char **argv;
+ CODE:
+ rrdcode(rrd_flushcached);
+ OUTPUT:
+ RETVAL
+
+#endif