X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=send-utils.c;h=b5289e76ae9d59015101cda0be8b67611ce12f27;hb=f5dd778f5299088f89d380ce922a84d77a98b9d6;hp=a85fa0844630ccfb91a428ad0ef36c534929c1c0;hpb=bd2cc320aff5789fe4034736fa6da8b4ebae475f;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/send-utils.c b/send-utils.c index a85fa08..b5289e7 100644 --- a/send-utils.c +++ b/send-utils.c @@ -83,8 +83,7 @@ static int btrfs_read_root_item_raw(int mnt_fd, u64 root_id, size_t buf_len, ret = ioctl(mnt_fd, BTRFS_IOC_TREE_SEARCH, &args); if (ret < 0) { fprintf(stderr, - "ERROR: can't perform the search - %s\n", - strerror(errno)); + "ERROR: can't perform the search - %m\n"); return 0; } /* the ioctl returns the number of item it found in nr_items */ @@ -267,8 +266,8 @@ static int btrfs_subvolid_resolve_sub(int fd, char *path, size_t *path_len, ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &search_arg); if (ret < 0) { fprintf(stderr, - "ioctl(BTRFS_IOC_TREE_SEARCH, subvol_id %llu) ret=%d, error: %s\n", - (unsigned long long)subvol_id, ret, strerror(errno)); + "ioctl(BTRFS_IOC_TREE_SEARCH, subvol_id %llu) ret=%d, error: %m\n", + (unsigned long long)subvol_id, ret); return ret; } @@ -306,8 +305,8 @@ static int btrfs_subvolid_resolve_sub(int fd, char *path, size_t *path_len, ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP, &ino_lookup_arg); if (ret < 0) { fprintf(stderr, - "ioctl(BTRFS_IOC_INO_LOOKUP) ret=%d, error: %s\n", - ret, strerror(errno)); + "ioctl(BTRFS_IOC_INO_LOOKUP) ret=%d, error: %m\n", + ret); return ret; } @@ -439,6 +438,19 @@ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s, const char *path, enum subvol_search_type type) { + struct subvol_info *si; + + si = subvol_uuid_search2(s, root_id, uuid, transid, path, type); + if (IS_ERR(si)) + return NULL; + return si; +} + +struct subvol_info *subvol_uuid_search2(struct subvol_uuid_search *s, + u64 root_id, const u8 *uuid, u64 transid, + const char *path, + enum subvol_search_type type) +{ int ret = 0; struct btrfs_root_item root_item; struct subvol_info *info = NULL; @@ -474,6 +486,10 @@ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s, goto out; info = calloc(1, sizeof(*info)); + if (!info) { + ret = -ENOMEM; + goto out; + } info->root_id = root_id; memcpy(info->uuid, root_item.uuid, BTRFS_UUID_SIZE); memcpy(info->received_uuid, root_item.received_uuid, BTRFS_UUID_SIZE); @@ -484,17 +500,27 @@ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s, info->rtransid = btrfs_root_rtransid(&root_item); if (type == subvol_search_by_path) { info->path = strdup(path); + if (!info->path) { + ret = -ENOMEM; + goto out; + } } else { info->path = malloc(PATH_MAX); + if (!info->path) { + ret = -ENOMEM; + goto out; + } ret = btrfs_subvolid_resolve(s->mnt_fd, info->path, PATH_MAX, root_id); } out: - if (ret && info) { - free(info->path); - free(info); - info = NULL; + if (ret) { + if (info) { + free(info->path); + free(info); + } + return ERR_PTR(ret); } return info; @@ -559,8 +585,7 @@ int subvol_uuid_search_init(int mnt_fd, struct subvol_uuid_search *s) ret = is_uuid_tree_supported(mnt_fd); if (ret < 0) { fprintf(stderr, - "ERROR: check if we support uuid tree fails - %s\n", - strerror(errno)); + "ERROR: check if we support uuid tree fails - %m\n"); return ret; } else if (ret) { /* uuid tree is supported */ @@ -581,8 +606,7 @@ int subvol_uuid_search_init(int mnt_fd, struct subvol_uuid_search *s) while (1) { ret = ioctl(mnt_fd, BTRFS_IOC_TREE_SEARCH, &args); if (ret < 0) { - fprintf(stderr, "ERROR: can't perform the search - %s\n", - strerror(errno)); + fprintf(stderr, "ERROR: can't perform the search - %m\n"); return ret; } if (sk->nr_items == 0)