Ensure that response_read() always calls fflush() or fclose().
[rrdtool.git] / src / rrd_first.c
index 404b9f2..80b9e17 100644 (file)
@@ -1,12 +1,14 @@
 /*****************************************************************************
- * RRDtool 1.3rc5  Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.4.3  Copyright by Tobi Oetiker, 1997-2010
  *****************************************************************************
  * rrd_first Return
  *****************************************************************************
  * Initial version by Burton Strauss, ntopSupport.com - 3/2005
  *****************************************************************************/
 
+#include <stdlib.h>
 #include "rrd_tool.h"
+#include "rrd_client.h"
 
 
 time_t rrd_first(
@@ -15,8 +17,10 @@ time_t rrd_first(
 {
     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}
     };
 
@@ -27,7 +31,7 @@ time_t rrd_first(
         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;
@@ -40,19 +44,35 @@ time_t rrd_first(
                 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:
-            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) {
-        rrd_set_error("not enough arguments");
+        rrd_set_error("usage rrdtool %s [--rraindex number] [--daemon <addr>] file.rrd",
+                      argv[0]);
         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));
+       }
 }
 
 
@@ -65,6 +85,7 @@ time_t rrd_first_r(
     rrd_t     rrd;
     rrd_file_t *rrd_file;
 
+    rrd_init(&rrd);
     rrd_file = rrd_open(filename, &rrd, RRD_READONLY);
     if (rrd_file == NULL) {
         goto err_free;
@@ -80,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);
-    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);
     }