better not to write into argv elements ... Henrik Stoerner <henrik from hswn.dk>
[rrdtool.git] / src / rrd_create.c
index d571ea7..69ed8d8 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * RRDtool 1.2rc4  Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.1  Copyright by Tobi Oetiker, 1997-2005
  *****************************************************************************
  * rrd_create.c  creates new rrds
  *****************************************************************************/
@@ -23,6 +23,7 @@ rrd_create(int argc, char **argv)
     char *parsetime_error = NULL;
     long              long_tmp;
     int               rc;
+    optind = 0; opterr = 0;  /* initialize getopt */
 
     while (1){
        static struct option long_options[] =
@@ -182,7 +183,8 @@ rrd_create_r(char *filename,
                 return -1;
             }
             rrd.stat_head -> ds_cnt++;
-       } else if (strncmp(argv[i],"RRA:",3)==0){
+       } else if (strncmp(argv[i],"RRA:",4)==0){
+            char *argvcopy;
            char *tokptr;
            size_t old_size = sizeof(rra_def_t)*(rrd.stat_head->rra_cnt);
            if((rrd.rra_def = rrd_realloc(rrd.rra_def,
@@ -193,8 +195,9 @@ rrd_create_r(char *filename,
                 return(-1);    
            }
            memset(&rrd.rra_def[rrd.stat_head->rra_cnt], 0, sizeof(rra_def_t));
-            
-           token = strtok_r(&argv[i][4],":", &tokptr);
+
+            argvcopy = strdup(argv[i]);
+           token = strtok_r(&argvcopy[4],":", &tokptr);
            token_idx = error_flag = 0;
            while (token != NULL)
            {
@@ -369,12 +372,14 @@ rrd_create_r(char *filename,
                 if (rrd_test_error())
                 {
                     /* all errors are unrecoverable */
+                    free(argvcopy);
                     rrd_free(&rrd);
                     return (-1);
                 }
                 token = strtok_r(NULL,":", &tokptr);
                 token_idx++;
            } /* end while */
+           free(argvcopy);
 #ifdef DEBUG
            fprintf(stderr,"Creating RRA CF: %s, dep idx %lu, current idx %lu\n",
                    rrd.rra_def[rrd.stat_head->rra_cnt].cf_nam,