_E("Failed to open '%s'.", file_name);
}
-static void signal_device_blocked(struct block_device *bdev)
+static void broadcast_device_blocked(struct block_device *bdev)
{
struct block_data *data;
+ int ret;
if (!bdev || !bdev->data)
return;
data = bdev->data;
- dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_BLOCK_MANAGER,
+ ret = dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_BLOCK_MANAGER,
STORAGED_INTERFACE_BLOCK_MANAGER,
BLOCK_DEVICE_BLOCKED,
block_data_to_gvariant(data, 0));
+ if (ret < 0)
+ _E("Failed to send dbus signal");
}
-static void signal_device_changed(struct block_device *bdev,
+static void broadcast_device_changed(struct block_device *bdev,
enum block_dev_operation op)
{
struct block_data *data;
- GVariant *var = NULL;
- int flags;
+ GVariant *param = NULL;
+ const char *signal_name = NULL;
+ int flags = 0;
+ int ret;
- if (!bdev || !bdev->data)
+ if (!bdev || !bdev->data) {
+ _E("Failed to broadcast device changed signal. op(%d)", op);
return;
+ }
data = bdev->data;
+ /* set flags and signal name */
switch (op) {
case BLOCK_DEV_MOUNT:
BLOCK_GET_MOUNT_FLAGS(data, flags);
+ signal_name = BLOCK_DEVICE_CHANGED;
break;
case BLOCK_DEV_UNMOUNT:
BLOCK_GET_UNMOUNT_FLAGS(data, flags);
+ signal_name = BLOCK_DEVICE_CHANGED;
break;
case BLOCK_DEV_FORMAT:
BLOCK_GET_FORMAT_FLAGS(data, flags);
+ signal_name = BLOCK_DEVICE_CHANGED;
break;
- default:
+ case BLOCK_DEV_INSERT:
+ flags = 0;
+ signal_name = BLOCK_DEVICE_ADDED;
+ break;
+ case BLOCK_DEV_REMOVE:
flags = 0;
+ signal_name = BLOCK_DEVICE_REMOVED;
break;
+ default:
+ /* unknown op */
+ _E("Failed to broadcast device changed signal. op(%d)", op);
+ return;
}
/* Broadcast outside with BlockManager iface */
- var = block_data_to_gvariant(data, flags);
+ param = block_data_to_gvariant(data, flags);
- if (op == BLOCK_DEV_INSERT)
- dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_BLOCK_MANAGER,
+ ret = dbus_handle_broadcast_dbus_signal_var(
+ STORAGED_PATH_BLOCK_MANAGER,
STORAGED_INTERFACE_BLOCK_MANAGER,
- BLOCK_DEVICE_ADDED,
- var);
- else if (op == BLOCK_DEV_REMOVE)
- dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_BLOCK_MANAGER,
- STORAGED_INTERFACE_BLOCK_MANAGER,
- BLOCK_DEVICE_REMOVED,
- var);
- else {
- dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_BLOCK_MANAGER,
- STORAGED_INTERFACE_BLOCK_MANAGER,
- BLOCK_DEVICE_CHANGED,
- var);
- dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_BLOCK_MANAGER,
- STORAGED_INTERFACE_BLOCK_MANAGER,
- BLOCK_DEVICE_CHANGED_2,
- block_data_to_gvariant2(data, flags));
+ signal_name,
+ param);
+ if (ret < 0)
+ _E("Failed to broadcast device changed signal. op(%d)", op);
+
+ /* broadcast one more signal for mount, unmount, format */
+ switch(op) {
+ case BLOCK_DEV_MOUNT:
+ case BLOCK_DEV_UNMOUNT:
+ case BLOCK_DEV_FORMAT:
+ ret = dbus_handle_broadcast_dbus_signal_var(
+ STORAGED_PATH_BLOCK_MANAGER,
+ STORAGED_INTERFACE_BLOCK_MANAGER,
+ BLOCK_DEVICE_CHANGED_2,
+ block_data_to_gvariant2(data, flags));
+ if (ret < 0)
+ _E("Failed to broadcast device changed signal. op(%d)", op);
+ default:
+ /* do nothing */
+ break;
}
}
/* Broadcast outside with Block iface */
if (pdata.bdev->on_private_op == REQ_NORMAL)
- signal_device_changed(pdata.bdev, pdata.op);
+ broadcast_device_changed(pdata.bdev, pdata.op);
else if (pdata.bdev->on_private_op == REQ_PRIVATE) {
if (pdata.op == BLOCK_DEV_UNMOUNT) {
pdata.bdev->on_private_op = REQ_NORMAL;
data = bdev->data;
if (bdev->on_private_op == REQ_NORMAL)
- signal_device_blocked(bdev);
+ broadcast_device_blocked(bdev);
/* it must called before unmounting mmc */
r = mmc_check_and_unmount(data->mount_point);