fix type conversion error (on windows) unsigned/signed affecting timestamps on rrd_dump.
[rrdtool.git] / src / rrd_first.c
index bb86947..4da1b3a 100644 (file)
@@ -1,11 +1,12 @@
 /*****************************************************************************
- * RRDtool 1.2.23  Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.3.2  Copyright by Tobi Oetiker, 1997-2008
  *****************************************************************************
  * rrd_first Return
  *****************************************************************************
  * Initial version by Burton Strauss, ntopSupport.com - 3/2005
  *****************************************************************************/
 
+#include <stdlib.h>
 #include "rrd_tool.h"
 
 
@@ -15,15 +16,15 @@ time_t rrd_first(
 {
     int       target_rraindex = 0;
     char     *endptr;
+    struct option long_options[] = {
+        {"rraindex", required_argument, 0, 129},
+        {0, 0, 0, 0}
+    };
 
     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;
 
@@ -65,6 +66,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 +82,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);
     }
@@ -88,9 +90,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);
-err_close:
+  err_close:
     rrd_close(rrd_file);
-err_free:
+  err_free:
     rrd_free(&rrd);
     return (then);
 }