projects
/
rrdtool.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add some extra checks to RRA arguments
[rrdtool.git]
/
src
/
rrd_first.c
diff --git
a/src/rrd_first.c
b/src/rrd_first.c
index
0bd3f45
..
80b9e17
100644
(file)
--- a/
src/rrd_first.c
+++ b/
src/rrd_first.c
@@
-1,12
+1,14
@@
/*****************************************************************************
/*****************************************************************************
- * RRDtool 1.
2.23 Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.
4.3 Copyright by Tobi Oetiker, 1997-2010
*****************************************************************************
* rrd_first Return
*****************************************************************************
* Initial version by Burton Strauss, ntopSupport.com - 3/2005
*****************************************************************************/
*****************************************************************************
* rrd_first Return
*****************************************************************************
* Initial version by Burton Strauss, ntopSupport.com - 3/2005
*****************************************************************************/
+#include <stdlib.h>
#include "rrd_tool.h"
#include "rrd_tool.h"
+#include "rrd_client.h"
time_t rrd_first(
time_t rrd_first(
@@
-15,19
+17,21
@@
time_t rrd_first(
{
int target_rraindex = 0;
char *endptr;
{
int target_rraindex = 0;
char *endptr;
+ char *opt_daemon = NULL;
+ struct option long_options[] = {
+ {"rraindex", required_argument, 0, 129},
+ {"daemon", required_argument, 0, 'd'},
+ {0, 0, 0, 0}
+ };
optind = 0;
opterr = 0; /* initialize getopt */
while (1) {
optind = 0;
opterr = 0; /* initialize getopt */
while (1) {
- static struct option long_options[] = {
- {"rraindex", required_argument, 0, 129},
- {0, 0, 0, 0}
- };
int option_index = 0;
int opt;
int option_index = 0;
int opt;
- opt = getopt_long(argc, argv, "", long_options, &option_index);
+ opt = getopt_long(argc, argv, "
d:F
", long_options, &option_index);
if (opt == EOF)
break;
if (opt == EOF)
break;
@@
-40,19
+44,35
@@
time_t rrd_first(
return (-1);
}
break;
return (-1);
}
break;
+ case 'd':
+ if (opt_daemon != NULL)
+ free (opt_daemon);
+ opt_daemon = strdup (optarg);
+ if (opt_daemon == NULL)
+ {
+ rrd_set_error ("strdup failed.");
+ return (-1);
+ }
+ break;
default:
default:
- rrd_set_error("usage rrdtool %s [--rraindex number] file.rrd",
+ rrd_set_error("usage rrdtool %s [--rraindex number]
[--daemon <addr>]
file.rrd",
argv[0]);
return (-1);
}
}
if (optind >= argc) {
argv[0]);
return (-1);
}
}
if (optind >= argc) {
- rrd_set_error("not enough arguments");
+ rrd_set_error("usage rrdtool %s [--rraindex number] [--daemon <addr>] file.rrd",
+ argv[0]);
return -1;
}
return -1;
}
+ rrdc_connect (opt_daemon);
+ if (rrdc_is_connected (opt_daemon)) {
+ return (rrdc_first (argv[optind], target_rraindex));
+ } else {
return (rrd_first_r(argv[optind], target_rraindex));
return (rrd_first_r(argv[optind], target_rraindex));
+ }
}
}
@@
-61,21
+81,19
@@
time_t rrd_first_r(
const int rraindex)
{
off_t rra_start, timer;
const int rraindex)
{
off_t rra_start, timer;
- time_t then;
+ time_t then
= -1
;
rrd_t rrd;
rrd_file_t *rrd_file;
rrd_t rrd;
rrd_file_t *rrd_file;
+ rrd_init(&rrd);
rrd_file = rrd_open(filename, &rrd, RRD_READONLY);
if (rrd_file == NULL) {
rrd_file = rrd_open(filename, &rrd, RRD_READONLY);
if (rrd_file == NULL) {
- rrd_set_error("could not open RRD");
- return (-1);
+ goto err_free;
}
if ((rraindex < 0) || (rraindex >= (int) rrd.stat_head->rra_cnt)) {
rrd_set_error("invalid rraindex number");
}
if ((rraindex < 0) || (rraindex >= (int) rrd.stat_head->rra_cnt)) {
rrd_set_error("invalid rraindex number");
- rrd_free(&rrd);
- close(rrd_file->fd);
- return (-1);
+ goto err_close;
}
rra_start = rrd_file->header_len;
}
rra_start = rrd_file->header_len;
@@
-83,7
+101,7
@@
time_t rrd_first_r(
(rra_start +
(rrd.rra_ptr[rraindex].cur_row + 1) *
rrd.stat_head->ds_cnt * sizeof(rrd_value_t)), SEEK_SET);
(rra_start +
(rrd.rra_ptr[rraindex].cur_row + 1) *
rrd.stat_head->ds_cnt * sizeof(rrd_value_t)), SEEK_SET);
- timer = -(rrd.rra_def[rraindex].row_cnt - 1);
+ timer = -(
long)(
rrd.rra_def[rraindex].row_cnt - 1);
if (rrd.rra_ptr[rraindex].cur_row + 1 > rrd.rra_def[rraindex].row_cnt) {
rrd_seek(rrd_file, rra_start, SEEK_SET);
}
if (rrd.rra_ptr[rraindex].cur_row + 1 > rrd.rra_def[rraindex].row_cnt) {
rrd_seek(rrd_file, rra_start, SEEK_SET);
}
@@
-91,9
+109,9
@@
time_t rrd_first_r(
rrd.live_head->last_up %
(rrd.rra_def[rraindex].pdp_cnt * rrd.stat_head->pdp_step)) +
(timer * rrd.rra_def[rraindex].pdp_cnt * rrd.stat_head->pdp_step);
rrd.live_head->last_up %
(rrd.rra_def[rraindex].pdp_cnt * rrd.stat_head->pdp_step)) +
(timer * rrd.rra_def[rraindex].pdp_cnt * rrd.stat_head->pdp_step);
-
- rrd_free(&rrd);
- close(rrd_file->fd);
+ err_close:
rrd_close(rrd_file);
rrd_close(rrd_file);
+ err_free:
+ rrd_free(&rrd);
return (then);
}
return (then);
}