More updates from Bernhard Fischer
[rrdtool.git] / src / rrd_lastupdate.c
index 169c49d..79274b5 100644 (file)
@@ -8,47 +8,53 @@
 #include "rrd_rpncalc.h"
 #include <stdarg.h>
 
-int
-rrd_lastupdate(int argc, char **argv, time_t *last_update,
-                 unsigned long *ds_cnt, char ***ds_namv, char ***last_ds) {
-    unsigned long i=0;
-    char        *filename;
-    FILE         *in_file;
-    rrd_t        rrd;
-
-    if(argc < 2){
+int rrd_lastupdate(
+    int argc,
+    char **argv,
+    time_t *last_update,
+    unsigned long *ds_cnt,
+    char ***ds_namv,
+    char ***last_ds)
+{
+    unsigned long i = 0;
+    char     *filename;
+    rrd_t     rrd;
+    rrd_file_t *rrd_file;
+
+    if (argc < 2) {
         rrd_set_error("please specify an rrd");
         return -1;
     }
     filename = argv[1];
 
-    if(rrd_open(filename,&in_file,&rrd, RRD_READONLY)==-1){
-       return(-1);
-    }
-    fclose(in_file);
+    rrd_file = rrd_open(filename, &rrd, RRD_READONLY);
+    if (rrd_file == NULL)
+        return (-1);
 
-    *last_update=rrd.live_head->last_up;
+    *last_update = rrd.live_head->last_up;
     *ds_cnt = rrd.stat_head->ds_cnt;
     if (((*ds_namv) =
-               (char **) malloc(rrd.stat_head->ds_cnt * sizeof(char*)))==NULL){
+         (char **) malloc(rrd.stat_head->ds_cnt * sizeof(char *))) == NULL) {
         rrd_set_error("malloc fetch ds_namv array");
-       rrd_free(&rrd);
-       return(-1);
-    } 
+        rrd_free(&rrd);
+        return (-1);
+    }
 
     if (((*last_ds) =
-               (char **) malloc(rrd.stat_head->ds_cnt * sizeof(char*)))==NULL){
+         (char **) malloc(rrd.stat_head->ds_cnt * sizeof(char *))) == NULL) {
         rrd_set_error("malloc fetch last_ds array");
-       rrd_free(&rrd);
-       free(*ds_namv);
-       return(-1);
-    } 
-
-    for(i=0;i<rrd.stat_head->ds_cnt;i++){
-       (*ds_namv)[i] = sprintf_alloc("%s", rrd.ds_def[i].ds_nam);
-       (*last_ds)[i] = sprintf_alloc("%s", rrd.pdp_prep[i].last_ds);
+        rrd_free(&rrd);
+        free(*ds_namv);
+        return (-1);
+    }
+
+    for (i = 0; i < rrd.stat_head->ds_cnt; i++) {
+        (*ds_namv)[i] = sprintf_alloc("%s", rrd.ds_def[i].ds_nam);
+        (*last_ds)[i] = sprintf_alloc("%s", rrd.pdp_prep[i].last_ds);
     }
 
     rrd_free(&rrd);
-    return(0); 
+    close(rrd_file->fd);
+    rrd_close(rrd_file);
+    return (0);
 }