summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f544559)
raw | patch | inline | side by side (parent: f544559)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Tue, 2 Feb 2010 17:07:20 +0000 (17:07 +0000) | ||
committer | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Tue, 2 Feb 2010 17:07:20 +0000 (17:07 +0000) |
src/rrd_cgi.c | patch | blob | history |
diff --git a/src/rrd_cgi.c b/src/rrd_cgi.c
index 45bf1609d1ae835fa0e0405ae3913fc38fffce02..f6313f869dc0cc725e39e9107283a275571b8a8b 100644 (file)
--- a/src/rrd_cgi.c
+++ b/src/rrd_cgi.c
int curarg_contains_rrd_directives;
/* local array of arguments while parsing */
- int argc = 0;
+ int argc = 1;
char **argv;
#ifdef DEBUG_PARSER
if (!argv) {
return NULL;
}
+ argv[0] = "rrdcgi";
/* skip leading blanks */
while (isspace((int) *line)) {
argv[argc - 1] = rrd_expand_vars(stralloc(argv[argc - 1]));
}
#ifdef DEBUG_PARSER
- if (argc > 0) {
+ if (argc > 1) {
int n;
printf("<-- arguments found [%d]\n", argc);
#endif
/* update caller's notion of the argument array and it's size */
- *arguments = argv;
- *argument_count = argc;
+
+ /* note this is a bit of a hack since the rrd_cgi code used to just put
+ its arguments into a normal array starting at 0 ... since the rrd_*
+ commands expect and argc/argv array we used to just shift everything
+ by -1 ... this in turn exploded when a rrd_* function tried to print
+ argv[0] ... hence we are now doing everything in argv style but hand
+ over seemingly the old array ... but doing argv-1 will actually end
+ up in a 'good' place now. */
+
+ *arguments = argv+1;
+ *argument_count = argc-1;
if (Quote) {
return NULL;
if (end) {
/* got arguments, call function for 'tag' with arguments */
val = func(argc, (const char **) args);
- free(args);
+ free(args-1);
} else {
/* unable to parse arguments, undo 0-termination by scanargs */
for (; argc > 0; argc--) {