rrd_flush.c: Provide a more useful error message.
[rrdtool.git] / src / rrd_flush.c
index 218a65a..1f72e80 100644 (file)
@@ -26,6 +26,7 @@ int rrd_cmd_flush (int argc, char **argv)
 {
     char *opt_daemon = NULL;
     int status;
+    int i;
 
     /* initialize getopt */
     optind = 0;
@@ -65,9 +66,9 @@ int rrd_cmd_flush (int argc, char **argv)
         }
     } /* while (42) */
 
-    if ((argc - optind) != 1)
+    if ((argc - optind) < 1)
     {
-        rrd_set_error ("Usage: rrdtool %s [--daemon <addr>] <file>", argv[0]);
+        rrd_set_error ("Usage: rrdtool %s [--daemon <addr>] <file> [<file> ...]", argv[0]);
         return (-1);
     }
 
@@ -85,7 +86,26 @@ int rrd_cmd_flush (int argc, char **argv)
         return (-1);
     }
 
-    status = rrdc_flush(argv[optind]);
+    status = 0;
+    for (int i = optind; i < argc; i++)
+    {
+        status = rrdc_flush(argv[i]);
+        if (status)
+        {
+            char *error;
+            int   remaining;
+
+            error     = strdup(rrd_get_error());
+            remaining = argc - optind - 1;
+
+            rrd_set_error("Flushing of file \"%s\" failed: %s. Skipping "
+                    "remaining %i file%s.", argv[i],
+                    ((! error) || (*error == '\0')) ? "unknown error" : error,
+                    remaining, (remaining == 1) ? "" : "s");
+            free(error);
+            break;
+        }
+    }
 
     return ((status == 0) ? 0 : -1);
 } /* int rrd_flush */