Call GetStatvfs dbus method for external storage size
[platform/core/system/libstorage.git] / src / storage-external-dbus.c
index dcd1e9e..4568371 100755 (executable)
@@ -24,7 +24,9 @@
 #include <errno.h>
 #include <gio/gio.h>
 #include <glib.h>
+#include <assert.h>
 #include <limits.h>
+#include <sys/statvfs.h>
 
 #include "log.h"
 #include "storage-external-dbus.h"
@@ -32,6 +34,7 @@
 #define CHECK_STR(a) (a ? a : "")
 
 #define STORAGE_EXT_GET_LIST       "GetDeviceList"
+#define STORAGE_EXT_GET_STATVFS    "GetStatvfs"
 
 #define STORAGE_EXT_DEVICE_CHANGED "DeviceChanged"
 #define STORAGE_EXT_DEVICE_ADDED   "DeviceAdded"
@@ -211,6 +214,78 @@ out:
        return ret;
 }
 
+int storage_ext_get_statvfs(char *path, struct statvfs_32 *buf)
+{
+       GVariant *result;
+       guint64 bsize, frsize, blocks, bfree, bavail, files, ffree, favail, fsid, flag, namemax;
+
+       assert(buf);
+
+       memset(buf, 0, sizeof(struct statvfs_32));
+
+       result = dbus_method_call_sync(STORAGE_EXT_BUS_NAME,
+                       STORAGE_EXT_PATH_STORAGE,
+                       STORAGE_EXT_IFACE_STORAGE,
+                       STORAGE_EXT_GET_STATVFS,
+                       g_variant_new("(s)", path));
+       if (!result) {
+               _E("Failed to get storage_ext device info"); //LCOV_EXCL_LINE
+               return -EIO;
+       }
+
+       g_variant_get(result, "(ttttttttttt)",
+                       &bsize, &frsize, &blocks,
+                       &bfree, &bavail, &files,
+                       &ffree, &favail, &fsid,
+                       &flag, &namemax);
+//     %llu bsize, frsize, blocks, bfree, bavail, files, ffree, favail, fsid, flag, namemax
+
+       buf->f_bsize  = (unsigned long)bsize;
+       buf->f_frsize = (unsigned long)frsize;
+       buf->f_blocks = (unsigned long)blocks;
+       buf->f_bfree  = (unsigned long)bfree;
+       buf->f_bavail = (unsigned long)bavail;
+       buf->f_files  = (unsigned long)files;
+       buf->f_ffree  = (unsigned long)ffree;
+       buf->f_favail = (unsigned long)favail;
+       buf->f_fsid = (unsigned long)fsid;
+       buf->f_flag = (unsigned long)flag;
+       buf->f_namemax = (unsigned long)namemax;
+
+//     %lu buf->f_bsize, buf->f_frsize, buf->f_blocks, buf->f_bfree, buf->f_bavail, buf->f_files, buf->f_ffree, buf->f_favail, buf->f_fsid, buf->f_flag, buf->f_namemax
+       return 0;
+}
+
+int storage_ext_get_statvfs_size64(char *path, struct statvfs *buf)
+{
+       GVariant *result;
+
+       assert(buf);
+
+       memset(buf, 0, sizeof(struct statvfs));
+
+       result = dbus_method_call_sync(STORAGE_EXT_BUS_NAME,
+                       STORAGE_EXT_PATH_STORAGE,
+                       STORAGE_EXT_IFACE_STORAGE,
+                       STORAGE_EXT_GET_STATVFS,
+                       g_variant_new("(s)", path));
+       if (!result) {
+               _E("Failed to get storage_ext device info"); //LCOV_EXCL_LINE
+               return -EIO;
+       }
+
+       g_variant_get(result, "(ttttttttttt)",
+                       &(buf->f_bsize), &(buf->f_frsize), &(buf->f_blocks),
+                       &(buf->f_bfree), &(buf->f_bavail), &(buf->f_files),
+                       &(buf->f_ffree), &(buf->f_favail), &(buf->f_fsid),
+                       &(buf->f_flag), &(buf->f_namemax));
+
+//     %lu buf->f_bsize, buf->f_frsize, buf->f_fsid, buf->f_flag, buf->f_namemax
+//     %llu buf->f_blocks, buf->f_bfree, buf->f_bavail, buf->f_files, buf->f_ffree, buf->f_favail
+
+       return 0;
+}
+
 //LCOV_EXCL_START Not called Callback
 static void storage_ext_device_changed(GVariant *params, enum storage_ext_state state, gpointer user_data)
 {