Call GetStatvfs dbus method for external storage size 91/171191/5 accepted/tizen/unified/20180307.071338 submit/tizen/20180306.082630
authorpr.jung <pr.jung@samsung.com>
Tue, 27 Feb 2018 08:31:51 +0000 (17:31 +0900)
committerpr.jung <pr.jung@samsung.com>
Tue, 6 Mar 2018 08:11:35 +0000 (17:11 +0900)
Change-Id: I43f8f7ec1b8f4214c6d03d64f5667449e3b94d55
Signed-off-by: pr.jung <pr.jung@samsung.com>
src/statvfs.c
src/storage-external-dbus.c
src/storage-external-dbus.h

index 7b50dc4..e920cb6 100644 (file)
 #define EXTERNAL_MEMORY_NODE   "sdcard"
 #define STORAGE_CONF_FILE      "/etc/storage/libstorage.conf"
 
-/* it's for 32bit file offset */
-struct statvfs_32 {
-       unsigned long int f_bsize;
-       unsigned long int f_frsize;
-       unsigned long int f_blocks;
-       unsigned long int f_bfree;
-       unsigned long int f_bavail;
-       unsigned long int f_files;
-       unsigned long int f_ffree;
-       unsigned long int f_favail;
-       unsigned long int f_fsid;
-#ifdef _STATVFSBUF_F_UNUSED
-       int __f_unused;
-#endif
-       unsigned long int f_flag;
-       unsigned long int f_namemax;
-       int __f_spare[6];
-};
 
 #define MAX_LINE    128
 #define MAX_SECTION 64
@@ -254,7 +236,7 @@ API int storage_get_internal_memory_size(struct statvfs *buf)
 
        ret = get_memory_size(tzplatform_getenv(TZ_SYS_HOME), &temp);
        if (ret || temp.f_bsize == 0) {
-               _E("fail to get memory size"); //LCOV_EXCL_LINE
+               _E("fail to get memory size %d", ret); //LCOV_EXCL_LINE
                return -errno; //LCOV_EXCL_LINE System Error
        }
 
@@ -362,10 +344,10 @@ int storage_get_external_memory_size_with_path(char *path, struct statvfs *buf)
        if (!mount_check(ext_path))
                goto out_nodev;
 
-       ret = get_memory_size(ext_path, &temp);
+       ret = storage_ext_get_statvfs(ext_path, &temp);
        if (ret) {
                _E("fail to get memory size"); //LCOV_EXCL_LINE
-               return -errno; //LCOV_EXCL_LINE System Error
+               return ret; //LCOV_EXCL_LINE System Error
        }
 
        memcpy(buf, &temp, sizeof(temp));
@@ -406,7 +388,7 @@ int storage_get_external_memory_size64_with_path(char *path, struct statvfs *buf
        if (!mount_check(ext_path))
                goto out_nodev;
 
-       ret = statvfs(ext_path, buf);
+       ret = storage_ext_get_statvfs_size64(ext_path, buf);
        if (ret) {
        //LCOV_EXCL_START System Error
                _E("fail to get memory size");
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)
 {
index c37881b..195d72e 100644 (file)
@@ -28,6 +28,8 @@
 #define STORAGE_EXT_BUS_NAME              "org.tizen.system.storage"
 #define STORAGE_EXT_PATH_MANAGER          "/Org/Tizen/System/Storage/Block/Manager"
 #define STORAGE_EXT_IFACE_MANAGER         STORAGE_EXT_BUS_NAME".BlockManager"
+#define STORAGE_EXT_PATH_STORAGE          "/Org/Tizen/System/Storage/Storage"
+#define STORAGE_EXT_IFACE_STORAGE         STORAGE_EXT_BUS_NAME".storage"
 
 enum mount_state {
        STORAGE_EXT_UNMOUNTED,
@@ -72,12 +74,33 @@ typedef struct _storage_ext_device {
        int storage_id;
 } storage_ext_device;
 
+/* it's for 32bit file offset */
+struct statvfs_32 {
+       unsigned long int f_bsize;
+       unsigned long int f_frsize;
+       unsigned long int f_blocks;
+       unsigned long int f_bfree;
+       unsigned long int f_bavail;
+       unsigned long int f_files;
+       unsigned long int f_ffree;
+       unsigned long int f_favail;
+       unsigned long int f_fsid;
+#ifdef _STATVFSBUF_F_UNUSED
+       int __f_unused;
+#endif
+       unsigned long int f_flag;
+       unsigned long int f_namemax;
+       int __f_spare[6];
+};
+
 typedef int (*storage_ext_changed_cb)(storage_ext_device *dev, enum storage_ext_state state, void *data);
 
 int storage_ext_is_supported(void);
 void storage_ext_release_device(storage_ext_device **dev);
 void storage_ext_release_list(dd_list **list);
 int storage_ext_get_list(dd_list **list);
+int storage_ext_get_statvfs(char *path, struct statvfs_32 *buf);
+int storage_ext_get_statvfs_size64(char *path, struct statvfs *buf);
 
 int storage_ext_register_device_change(storage_ext_changed_cb func, void *data);
 void storage_ext_unregister_device_change(storage_ext_changed_cb func);