diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2015-07-09 18:49:55 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2015-07-09 18:49:55 +0900 |
commit | d3919e7ed416c5e7e72a5ec36ca9e43f51e7a1c8 (patch) | |
tree | 6aa0f1aef1ece12590c4e4d320ebbdd7065d4bd2 | |
parent | c83bdb9c20ca96fccd7badb409f1a2ec306d5f86 (diff) | |
download | deviced-d3919e7ed416c5e7e72a5ec36ca9e43f51e7a1c8.tar.gz deviced-d3919e7ed416c5e7e72a5ec36ca9e43f51e7a1c8.tar.bz2 deviced-d3919e7ed416c5e7e72a5ec36ca9e43f51e7a1c8.zip |
block: add getter for block device list
Change-Id: I6d9d4ea74bed33f497c64161e28711e17f182c6a
Signed-off-by: Taeyoung Kim <ty317.kim@samsung.com>
-rw-r--r-- | src/block/block.c | 94 |
1 files changed, 93 insertions, 1 deletions
diff --git a/src/block/block.c b/src/block/block.c index 3f932b7a..784ce572 100644 --- a/src/block/block.c +++ b/src/block/block.c @@ -59,6 +59,10 @@ #define BLOCK_OBJECT_REMOVED "ObjectRemoved" #define BLOCK_DEVICE_CHANGED "DeviceChanged" +#define BLOCK_TYPE_MMC "mmc" +#define BLOCK_TYPE_SCSI "scsi" +#define BLOCK_TYPE_ALL "all" + enum block_dev_operation { BLOCK_DEV_MOUNT, BLOCK_DEV_UNMOUNT, @@ -1159,7 +1163,7 @@ static void show_block_device_list(void) _D("\tSyspath: %s", data->syspath); _D("\tBlock type: %s", (data->block_type == BLOCK_MMC_DEV ? - "mmc" : "scsi")); + BLOCK_TYPE_MMC : BLOCK_TYPE_SCSI)); _D("\tFs type: %s", data->fs_type); _D("\tFs usage: %s", data->fs_usage); _D("\tFs version: %s", data->fs_version); @@ -1312,6 +1316,93 @@ static DBusMessage *request_show_device_list(E_DBus_Object *obj, return dbus_message_new_method_return(msg); } +static DBusMessage *request_get_device_list(E_DBus_Object *obj, + DBusMessage *msg) +{ + DBusMessageIter iter; + DBusMessageIter aiter, piter; + DBusMessage *reply; + struct block_device *bdev; + struct block_data *data; + dd_list *elem; + char *type = NULL; + int ret = -EBADMSG; + char *str_null = ""; + int block_type; + + reply = dbus_message_new_method_return(msg); + + ret = dbus_message_get_args(msg, NULL, + DBUS_TYPE_STRING, &type, + DBUS_TYPE_INVALID); + if (!ret) { + _E("Failed to get args"); + goto out; + } + + if (!type) { + _E("Delivered type is NULL"); + goto out; + } + + _D("Block (%s) device list is requested", type); + + if (!strncmp(type, BLOCK_TYPE_SCSI, sizeof(BLOCK_TYPE_SCSI))) + block_type = BLOCK_SCSI_DEV; + else if (!strncmp(type, BLOCK_TYPE_MMC, sizeof(BLOCK_TYPE_MMC))) + block_type = BLOCK_MMC_DEV; + else if (!strncmp(type, BLOCK_TYPE_ALL, sizeof(BLOCK_TYPE_ALL))) + block_type = -1; + else { + _E("Invalid type (%s) is requested", type); + goto out; + } + + dbus_message_iter_init_append(reply, &iter); + dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(issssssisib)", &aiter); + + DD_LIST_FOREACH(block_dev_list, elem, bdev) { + data = bdev->data; + if (!data) + continue; + + switch (block_type) { + case BLOCK_SCSI_DEV: + case BLOCK_MMC_DEV: + if (data->block_type != block_type) + continue; + break; + default: + break; + } + + dbus_message_iter_open_container(&aiter, DBUS_TYPE_STRUCT, NULL, &piter); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_INT32, &(data->block_type)); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->devnode ? &(data->devnode) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->syspath ? &(data->syspath) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->fs_usage ? &(data->fs_usage) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->fs_type ? &(data->fs_type) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->fs_version ? &(data->fs_version) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->fs_uuid_enc ? &(data->fs_uuid_enc) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_INT32, &(data->readonly)); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_STRING, + data->mount_point ? &(data->mount_point) : &str_null); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_INT32, &(data->state)); + dbus_message_iter_append_basic(&piter, DBUS_TYPE_BOOLEAN, &(data->primary)); + dbus_message_iter_close_container(&aiter, &piter); + } + dbus_message_iter_close_container(&iter, &aiter); + +out: + return reply; +} + static struct uevent_handler uh = { .subsystem = BLOCK_SUBSYSTEM, .uevent_func = uevent_block_handler, @@ -1319,6 +1410,7 @@ static struct uevent_handler uh = { static const struct edbus_method manager_methods[] = { { "ShowDeviceList", NULL, NULL, request_show_device_list }, + { "GetDeviceList", "s", "a(issssssisib)", request_get_device_list }, }; static const struct edbus_method device_methods[] = { |