From 85a0566d4b5c12a2f8593d03aac355981ef21f73 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Mon, 28 Apr 2014 18:55:05 +0200 Subject: [PATCH] btrfs-progs: clean up return codes and paths Use the common patterns with one return statement at the end, pass down error Signed-off-by: David Sterba --- cmds-device.c | 27 +++++++++++++-------------- cmds-fi-disk_usage.c | 39 +++++++++++++++++++++------------------ 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/cmds-device.c b/cmds-device.c index ad7b724e..33f1311a 100644 --- a/cmds-device.c +++ b/cmds-device.c @@ -469,10 +469,8 @@ static int _cmd_device_usage(int fd, char *path, int mode) ret = load_chunk_and_device_info(fd, &chunkinfo, &chunkcount, &devinfo, &devcount); - if (ret) { - ret = -1; - goto exit; - } + if (ret) + goto out; for (i = 0; i < devcount; i++) { printf("%s, ID: %llu\n", devinfo[i].path, devinfo[i].devid); @@ -482,7 +480,7 @@ static int _cmd_device_usage(int fd, char *path, int mode) printf("\n"); } -exit: +out: free(devinfo); free(chunkinfo); @@ -493,6 +491,7 @@ int cmd_device_usage(int argc, char **argv) { int mode = UNITS_HUMAN; + int ret = 0; int i, more_than_one = 0; optind = 1; @@ -515,28 +514,28 @@ int cmd_device_usage(int argc, char **argv) usage(cmd_device_usage_usage); for (i = optind; i < argc ; i++) { - int r, fd; + int fd; DIR *dirstream = NULL; if (more_than_one) printf("\n"); fd = open_file_or_dir(argv[i], &dirstream); if (fd < 0) { - fprintf(stderr, "ERROR: can't access to '%s'\n", + fprintf(stderr, "ERROR: can't access '%s'\n", argv[1]); - return 12; + ret = 1; + goto out; } - r = _cmd_device_usage(fd, argv[i], mode); + ret = _cmd_device_usage(fd, argv[i], mode); close_file_or_dir(fd, dirstream); - if (r) - return r; + if (ret) + goto out; more_than_one = 1; - } - - return 0; +out: + return !!ret; } const struct cmd_group device_cmd_group = { diff --git a/cmds-fi-disk_usage.c b/cmds-fi-disk_usage.c index 579230a7..e088956f 100644 --- a/cmds-fi-disk_usage.c +++ b/cmds-fi-disk_usage.c @@ -68,7 +68,7 @@ static int add_info_to_list(struct chunk_info **info_ptr, if (!res) { free(*info_ptr); fprintf(stderr, "ERROR: not enough memory\n"); - return -1; + return -ENOMEM; } *info_ptr = res; @@ -163,7 +163,7 @@ static int load_chunk_info(int fd, struct chunk_info **info_ptr, int *info_count fprintf(stderr, "ERROR: can't perform the search - %s\n", strerror(e)); - return -99; + return ret; } /* the ioctl returns the number of item it found in nr_items */ @@ -179,9 +179,10 @@ static int load_chunk_info(int fd, struct chunk_info **info_ptr, int *info_count off += sizeof(*sh); item = (struct btrfs_chunk *)(args.buf + off); - if (add_info_to_list(info_ptr, info_count, item)) { + ret = add_info_to_list(info_ptr, info_count, item); + if (ret) { *info_ptr = 0; - return -100; + return ret; } off += sh->len; @@ -319,8 +320,9 @@ static int print_filesystem_usage_overall(int fd, struct chunk_info *chunkinfo, double K; u64 raid5_used, raid6_used; - if ((sargs = load_space_info(fd, path)) == NULL) { - ret = -1; + sargs = load_space_info(fd, path); + if (!sargs) { + ret = 1; goto exit; } @@ -331,7 +333,7 @@ static int print_filesystem_usage_overall(int fd, struct chunk_info *chunkinfo, "ERROR: couldn't get space info on '%s' - %s\n", path, strerror(e)); - ret = 19; + ret = 1; goto exit; } get_raid56_used(fd, chunkinfo, chunkcount, &raid5_used, &raid6_used); @@ -439,13 +441,13 @@ static int load_device_info(int fd, struct device_info **device_info_ptr, return ret; if (ret < 0) { fprintf(stderr, "ERROR: cannot get filesystem info\n"); - return -1; + return ret; } info = calloc(fi_args.num_devices, sizeof(struct device_info)); if (!info) { fprintf(stderr, "ERROR: not enough memory\n"); - return -1; + return ret; } for (i = 0, ndevs = 0 ; i <= fi_args.max_id ; i++) { @@ -460,7 +462,7 @@ static int load_device_info(int fd, struct device_info **device_info_ptr, "ERROR: cannot get info about device devid=%d\n", i); free(info); - return -1; + return ret; } info[ndevs].devid = dev_info.devid; @@ -749,7 +751,7 @@ static int print_filesystem_usage_by_chunk(int fd, sargs = load_space_info(fd, path); if (!sargs) { ret = 1; - goto exit; + goto out; } if (tabular) @@ -759,9 +761,8 @@ static int print_filesystem_usage_by_chunk(int fd, _cmd_filesystem_usage_linear(mode, sargs, chunkinfo, chunkcount, devinfo, devcount); -exit: free(sargs); - +out: return ret; } @@ -777,6 +778,7 @@ const char * const cmd_filesystem_usage_usage[] = { int cmd_filesystem_usage(int argc, char **argv) { int mode = UNITS_HUMAN; + int ret = 0; int i, more_than_one = 0; int tabular = 0; @@ -803,7 +805,6 @@ int cmd_filesystem_usage(int argc, char **argv) usage(cmd_filesystem_usage_usage); for (i = optind; i < argc; i++) { - int ret; int fd; DIR *dirstream = NULL; struct chunk_info *chunkinfo = NULL; @@ -813,9 +814,10 @@ int cmd_filesystem_usage(int argc, char **argv) fd = open_file_or_dir(argv[i], &dirstream); if (fd < 0) { - fprintf(stderr, "ERROR: can't access to '%s'\n", + fprintf(stderr, "ERROR: can't access '%s'\n", argv[1]); - return 12; + ret = 1; + goto out; } if (more_than_one) printf("\n"); @@ -838,11 +840,12 @@ cleanup: free(devinfo); if (ret) - return ret; + goto out; more_than_one = 1; } - return 0; +out: + return !!ret; } void print_device_chunks(int fd, struct device_info *devinfo,