#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
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
}
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));
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");
#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"
#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"
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)
{
#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,
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);