Code

Merge branch 'upstream'
[pkg-rrdtool.git] / src / rrd_dump.c
index 69893e08ed7d74791202746683f255f5f162d1cd..c2e3e5e07707d6a326596f66f8a9d68cfc3c5fa1 100644 (file)
@@ -1,9 +1,9 @@
 /*****************************************************************************
- * RRDtool 1.3rc4  Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7  Copyright by Tobi Oetiker, 1997-2009
  *****************************************************************************
  * rrd_dump  Display a RRD
  *****************************************************************************
- * $Id: rrd_dump.c 1366 2008-05-18 13:06:44Z oetiker $
+ * $Id: rrd_dump.c 1781 2009-04-07 07:31:53Z oetiker $
  * $Log$
  * Revision 1.7  2004/05/25 20:53:21  oetiker
  * prevent small leak when resources are exhausted -- Mike Slifcak
  * checkin
  *
  *****************************************************************************/
+
+#ifdef WIN32
+#include <stdlib.h>
+#endif
+
+
 #include "rrd_tool.h"
 #include "rrd_rpncalc.h"
 
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
 #if !(defined(NETWARE) || defined(WIN32))
 extern char *tzname[2];
 #endif
@@ -52,8 +62,7 @@ extern char *tzname[2];
 int rrd_dump_opt_r(
     const char *filename,
     char *outname,
-    int  opt_noheader
-)
+    int opt_noheader)
 {
     unsigned int i, ii, ix, iii = 0;
     time_t    now;
@@ -65,7 +74,7 @@ int rrd_dump_opt_r(
     rrd_t     rrd;
     rrd_value_t value;
     struct tm tm;
-
+    char *old_locale = "";
     rrd_file = rrd_open(filename, &rrd, RRD_READONLY | RRD_READAHEAD);
     if (rrd_file == NULL) {
         rrd_free(&rrd);
@@ -80,12 +89,14 @@ int rrd_dump_opt_r(
     } else {
         out_file = stdout;
     }
-
-    if (!opt_noheader){
-      fputs("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n", out_file);
-      fputs
-        ("<!DOCTYPE rrd SYSTEM \"http://oss.oetiker.ch/rrdtool/rrdtool.dtd\">\n",
-         out_file);
+#ifdef HAVE_SETLOCALE
+    old_locale = setlocale(LC_NUMERIC, "C");
+#endif
+    if (!opt_noheader) {
+        fputs("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n", out_file);
+        fputs
+            ("<!DOCTYPE rrd SYSTEM \"http://oss.oetiker.ch/rrdtool/rrdtool.dtd\">\n",
+             out_file);
     }
     fputs("<!-- Round Robin Database Dump -->", out_file);
     fputs("<rrd>", out_file);
@@ -96,7 +107,7 @@ int rrd_dump_opt_r(
     }
     fprintf(out_file, "\t<step> %lu </step> <!-- Seconds -->\n",
             rrd.stat_head->pdp_step);
-#if HAVE_STRFTIME
+#ifdef HAVE_STRFTIME
     localtime_r(&rrd.live_head->last_up, &tm);
     strftime(somestring, 200, "%Y-%m-%d %H:%M:%S %Z", &tm);
 #else
@@ -385,7 +396,7 @@ int rrd_dump_opt_r(
         rrd_seek(rrd_file, (rra_start + (rrd.rra_ptr[i].cur_row + 1)
                             * rrd.stat_head->ds_cnt
                             * sizeof(rrd_value_t)), SEEK_SET);
-        timer = -(rrd.rra_def[i].row_cnt - 1);
+        timer = - (long)(rrd.rra_def[i].row_cnt - 1);
         ii = rrd.rra_ptr[i].cur_row;
         for (ix = 0; ix < rrd.rra_def[i].row_cnt; ix++) {
             ii++;
@@ -425,6 +436,9 @@ int rrd_dump_opt_r(
     if (out_file != stdout) {
         fclose(out_file);
     }
+#ifdef HAVE_SETLOCALE
+    setlocale(LC_NUMERIC, old_locale);
+#endif
     return rrd_close(rrd_file);
 }
 
@@ -433,7 +447,7 @@ int rrd_dump_r(
     const char *filename,
     char *outname)
 {
-    return rrd_dump_opt_r(filename,outname,0);    
+    return rrd_dump_opt_r(filename, outname, 0);
 }
 
 int rrd_dump(
@@ -442,13 +456,14 @@ int rrd_dump(
 {
     int       rc;
     int       opt_noheader = 0;
+
     /* init rrd clean */
 
     optind = 0;
     opterr = 0;         /* initialize getopt */
-    
+
     while (42) {
-        int       opt;  
+        int       opt;
         int       option_index = 0;
         static struct option long_options[] = {
             {"no-header", no_argument, 0, 'n'},
@@ -465,9 +480,9 @@ int rrd_dump(
             opt_noheader = 1;
             break;
 
-        default: 
+        default:
             rrd_set_error("usage rrdtool %s [--no-header|-n] "
-                      "file.rrd [file.xml]", argv[0]);
+                          "file.rrd [file.xml]", argv[0]);
             return (-1);
             break;
         }
@@ -480,11 +495,10 @@ int rrd_dump(
     }
 
     if ((argc - optind) == 2) {
-        rc = rrd_dump_opt_r(argv[optind], argv[optind+1],opt_noheader);
+        rc = rrd_dump_opt_r(argv[optind], argv[optind + 1], opt_noheader);
     } else {
-        rc = rrd_dump_opt_r(argv[optind], NULL,opt_noheader);
+        rc = rrd_dump_opt_r(argv[optind], NULL, opt_noheader);
     }
 
     return rc;
 }
-