started updating for 1.2 release
[rrdtool.git] / src / rrd_resize.c
index 3dbe058..efa84b0 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * RRDtool 1.0.33  Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.2rc6  Copyright by Tobi Oetiker, 1997-2005
  *****************************************************************************
  * rrd_resize.c Alters size of an RRA
  *****************************************************************************
@@ -43,7 +43,7 @@ rrd_resize(int argc, char **argv)
     modify=strtol(argv[4],&endptr,0);
 
     if ((modify<1)) {
-        rrd_set_error("you must have at least one row in the RRA");
+        rrd_set_error("Please grow or shrink with at least 1 row");
         return(-1);
     }
 
@@ -67,12 +67,14 @@ rrd_resize(int argc, char **argv)
         fclose(infile);
         return(-1);
     }
-    if ((rrdold.rra_def[target_rra].row_cnt+modify)<0) {
-        rrd_set_error("This RRA is not that big");
-        rrd_free(&rrdold);
-        fclose(infile);
-        return(-1);
-    }
+
+    if (modify < 0)
+       if ((long)rrdold.rra_def[target_rra].row_cnt <= -modify) {
+           rrd_set_error("This RRA is not that big");
+           rrd_free(&rrdold);
+           fclose(infile);
+           return(-1);
+       }
 
     rrdnew.stat_head = rrdold.stat_head;
     rrdnew.ds_def    = rrdold.ds_def;
@@ -102,7 +104,7 @@ rrd_resize(int argc, char **argv)
     fwrite(rrdnew.rra_ptr,sizeof(rra_ptr_t),rrdnew.stat_head->rra_cnt,outfile);
 
     /* Move the CDPs from the old to the new database.
-    ** This can be made (much) faster but isn't worth the efford. Clarity
+    ** This can be made (much) faster but isn't worth the effort. Clarity
     ** is much more important.
     */
 
@@ -143,7 +145,7 @@ rrd_resize(int argc, char **argv)
         signed long int remove_end=0;
 
         remove_end=(rrdnew.rra_ptr[target_rra].cur_row-modify)%rrdnew.rra_def[target_rra].row_cnt;
-        if (remove_end <= rrdnew.rra_ptr[target_rra].cur_row) {
+        if (remove_end <= (signed long int)rrdnew.rra_ptr[target_rra].cur_row) {
             while (remove_end >= 0) {
                 fseek(infile,sizeof(rrd_value_t)*rrdnew.stat_head->ds_cnt,SEEK_CUR);
                 rrdnew.rra_ptr[target_rra].cur_row--;
@@ -168,8 +170,10 @@ rrd_resize(int argc, char **argv)
     }
     /* Move the rest of the CDPs
     */
-    while (!(feof(infile))) {
-        fread(&buffer,sizeof(rrd_value_t),1,infile);
+    while (1) {
+       fread(&buffer,sizeof(rrd_value_t),1,infile);
+       if (feof(infile))
+           break;
         fwrite(&buffer,sizeof(rrd_value_t),1,outfile);
     }
     rrdnew.rra_def[target_rra].row_cnt += modify;