diff --git a/src/rrd_cgi.c b/src/rrd_cgi.c
index 17a6b16b97f64919957f0221cbcc6ce9b3fee094..9f0a0bd879afe822e28e9ec759a782955a597bda 100644 (file)
--- a/src/rrd_cgi.c
+++ b/src/rrd_cgi.c
/*****************************************************************************
- * RRDtool 1.2.11 Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.29 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_cgi.c RRD Web Page Generator
*****************************************************************************/
/* for how long is the output of the cgi valid ? */
char* rrdgoodfor(long, const char **);
+/* return rrdcgi version string */
+char* rrdgetinternal(long, const char **);
+
char* rrdstrip(char *buf);
char* scanargs(char *line, int *argc, char ***args);
parse(&buffer, i, "<RRD::TIME::LAST", printtimelast);
parse(&buffer, i, "<RRD::TIME::NOW", printtimenow);
parse(&buffer, i, "<RRD::TIME::STRFTIME", printstrftime);
+ parse(&buffer, i, "<RRD::INTERNAL", rrdgetinternal);
}
return buffer;
}
if (calcpr) {
free(calcpr);
}
+ calcpr=NULL;
}
}
parse(&buffer, i, "<RRD::TIME::LAST", printtimelast);
parse(&buffer, i, "<RRD::TIME::NOW", printtimenow);
parse(&buffer, i, "<RRD::TIME::STRFTIME", printstrftime);
+ parse(&buffer, i, "<RRD::INTERNAL", rrdgetinternal);
}
if (!filter) {
if (envvar) {
return stralloc(envvar);
} else {
-#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
- _snprintf(buf, sizeof(buf), "[ERROR:_getenv_'%s'_failed", args[0]);
-#else
snprintf(buf, sizeof(buf), "[ERROR:_getenv_'%s'_failed", args[0]);
-#endif
return stralloc(buf);
}
}
if (value) {
return stralloc(value);
} else {
-#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
- _snprintf(buf, sizeof(buf), "[ERROR:_getvar_'%s'_failed", args[0]);
-#else
snprintf(buf, sizeof(buf), "[ERROR:_getvar_'%s'_failed", args[0]);
-#endif
return stralloc(buf);
}
}
return stralloc("");
}
+char* rrdgetinternal(long argc, const char **args){
+ if (argc == 1) {
+ if( strcasecmp( args[0], "VERSION") == 0) {
+ return stralloc(PACKAGE_VERSION);
+ } else if( strcasecmp( args[0], "COMPILETIME") == 0) {
+ return stralloc(__DATE__ " " __TIME__);
+ } else {
+ return stralloc("[ERROR: internal unknown argument]");
+ }
+ } else {
+ return stralloc("[ERROR: internal expected 1 argument]");
+ }
+}
+
/* Format start or end times using strftime. We always need both the
* start and end times, because, either might be relative to the other.
* */
/* Make sure that we were given the right number of args */
if( argc != 4) {
rrd_set_error( "wrong number of args %d", argc);
- return (char *) -1;
+ return stralloc("");
}
/* Init start and end time */
/* Parse the start and end times we were given */
if( (parsetime_error = parsetime( args[1], &start_tv))) {
rrd_set_error( "start time: %s", parsetime_error);
- return (char *) -1;
+ return stralloc("");
}
if( (parsetime_error = parsetime( args[2], &end_tv))) {
rrd_set_error( "end time: %s", parsetime_error);
- return (char *) -1;
+ return stralloc("");
}
if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
- return (char *) -1;
+ return stralloc("");
}
/* Do we do the start or end */
}
else {
rrd_set_error( "start/end not found in '%s'", args[0]);
- return (char *) -1;
+ return stralloc("");
}
/* now format it */
}
else {
rrd_set_error( "strftime failed");
- return (char *) -1;
+ return stralloc("");
}
}
char *err = malloc((strlen(rrd_get_error())+DS_NAM_SIZE)*sizeof(char));
sprintf(err, "[ERROR: %s]",rrd_get_error());
rrd_clear_error();
- calfree();
return err;
}
}
if (i<numargs) {
/* try to find out if there's already such a variable */
- for (k=0; k<i && (strncmp (result[k]->name,cp, esp-cp) || !(strlen (result[k]->name) == esp-cp)); k++);
+ for (k=0; k<i && (strncmp (result[k]->name,cp, esp-cp) || !(strlen (result[k]->name) == (size_t)(esp-cp))); k++);
if (k == i) { /* No such variable yet */
if ((result[i] = (s_var *)malloc(sizeof(s_var))) == NULL)