* progress in moving all the fileaccess over to a wrapper system that can do fd based...
[rrdtool.git] / src / rrd_restore.c
index 96ab649..b283f91 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * RRDtool 1.2.19  Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.2.23  Copyright by Tobi Oetiker, 1997-2007
  *****************************************************************************
  * rrd_restore.c  creates new rrd from data dumped by rrd_dump.c
  *****************************************************************************/
@@ -22,7 +22,7 @@ int skipxml(char **);
 int eat_tag(char **, char *);
 int read_tag(char **, char *, char *, void *);
 int xml2rrd(char*, rrd_t*, char);
-int rrd_write(char *, rrd_t *, char);
+int rrd_creat(char *, rrd_t *, char);
 void parse_patch1028_RRA_params(char **buf, rrd_t *rrd, int rra_index);
 void parse_patch1028_CDP_params(char **buf, rrd_t *rrd, int rra_index, int ds_index);
 void parse_FAILURES_history(char **buf, rrd_t *rrd, int rra_index, int ds_index);
@@ -64,7 +64,9 @@ int skipxml(char **buf){
 }
 
 int skip(char **buf){
-  char *ptr;  
+  char *ptr;
+  if ((buf == NULL) || (*buf == NULL))
+    return -1;  
   ptr=(*buf);
   do {
     (*buf)=ptr;
@@ -237,7 +239,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){
       if((rrd->cdp_prep = rrd_realloc(rrd->cdp_prep,
                                  rrd->stat_head->rra_cnt
                                  *rrd->stat_head->ds_cnt*sizeof(cdp_prep_t)))==NULL){
-         rrd_set_error("allocating cdp_prep"); return -1; }
+         rrd_set_error("allocating cdp_prep"); return -1; }
 
       memset(&(rrd->cdp_prep[rrd->stat_head->ds_cnt*(rrd->stat_head->rra_cnt-1)]), 
             0, rrd->stat_head->ds_cnt*sizeof(cdp_prep_t));
@@ -254,7 +256,10 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){
          read_tag(&ptr2, "xff","%lf",
             &(rrd->rra_def[rra_index].par[RRA_cdp_xff_val].u_val));
       } else {
-        eat_tag(&ptr2, "params");
+        if (eat_tag(&ptr2, "params") != 1) {
+         rrd_set_error("could not find params tag to eat and skip");
+          return -1;
+        }
         skip(&ptr2);
         /* backwards compatibility w/ old patch */
       if (strncmp(ptr2, "<value>",7) == 0) {
@@ -456,7 +461,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){
 /* create and empty rrd file according to the specs given */
 
 int
-rrd_write(char *file_name, rrd_t *rrd, char force_overwrite)
+rrd_creat(char *file_name, rrd_t *rrd, char force_overwrite)
 {
     unsigned long    i,ii,val_cnt;
     FILE             *rrd_file=NULL;
@@ -579,7 +584,7 @@ rrd_restore(int argc, char **argv)
 
     free(buf);
 
-    if(rrd_write(argv[optind+1],&rrd,force_overwrite)==-1){
+    if(rrd_creat(argv[optind+1],&rrd,force_overwrite)==-1){
        rrd_free(&rrd); 
        return -1;      
     };