From 7f3b0bfbf28cf32e8237fdbbe8a7916656902d3c Mon Sep 17 00:00:00 2001 From: "pr.jung" Date: Wed, 22 Feb 2017 11:45:39 +0900 Subject: [PATCH] block: Check uevent is already handled - Check uevent is already handled on block_init_from_udev_enumerate - Create external directory when sdcard is mounted (not USB storage) Change-Id: I49f6b4297843f08accf040b9dedb70538572973a Signed-off-by: pr.jung --- src/block/block.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/block/block.c b/src/block/block.c index ccdfdb2..1c8c78b 100644 --- a/src/block/block.c +++ b/src/block/block.c @@ -635,13 +635,15 @@ static struct block_data *make_block_data(const char *devnode, return NULL; if (!fs_type) { - _D("Not support extended partition"); + _E("Not support extended partition"); return NULL; } data = calloc(1, sizeof(struct block_data)); - if (!data) + if (!data) { + _E("calloc() failed"); return NULL; + } data->devnode = strdup(devnode); if (syspath) @@ -1896,13 +1898,11 @@ static int find_thread(char *devnode) } else th_node = devnode; - len = strlen(str) + 1; + len = strlen(th_node) + 1; min_num = 1000; min = -1; for (i = 0; i < THREAD_MAX; i++) { DD_LIST_FOREACH(th_manager[i].th_node_list, elem, temp) { - if (!temp) - continue; if (!strncmp(temp, th_node, len)) return i; } @@ -2109,7 +2109,7 @@ static int add_block_device(struct udev_device *dev, const char *devnode) if (thread_id < 0 || thread_id >= THREAD_MAX) { _E("Fail to find thread to add"); free_block_data(data); - free(bdev); + free_block_device(bdev); return -EPERM; } bdev->thread_id = thread_id; @@ -2125,13 +2125,17 @@ static int add_block_device(struct udev_device *dev, const char *devnode) ret = add_operation(bdev, BLOCK_DEV_INSERT, NULL, (void *)data); if (ret < 0) { - _E("Failed to add operation (mount %s)", devnode); + _E("Failed to add operation (insert %s)", devnode); + free_block_data(data); + free_block_device(bdev); return ret; } ret = add_operation(bdev, BLOCK_DEV_MOUNT, NULL, NULL); if (ret < 0) { _E("Failed to add operation (mount %s)", devnode); + free_block_data(data); + free_block_device(bdev); return ret; } @@ -2152,7 +2156,7 @@ static int remove_block_device(struct udev_device *dev, const char *devnode) BLOCK_FLAG_SET(bdev->data, UNMOUNT_UNSAFE); bdev->removed = true; - if (bdev->on_private_op) { + if (bdev->on_private_op != REQ_NORMAL) { bdev->on_private_op = REQ_NORMAL; _D("Private operation state: %d", bdev->on_private_op); } @@ -2723,6 +2727,7 @@ static DBusMessage *request_format_block(E_DBus_Object *obj, if (prev_state == BLOCK_MOUNT) { if (add_operation(bdev, BLOCK_DEV_MOUNT, NULL, NULL) < 0) { _E("Failed to add operation (mount %s)", bdev->data->devnode); + release_format_data(fdata); goto out; } } @@ -3179,12 +3184,17 @@ static void block_init(void *data) if (ret < 0) _E("Failed to make directory: %d", errno); } else if (!S_ISDIR(buf.st_mode)) { - remove(EXTERNAL_STORAGE_PATH); + ret = remove(EXTERNAL_STORAGE_PATH); + if (ret < 0) + _E("Fail to remove %s. errno: %d", EXTERNAL_STORAGE_PATH, errno); ret = mkdir(EXTERNAL_STORAGE_PATH, 0755); if (ret < 0) _E("Failed to make directory: %d", errno); - } else - chmod(EXTERNAL_STORAGE_PATH, 644); + } else { + ret = chmod(EXTERNAL_STORAGE_PATH, 644); + if (ret < 0) + _E("Fail to change permissions of a file"); + } } static void block_exit(void *data) -- 2.7.4