diff options
Diffstat (limited to 'ubi-utils')
-rw-r--r-- | ubi-utils/src/common.c | 40 | ||||
-rw-r--r-- | ubi-utils/src/common.h | 17 | ||||
-rw-r--r-- | ubi-utils/src/libubi.c | 73 | ||||
-rw-r--r-- | ubi-utils/src/libubi_int.h | 16 | ||||
-rw-r--r-- | ubi-utils/src/libubigen.c | 54 | ||||
-rw-r--r-- | ubi-utils/src/ubiattach.c | 55 | ||||
-rw-r--r-- | ubi-utils/src/ubicrc32.c | 14 | ||||
-rw-r--r-- | ubi-utils/src/ubidetach.c | 55 | ||||
-rw-r--r-- | ubi-utils/src/ubimkvol.c | 100 | ||||
-rw-r--r-- | ubi-utils/src/ubinfo.c | 116 | ||||
-rw-r--r-- | ubi-utils/src/ubinize.c | 206 | ||||
-rw-r--r-- | ubi-utils/src/ubirmvol.c | 11 | ||||
-rw-r--r-- | ubi-utils/src/ubiupdate.c | 73 |
13 files changed, 295 insertions, 535 deletions
diff --git a/ubi-utils/src/common.c b/ubi-utils/src/common.c index 56244df..fec640d 100644 --- a/ubi-utils/src/common.c +++ b/ubi-utils/src/common.c @@ -26,18 +26,17 @@ #include <stdio.h> #include <string.h> #include <ctype.h> +#include <stdlib.h> /** - * ubiutils_bytes_multiplier - convert size specifier to an integer - * multiplier. - * + * get_multiplier - convert size specifier to an integer multiplier. * @str: the size specifier string * * This function parses the @str size specifier, which may be one of * 'KiB', 'MiB', or 'GiB' into an integer multiplier. Returns positive * size multiplier in case of success and %-1 in case of failure. */ -int ubiutils_get_multiplier(const char *str) +static int get_multiplier(const char *str) { if (!str) return 1; @@ -57,6 +56,39 @@ int ubiutils_get_multiplier(const char *str) } /** + * ubiutils_get_bytes - convert a string containing amount of bytes into an + * integer + * @str: string to convert + * + * This function parses @str which may have an onee of 'KiB', 'MiB', or 'GiB' + * size specifiers. Returns positive amount of bytes in case of success and %-1 + * in case of failure. + */ +long long ubiutils_get_bytes(const char *str) +{ + char *endp; + long long bytes = strtoull(str, &endp, 0); + + if (endp == str || bytes < 0) { + fprintf(stderr, "incorrect amount of bytes: \"%s\"", str); + return -1; + } + + if (*endp != '\0') { + int mult = get_multiplier(endp); + + if (mult == -1) { + fprintf(stderr, "bad size specifier: \"%s\" - " + "should be 'KiB', 'MiB' or 'GiB'", endp); + return -1; + } + bytes *= mult; + } + + return bytes; +} + +/** * ubiutils_print_bytes - print bytes. * @bytes: variable to print * @bracket: whether brackets have to be put or not diff --git a/ubi-utils/src/common.h b/ubi-utils/src/common.h index 3ee93ff..203238e 100644 --- a/ubi-utils/src/common.h +++ b/ubi-utils/src/common.h @@ -20,6 +20,8 @@ #define __UBI_UTILS_COMMON_H__ #include <stdio.h> +#include <string.h> +#include <errno.h> #ifdef __cplusplus extern "C" { @@ -40,16 +42,25 @@ extern "C" { } while(0) /* Error messages */ -#define errmsg(fmt, ...) do { \ +#define errmsg(fmt, ...) ({ \ fprintf(stderr, PROGRAM_NAME " error: " fmt "\n", ##__VA_ARGS__); \ -} while(0) + -1; \ +}) + +/* System error messages */ +#define sys_errmsg(fmt, ...) ({ \ + int _err = errno; \ + fprintf(stderr, PROGRAM_NAME " error: " fmt "\n", ##__VA_ARGS__); \ + fprintf(stderr, "error %d (%s)", _err, strerror(_err)); \ + -1; \ +}) /* Warnings */ #define warnmsg(fmt, ...) do { \ fprintf(stderr, PROGRAM_NAME " warning: " fmt "\n", ##__VA_ARGS__); \ } while(0) -int ubiutils_get_multiplier(const char *str); +long long ubiutils_get_bytes(const char *str); void ubiutils_print_bytes(long long bytes, int bracket); void ubiutils_print_text(FILE *stream, const char *txt, int len); diff --git a/ubi-utils/src/libubi.c b/ubi-utils/src/libubi.c index 1cfefab..b53f18c 100644 --- a/ubi-utils/src/libubi.c +++ b/ubi-utils/src/libubi.c @@ -27,7 +27,6 @@ #include <sys/stat.h> #include <sys/types.h> #include <dirent.h> -#include <errno.h> #include <unistd.h> #include <sys/ioctl.h> #include <limits.h> @@ -50,8 +49,7 @@ static char *mkpath(const char *path, const char *name) n = malloc(len1 + len2 + 2); if (!n) { - errmsg("cannot allocate %d bytes", len1 + len2 + 2); - perror("malloc"); + sys_errmsg("cannot allocate %d bytes", len1 + len2 + 2); return NULL; } @@ -83,8 +81,7 @@ static int read_positive_ll(const char *file, long long *value) rd = read(fd, buf, 50); if (rd == -1) { - errmsg("cannot read \"%s\"", file); - perror("read"); + sys_errmsg("cannot read \"%s\"", file); goto out_error; } if (rd == 50) { @@ -106,11 +103,8 @@ static int read_positive_ll(const char *file, long long *value) goto out_error; } - if (close(fd)) { - errmsg("close failed on \"%s\"", file); - perror("close"); - return -1; - } + if (close(fd)) + return sys_errmsg("close failed on \"%s\"", file); return 0; @@ -166,16 +160,14 @@ static int read_data(const char *file, void *buf, int buf_len) rd = read(fd, buf, buf_len); if (rd == -1) { - errmsg("cannot read \"%s\"", file); - perror("read"); + sys_errmsg("cannot read \"%s\"", file); goto out_error; } /* Make sure all data is read */ tmp1 = read(fd, &tmp, 1); if (tmp1 == 1) { - errmsg("cannot read \"%s\"", file); - perror("read"); + sys_errmsg("cannot read \"%s\"", file); goto out_error; } if (tmp1) { @@ -186,8 +178,7 @@ static int read_data(const char *file, void *buf, int buf_len) } if (close(fd)) { - errmsg("close failed on \"%s\"", file); - perror("close"); + sys_errmsg("close failed on \"%s\"", file); return -1; } @@ -217,16 +208,14 @@ static int read_major(const char *file, int *major, int *minor) ret = sscanf(buf, "%d:%d\n", major, minor); if (ret != 2) { - errmsg("\"%s\" does not have major:minor format", file); errno = EINVAL; - return -1; + return errmsg("\"%s\" does not have major:minor format", file); } if (*major < 0 || *minor < 0) { - errmsg("bad major:minor %d:%d in \"%s\"", - *major, *minor, file); errno = EINVAL; - return -1; + return errmsg("bad major:minor %d:%d in \"%s\"", + *major, *minor, file); } return 0; @@ -377,18 +366,16 @@ static int vol_node2nums(struct libubi *lib, const char *node, int *dev_num, return -1; if (!S_ISCHR(st.st_mode)) { - errmsg("\"%s\" is not a character device", node); errno = EINVAL; - return -1; + return errmsg("\"%s\" is not a character device", node); } major = major(st.st_rdev); minor = minor(st.st_rdev); if (minor == 0) { - errmsg("\"%s\" is not a volume character device", node); errno = EINVAL; - return -1; + return errmsg("\"%s\" is not a volume character device", node); } if (ubi_get_info((libubi_t *)lib, &info)) @@ -445,18 +432,16 @@ static int dev_node2num(struct libubi *lib, const char *node, int *dev_num) return -1; if (!S_ISCHR(stat.st_mode)) { - errmsg("\"%s\" is not a character device", node); errno = EINVAL; - return -1; + return errmsg("\"%s\" is not a character device", node); } major = major(stat.st_rdev); minor = minor(stat.st_rdev); if (minor != 0) { - errmsg("\"%s\" is not an UBI character device", node); errno = EINVAL; - return -1; + return errmsg("\"%s\" is not an UBI character device", node); } if (ubi_get_info((libubi_t *)lib, &info)) @@ -551,8 +536,7 @@ libubi_t libubi_open(void) } if (close(fd)) { - errmsg("close failed on \"%s\"", lib->sysfs_ubi); - perror("close"); + sys_errmsg("close failed on \"%s\"", lib->sysfs_ubi); goto out_error; } @@ -840,11 +824,8 @@ int ubi_get_info(libubi_t desc, struct ubi_info *info) * devices are present. */ sysfs_ubi = opendir(lib->sysfs_ubi); - if (!sysfs_ubi) { - errmsg("cannot open %s", lib->sysfs_ubi); - perror("opendir"); - return -1; - } + if (!sysfs_ubi) + return sys_errmsg("cannot open %s", lib->sysfs_ubi); info->lowest_dev_num = INT_MAX; while (1) { @@ -874,16 +855,12 @@ int ubi_get_info(libubi_t desc, struct ubi_info *info) } if (!dirent && errno) { - errmsg("readdir failed on \"%s\"", lib->sysfs_ubi); - perror("readdir"); + sys_errmsg("readdir failed on \"%s\"", lib->sysfs_ubi); goto out_close; } - if (closedir(sysfs_ubi)) { - errmsg("closedir failed on \"%s\"", lib->sysfs_ubi); - perror("closedir"); - return -1; - } + if (closedir(sysfs_ubi)) + return sys_errmsg("closedir failed on \"%s\"", lib->sysfs_ubi); if (info->lowest_dev_num == INT_MAX) info->lowest_dev_num = 0; @@ -1044,16 +1021,12 @@ int ubi_get_dev_info1(libubi_t desc, int dev_num, struct ubi_dev_info *info) } if (!dirent && errno) { - errmsg("readdir failed on \"%s\"", lib->sysfs_ubi); - perror("readdir"); + sys_errmsg("readdir failed on \"%s\"", lib->sysfs_ubi); goto out_close; } - if (closedir(sysfs_ubi)) { - errmsg("closedir failed on \"%s\"", lib->sysfs_ubi); - perror("closedir"); - return -1; - } + if (closedir(sysfs_ubi)) + return sys_errmsg("closedir failed on \"%s\"", lib->sysfs_ubi); if (info->lowest_vol_num == INT_MAX) info->lowest_vol_num = 0; diff --git a/ubi-utils/src/libubi_int.h b/ubi-utils/src/libubi_int.h index 6490864..5b186a7 100644 --- a/ubi-utils/src/libubi_int.h +++ b/ubi-utils/src/libubi_int.h @@ -23,14 +23,26 @@ #ifndef __LIBUBI_INT_H__ #define __LIBUBI_INT_H__ +#include <string.h> +#include <errno.h> + #ifdef __cplusplus extern "C" { #endif /* Error messages */ -#define errmsg(fmt, ...) do { \ +#define errmsg(fmt, ...) ({ \ fprintf(stderr, "libubi error: " fmt "\n", ##__VA_ARGS__); \ -} while(0) + -1; \ +}) + +/* System error messages */ +#define sys_errmsg(fmt, ...) ({ \ + int _err = errno; \ + fprintf(stderr, "libubi error: " fmt "\n", ##__VA_ARGS__); \ + fprintf(stderr, "error %d (%s)", _err, strerror(_err)); \ + -1; \ +}) /* * The below are pre-define UBI file and directory names. diff --git a/ubi-utils/src/libubigen.c b/ubi-utils/src/libubigen.c index f7e6d5f..8d71fde 100644 --- a/ubi-utils/src/libubigen.c +++ b/ubi-utils/src/libubigen.c @@ -114,16 +114,13 @@ int ubigen_add_volume(const struct ubigen_info *ui, struct ubi_vtbl_record *vtbl_rec = &vtbl[vi->id]; uint32_t tmp; - if (vi->id >= ui->max_volumes) { - errmsg("too high volume id %d, max. volumes is %d", - vi->id, ui->max_volumes); - return -1; - } - if (vi->alignment >= ui->leb_size) { - errmsg("too large alignment %d, max is %d (LEB size)", - vi->alignment, ui->leb_size); - return -1; - } + if (vi->id >= ui->max_volumes) + return errmsg("too high volume id %d, max. volumes is %d", + vi->id, ui->max_volumes); + + if (vi->alignment >= ui->leb_size) + return errmsg("too large alignment %d, max is %d (LEB size)", + vi->alignment, ui->leb_size); memset(vtbl_rec, '\0', sizeof(struct ubi_vtbl_record)); tmp = (vi->bytes + ui->leb_size - 1) / ui->leb_size; @@ -225,16 +222,13 @@ int ubigen_write_volume(const struct ubigen_info *ui, int len = vi->usable_leb_size, rd, lnum = 0; char inbuf[ui->leb_size], outbuf[ui->peb_size]; - if (vi->id >= ui->max_volumes) { - errmsg("too high volume id %d, max. volumes is %d", - vi->id, ui->max_volumes); - return -1; - } - if (vi->alignment >= ui->leb_size) { - errmsg("too large alignment %d, max is %d (LEB size)", - vi->alignment, ui->leb_size); - return -1; - } + if (vi->id >= ui->max_volumes) + return errmsg("too high volume id %d, max. volumes is %d", + vi->id, ui->max_volumes); + + if (vi->alignment >= ui->leb_size) + return errmsg("too large alignment %d, max is %d (LEB size)", + vi->alignment, ui->leb_size); memset(outbuf, 0xFF, ui->data_offs); init_ec_hdr(ui, (struct ubi_ec_hdr *)outbuf); @@ -252,11 +246,9 @@ int ubigen_write_volume(const struct ubigen_info *ui, rd = fread(inbuf + len - l, 1, l, in); if (rd == 0) { if (ferror(in)) - errmsg("cannot read %d bytes from the input" - " file", l); + return errmsg("cannot read %d bytes from the input file", l); else - errmsg("not enough data in the input file"); - return -1; + return errmsg("not enough data in the input file"); } l -= rd; @@ -269,11 +261,8 @@ int ubigen_write_volume(const struct ubigen_info *ui, memset(outbuf + ui->data_offs + len, 0xFF, ui->peb_size - ui->data_offs - len); - if (fwrite(outbuf, 1, ui->peb_size, out) != ui->peb_size) { - errmsg("cannot write %d bytes from the output" - " file", l); - return -1; - } + if (fwrite(outbuf, 1, ui->peb_size, out) != ui->peb_size) + return errmsg("cannot write %d bytes from the output file", l); lnum += 1; } @@ -324,11 +313,8 @@ int ubigen_write_layout_vol(const struct ubigen_info *ui, if (size == ui->peb_size) { init_vid_hdr(ui, &vi, vid_hdr, 1, NULL, 0); size = fwrite(outbuf, 1, ui->peb_size, out); - if (size != ui->peb_size) { - errmsg("cannot write %d bytes", ui->peb_size); - perror("write"); - return -1; - } + if (size != ui->peb_size) + return sys_errmsg("cannot write %d bytes", ui->peb_size); } return 0; diff --git a/ubi-utils/src/ubiattach.c b/ubi-utils/src/ubiattach.c index 2e6c20d..b3d768a 100644 --- a/ubi-utils/src/ubiattach.c +++ b/ubi-utils/src/ubiattach.c @@ -26,7 +26,6 @@ #include <getopt.h> #include <stdlib.h> #include <string.h> -#include <errno.h> #include <libubi.h> #include "common.h" @@ -92,28 +91,22 @@ static int parse_opt(int argc, char * const argv[]) switch (key) { case 'd': args.devn = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.devn < 0) { - errmsg("bad UBI device number: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.devn < 0) + return errmsg("bad UBI device number: \"%s\"", optarg); break; case 'm': args.mtdn = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.mtdn < 0) { - errmsg("bad MTD device number: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.mtdn < 0) + return errmsg("bad MTD device number: \"%s\"", optarg); break; case 'o': args.vidoffs = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.vidoffs <= 0) { - errmsg("bad VID header offset: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.vidoffs <= 0) + return errmsg("bad VID header offset: \"%s\"", optarg); break; @@ -128,8 +121,7 @@ static int parse_opt(int argc, char * const argv[]) exit(EXIT_SUCCESS); case ':': - errmsg("parameter is missing"); - return -1; + return errmsg("parameter is missing"); default: fprintf(stderr, "Use -h for help\n"); @@ -137,18 +129,13 @@ static int parse_opt(int argc, char * const argv[]) } } - if (optind == argc) { - errmsg("UBI control device name was not specified (use -h for help)"); - return -1; - } else if (optind != argc - 1) { - errmsg("more then one UBI control device specified (use -h for help)"); - return -1; - } + if (optind == argc) + return errmsg("UBI control device name was not specified (use -h for help)"); + else if (optind != argc - 1) + return errmsg("more then one UBI control device specified (use -h for help)"); - if (args.mtdn == -1) { - errmsg("MTD device number was not specified (use -h for help)"); - return -1; - } + if (args.mtdn == -1) + return errmsg("MTD device number was not specified (use -h for help)"); args.node = argv[optind]; return 0; @@ -167,19 +154,15 @@ int main(int argc, char * const argv[]) return -1; libubi = libubi_open(); - if (libubi == NULL) { - errmsg("cannot open libubi"); - perror("libubi_open"); - return -1; - } + if (libubi == NULL) + return sys_errmsg("cannot open libubi"); /* * Make sure the kernel is fresh enough and this feature is supported. */ err = ubi_get_info(libubi, &ubi_info); if (err) { - errmsg("cannot get UBI information"); - perror("ubi_get_info"); + sys_errmsg("cannot get UBI information"); goto out_libubi; } @@ -194,16 +177,14 @@ int main(int argc, char * const argv[]) err = ubi_attach_mtd(libubi, args.node, &req); if (err) { - errmsg("cannot attach mtd%d", args.mtdn); - perror("ubi_attach_mtd"); + sys_errmsg("cannot attach mtd%d", args.mtdn); goto out_libubi; } /* Print some information about the new UBI device */ err = ubi_get_dev_info1(libubi, req.dev_num, &dev_info); if (err) { - errmsg("cannot get information about newly created UBI device"); - perror("ubi_get_dev_info1"); + sys_errmsg("cannot get information about newly created UBI device"); goto out_libubi; } diff --git a/ubi-utils/src/ubicrc32.c b/ubi-utils/src/ubicrc32.c index 8064439..5c7a8ba 100644 --- a/ubi-utils/src/ubicrc32.c +++ b/ubi-utils/src/ubicrc32.c @@ -28,7 +28,6 @@ #include <getopt.h> #include <argp.h> #include <unistd.h> -#include <errno.h> #include <mtd/ubi-header.h> #include "crc32.h" @@ -76,8 +75,7 @@ static int parse_opt(int argc, char * const argv[]) exit(EXIT_SUCCESS); case ':': - errmsg("parameter is missing"); - return -1; + return errmsg("parameter is missing"); default: fprintf(stderr, "Use -h for help\n"); @@ -97,11 +95,8 @@ int main(int argc, char * const argv[]) if (argc > 1) { fp = fopen(argv[1], "r"); - if (!fp) { - errmsg("cannot open \"%s\"", argv[1]); - perror("fopen"); - return -1; - } + if (!fp) + return sys_errmsg("cannot open \"%s\"", argv[1]); } else fp = stdin; @@ -114,8 +109,7 @@ int main(int argc, char * const argv[]) read = fread(buf, 1, BUFSIZE, fp); if (ferror(fp)) { - errmsg("cannot read input file"); - perror("fread"); + sys_errmsg("cannot read input file"); err = -1; goto out_close; } diff --git a/ubi-utils/src/ubidetach.c b/ubi-utils/src/ubidetach.c index fe53997..cd48368 100644 --- a/ubi-utils/src/ubidetach.c +++ b/ubi-utils/src/ubidetach.c @@ -26,7 +26,6 @@ #include <getopt.h> #include <stdlib.h> #include <string.h> -#include <errno.h> #include <libubi.h> #include "common.h" @@ -84,19 +83,15 @@ static int parse_opt(int argc, char * const argv[]) switch (key) { case 'd': args.devn = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.devn < 0) { - errmsg("bad UBI device number: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.devn < 0) + return errmsg("bad UBI device number: \"%s\"", optarg); break; case 'm': args.mtdn = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.mtdn < 0) { - errmsg("bad MTD device number: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.mtdn < 0) + return errmsg("bad MTD device number: \"%s\"", optarg); break; @@ -111,8 +106,7 @@ static int parse_opt(int argc, char * const argv[]) exit(EXIT_SUCCESS); case ':': - errmsg("parameter is missing"); - return -1; + return errmsg("parameter is missing"); default: fprintf(stderr, "Use -h for help\n"); @@ -120,23 +114,16 @@ static int parse_opt(int argc, char * const argv[]) } } - if (optind == argc) { - errmsg("UBI control device name was not specified (use -h for help)"); - return -1; - } else if (optind != argc - 1) { - errmsg("more then one UBI control device specified (use -h for help)"); - return -1; - } + if (optind == argc) + return errmsg("UBI control device name was not specified (use -h for help)"); + else if (optind != argc - 1) + return errmsg("more then one UBI control device specified (use -h for help)"); - if (args.mtdn == -1 && args.devn == -1) { - errmsg("neither MTD nor UBI devices were specified (use -h for help)"); - return -1; - } + if (args.mtdn == -1 && args.devn == -1) + return errmsg("neither MTD nor UBI devices were specified (use -h for help)"); - if (args.mtdn != -1 && args.devn != -1) { - errmsg("specify either MTD or UBI device (use -h for help)"); - return -1; - } + if (args.mtdn != -1 && args.devn != -1) + return errmsg("specify either MTD or UBI device (use -h for help)"); args.node = argv[optind]; return 0; @@ -153,19 +140,15 @@ int main(int argc, char * const argv[]) return -1; libubi = libubi_open(); - if (libubi == NULL) { - errmsg("cannot open libubi"); - perror("libubi_open"); - return -1; - } + if (libubi == NULL) + return sys_errmsg("cannot open libubi"); /* * Make sure the kernel is fresh enough and this feature is supported. */ err = ubi_get_info(libubi, &ubi_info); if (err) { - errmsg("cannot get UBI information"); - perror("ubi_get_info"); + sys_errmsg("cannot get UBI information"); goto out_libubi; } @@ -177,15 +160,13 @@ int main(int argc, char * const argv[]) if (args.devn != -1) { err = ubi_remove_dev(libubi, args.node, args.devn); if (err) { - errmsg("cannot remove ubi%d", args.devn); - perror("ubi_remove_dev"); + sys_errmsg("cannot remove ubi%d", args.devn); goto out_libubi; } } else { err = ubi_detach_mtd(libubi, args.node, args.mtdn); if (err) { - errmsg("cannot detach mtd%d", args.mtdn); - perror("ubi_detach_mtd"); + sys_errmsg("cannot detach mtd%d", args.mtdn); goto out_libubi; } } diff --git a/ubi-utils/src/ubimkvol.c b/ubi-utils/src/ubimkvol.c index 2415be8..75c180d 100644 --- a/ubi-utils/src/ubimkvol.c +++ b/ubi-utils/src/ubimkvol.c @@ -28,7 +28,6 @@ #include <getopt.h> #include <stdlib.h> #include <string.h> -#include <errno.h> #include <libubi.h> #include "common.h" @@ -104,29 +103,20 @@ static int param_sanity_check(void) { int len; - if (args.bytes == -1 && !args.maxavs && args.lebs == -1) { - errmsg("volume size was not specified (use -h for help)"); - return -1; - } + if (args.bytes == -1 && !args.maxavs && args.lebs == -1) + return errmsg("volume size was not specified (use -h for help)"); if ((args.bytes != -1 && (args.maxavs || args.lebs != -1)) || (args.lebs != -1 && (args.maxavs || args.bytes != -1)) || - (args.maxavs && (args.bytes != -1 || args.lebs != -1))) { - errmsg("size specified with more then one option"); - return -1; - } + (args.maxavs && (args.bytes != -1 || args.lebs != -1))) + return errmsg("size specified with more then one option"); - if (args.name == NULL) { - errmsg("volume name was not specified (use -h for help)"); - return -1; - } + if (args.name == NULL) + return errmsg("volume name was not specified (use -h for help)"); len = strlen(args.name); - if (len > UBI_MAX_VOLUME_NAME) { - errmsg("too long name (%d symbols), max is %d", - len, UBI_MAX_VOLUME_NAME); - return -1; - } + if (len > UBI_MAX_VOLUME_NAME) + return errmsg("too long name (%d symbols), max is %d", len, UBI_MAX_VOLUME_NAME); return 0; } @@ -147,52 +137,32 @@ static int parse_opt(int argc, char * const argv[]) args.vol_type = UBI_DYNAMIC_VOLUME; else if (!strcmp(optarg, "static")) args.vol_type = UBI_STATIC_VOLUME; - else { - errmsg("bad volume type: \"%s\"", optarg); - return -1; - } + else + return errmsg("bad volume type: \"%s\"", optarg); break; case 's': - args.bytes = strtoull(optarg, &endp, 0); - if (endp == optarg || args.bytes <= 0) { - errmsg("bad volume size: \"%s\"", optarg); - return -1; - } - if (*endp != '\0') { - int mult = ubiutils_get_multiplier(endp); - - if (mult == -1) { - errmsg("bad size specifier: \"%s\" - " - "should be 'KiB', 'MiB' or 'GiB'", endp); - return -1; - } - args.bytes *= mult; - } + args.bytes = ubiutils_get_bytes(optarg); + if (args.bytes <= 0) + return errmsg("bad volume size: \"%s\"", optarg); break; case 'S': args.lebs = strtoull(optarg, &endp, 0); - if (endp == optarg || args.lebs <= 0 || *endp != '\0') { - errmsg("bad LEB count: \"%s\"", optarg); - return -1; - } + if (endp == optarg || args.lebs <= 0 || *endp != '\0') + return errmsg("bad LEB count: \"%s\"", optarg); break; case 'a': args.alignment = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.alignment <= 0) { - errmsg("bad volume alignment: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.alignment <= 0) + return errmsg("bad volume alignment: \"%s\"", optarg); break; case 'n': args.vol_id = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.vol_id < 0) { - errmsg("bad volume ID: " "\"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.vol_id < 0) + return errmsg("bad volume ID: " "\"%s\"", optarg); break; case 'N': @@ -215,8 +185,7 @@ static int parse_opt(int argc, char * const argv[]) break; case ':': - errmsg("parameter is missing"); - return -1; + return errmsg("parameter is missing"); default: fprintf(stderr, "Use -h for help\n"); @@ -224,13 +193,10 @@ static int parse_opt(int argc, char * const argv[]) } } - if (optind == argc) { - errmsg("UBI device name was not specified (use -h for help)"); - return -1; - } else if (optind != argc - 1) { - errmsg("more then one UBI device specified (use -h for help)"); - return -1; - } + if (optind == argc) + return errmsg("UBI device name was not specified (use -h for help)"); + else if (optind != argc - 1) + return errmsg("more then one UBI device specified (use -h for help)"); args.node = argv[optind]; @@ -253,11 +219,8 @@ int main(int argc, char * const argv[]) return err; libubi = libubi_open(); - if (!libubi) { - errmsg("cannot open libubi"); - perror("libubi_open"); - return -1; - } + if (!libubi) + return sys_errmsg("cannot open libubi"); err = ubi_node_type(libubi, args.node); if (err == 2) { @@ -271,9 +234,8 @@ int main(int argc, char * const argv[]) err = ubi_get_dev_info(libubi, args.node, &dev_info); if (err) { - errmsg("cannot get information about UBI device \"%s\"", - args.node); - perror("ubi_get_dev_info"); + sys_errmsg("cannot get information about UBI device \"%s\"", + args.node); goto out_libubi; } @@ -296,8 +258,7 @@ int main(int argc, char * const argv[]) err = ubi_mkvol(libubi, args.node, &req); if (err < 0) { - errmsg("cannot UBI create volume"); - perror("ubi_mkvol"); + sys_errmsg("cannot UBI create volume"); goto out_libubi; } @@ -306,8 +267,7 @@ int main(int argc, char * const argv[]) /* Print information about the created device */ err = ubi_get_vol_info1(libubi, dev_info.dev_num, args.vol_id, &vol_info); if (err) { - errmsg("cannot get information about newly created UBI volume"); - perror("ubi_get_vol_info1"); + sys_errmsg("cannot get information about newly created UBI volume"); goto out_libubi; } diff --git a/ubi-utils/src/ubinfo.c b/ubi-utils/src/ubinfo.c index 07b1790..185caae 100644 --- a/ubi-utils/src/ubinfo.c +++ b/ubi-utils/src/ubinfo.c @@ -26,7 +26,6 @@ #include <getopt.h> #include <stdlib.h> #include <string.h> -#include <errno.h> #include <libubi.h> #include "common.h" @@ -99,18 +98,14 @@ static int parse_opt(int argc, char * const argv[]) case 'n': args.vol_id = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.vol_id < 0) { - errmsg("bad volume ID: " "\"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.vol_id < 0) + return errmsg("bad volume ID: " "\"%s\"", optarg); break; case 'd': args.devn = strtoul(optarg, &endp, 0); - if (*endp != '\0' || endp == optarg || args.devn < 0) { - errmsg("bad UBI device number: \"%s\"", optarg); - return -1; - } + if (*endp != '\0' || endp == optarg || args.devn < 0) + return errmsg("bad UBI device number: \"%s\"", optarg); break; @@ -125,8 +120,7 @@ static int parse_opt(int argc, char * const argv[]) exit(EXIT_SUCCESS); case ':': - errmsg("parameter is missing"); - return -1; + return errmsg("parameter is missing"); default: fprintf(stderr, "Use -h for help\n"); @@ -134,12 +128,10 @@ static int parse_opt(int argc, char * const argv[]) } } - if (optind == argc - 1) { + if (optind == argc - 1) args.node = argv[optind]; - } else if (optind < argc) { - errmsg("more then one UBI devices specified (use -h for help)"); - return -1; - } + else if (optind < argc) + return errmsg("more then one UBI devices specified (use -h for help)"); return 0; } @@ -150,44 +142,30 @@ static int translate_dev(libubi_t libubi, const char *node) err = ubi_node_type(libubi, node); if (err == -1) { - if (errno) { - errmsg("unrecognized device node \"%s\"", node); - return -1; - } - errmsg("\"%s\" does not correspond to any UBI device or volume", - node); - return -1; + if (errno) + return errmsg("unrecognized device node \"%s\"", node); + return errmsg("\"%s\" does not correspond to any UBI device or volume", node); } if (err == 1) { struct ubi_dev_info dev_info; err = ubi_get_dev_info(libubi, node, &dev_info); - if (err) { - errmsg("cannot get information about UBI device \"%s\"", - node); - perror("ubi_get_dev_info"); - return -1; - } + if (err) + return sys_errmsg("cannot get information about UBI device \"%s\"", node); args.devn = dev_info.dev_num; } else { struct ubi_vol_info vol_info; err = ubi_get_vol_info(libubi, node, &vol_info); - if (err) { - errmsg("cannot get information about UBI volume \"%s\"", - node); - perror("ubi_get_vol_info"); - return -1; - } + if (err) + return sys_errmsg("cannot get information about UBI volume \"%s\"", node); - if (args.vol_id != -1) { - errmsg("both volume character device node (\"%s\") and " - "volume ID (%d) are specify, use only one of them" - "(use -h for help)", node, args.vol_id); - return -1; - } + if (args.vol_id != -1) + return errmsg("both volume character device node (\"%s\") and " + "volume ID (%d) are specify, use only one of them" + "(use -h for help)", node, args.vol_id); args.devn = vol_info.dev_num; args.vol_id = vol_info.vol_id; @@ -202,12 +180,9 @@ static int print_vol_info(libubi_t libubi, int dev_num, int vol_id) struct ubi_vol_info vol_info; err = ubi_get_vol_info1(libubi, dev_num, vol_id, &vol_info); - if (err) { - errmsg("cannot get information about UBI volume %d on ubi%d", - vol_id, dev_num); - perror("ubi_get_vol_info1"); - return -1; - } + if (err) + return sys_errmsg("cannot get information about UBI volume %d on ubi%d", + vol_id, dev_num); printf("Volume ID: %d (on ubi%d)\n", vol_info.vol_id, vol_info.dev_num); printf("Type: %s\n", @@ -237,11 +212,8 @@ static int print_dev_info(libubi_t libubi, int dev_num, int all) struct ubi_vol_info vol_info; err = ubi_get_dev_info1(libubi, dev_num, &dev_info); - if (err) { - errmsg("cannot get information about UBI device %d", dev_num); - perror("ubi_get_dev_info1"); - return -1; - } + if (err) + return sys_errmsg("cannot get information about UBI device %d", dev_num); printf("ubi%d:\n", dev_info.dev_num); printf("Volumes count: %d\n", dev_info.vol_count); @@ -274,10 +246,8 @@ static int print_dev_info(libubi_t libubi, int dev_num, int all) if (errno == ENOENT) continue; - errmsg("libubi failed to probe volume %d on ubi%d", - i, dev_info.dev_num); - perror("ubi_get_vol_info1"); - return -1; + return sys_errmsg("libubi failed to probe volume %d on ubi%d", + i, dev_info.dev_num); } if (!first) @@ -304,10 +274,8 @@ static int print_dev_info(libubi_t libubi, int dev_num, int all) if (errno == ENOENT) continue; - errmsg("libubi failed to probe volume %d on ubi%d", - i, dev_info.dev_num); - perror("ubi_get_vol_info1"); - return -1; + return sys_errmsg("libubi failed to probe volume %d on ubi%d", + i, dev_info.dev_num); } first = 0; @@ -326,11 +294,8 @@ static int print_general_info(libubi_t libubi, int all) struct ubi_dev_info dev_info; err = ubi_get_info(libubi, &ubi_info); - if (err) { - errmsg("cannot get UBI information"); - perror("ubi_get_info"); - return -1; - } + if (err) + return sys_errmsg("cannot get UBI information"); printf("UBI version: %d\n", ubi_info.version); printf("Count of UBI devices: %d\n", ubi_info.dev_count); @@ -351,9 +316,7 @@ static int print_general_info(libubi_t libubi, int all) if (errno == ENOENT) continue; - errmsg("libubi failed to probe UBI device %d", i); - perror("ubi_get_dev_info1"); - return -1; + return sys_errmsg("libubi failed to probe UBI device %d", i); } if (!first) @@ -380,9 +343,7 @@ static int print_general_info(libubi_t libubi, int all) if (errno == ENOENT) continue; - errmsg("libubi failed to probe UBI device %d", i); - perror("ubi_get_dev_info1"); - return -1; + return sys_errmsg("libubi failed to probe UBI device %d", i); } first = 0; @@ -402,17 +363,12 @@ int main(int argc, char * const argv[]) if (err) return -1; - if (!args.node && args.devn != -1) { - errmsg("specify either device number or node file (use -h for help)"); - return -1; - } + if (!args.node && args.devn != -1) + return errmsg("specify either device number or node file (use -h for help)"); libubi = libubi_open(); - if (libubi == NULL) { - errmsg("cannot open libubi"); - perror("libubi_open"); - return -1; - } + if (libubi == NULL) + return sys_errmsg("cannot open libubi"); if (args.node) { /* diff --git a/ubi-utils/src/ubinize.c b/ubi-utils/src/ubinize.c index 9660b09..aaa89df 100644 --- a/ubi-utils/src/ubinize.c +++ b/ubi-utils/src/ubinize.c @@ -28,7 +28,6 @@ #include <getopt.h> #include <stdio.h> #include <string.h> -#include <errno.h> #include <unistd.h> #include <sys/stat.h> @@ -163,89 +162,45 @@ static int parse_opt(int argc, char * const argv[]) switch (key) { case 'o': args.fp_out = fopen(optarg, "wb"); - if (!args.fp_out) { - errmsg("cannot open file \"%s\"", optarg); - return -1; - } + if (!args.fp_out) + return errmsg("cannot open file \"%s\"", optarg); args.f_out = optarg; break; case 'p': - args.peb_size = strtoull(optarg, &endp, 0); - if (endp == optarg || args.peb_size <= 0) { - errmsg("bad physical eraseblock size: \"%s\"", optarg); - return -1; - } - if (*endp != '\0') { - int mult = ubiutils_get_multiplier(endp); - - if (mult == -1) { - errmsg("bad size specifier: \"%s\" - " - "should be 'KiB', 'MiB' or 'GiB'", endp); - return -1; - } - args.peb_size *= mult; - } + args.peb_size = ubiutils_get_bytes(optarg); + if (args.peb_size <= 0) + return errmsg("bad physical eraseblock size: \"%s\"", optarg); break; case 'm': - args.min_io_size = strtoull(optarg, &endp, 0); - if (endp == optarg || args.min_io_size <= 0) { - errmsg("bad min. I/O unit size: \"%s\"", optarg); - return -1; - } - if (*endp != '\0') { - int mult = ubiutils_get_multiplier(endp); - - if (mult == -1) { - errmsg("bad size specifier: \"%s\" - " - "should be 'KiB', 'MiB' or 'GiB'", endp); - return -1; - } - args.min_io_size *= mult; - } + args.min_io_size = ubiutils_get_bytes(optarg); + if (args.min_io_size <= 0) + return errmsg("bad min. I/O unit size: \"%s\"", optarg); break; case 's': - args.subpage_size = strtoull(optarg, &endp, 0); - if (endp == optarg || args.subpage_size <= 0) { - errmsg("bad sub-page size: \"%s\"", optarg); - return -1; - } - if (*endp != '\0') { - int mult = ubiutils_get_multiplier(endp); - - if (mult == -1) { - errmsg("bad size specifier: \"%s\" - " - "should be 'KiB', 'MiB' or 'GiB'", endp); - return -1; - } - args.subpage_size *= mult; - } + args.subpage_size = ubiutils_get_bytes(optarg); + if (args.subpage_size <= 0) + return errmsg("bad sub-page size: \"%s\"", optarg); break; case 'O': args.vid_hdr_offs = strtoul(optarg, &endp, 0); - if (endp == optarg || args.vid_hdr_offs < 0) { - errmsg("bad VID header offset: \"%s\"", optarg); - return -1; - } + if (endp == optarg || args.vid_hdr_offs < 0) + return errmsg("bad VID header offset: \"%s\"", optarg); break; case 'e': args.ec = strtoul(optarg, &endp, 0); - if (endp == optarg || args.ec < 0) { - errmsg("bad erase counter value: \"%s\"", optarg); - return -1; - } + if (endp == optarg || args.ec < 0) + return errmsg("bad erase counter value: \"%s\"", optarg); break; case 'x': args.ubi_ver = strtoul(optarg, &endp, 0); - if (endp == optarg || args.ubi_ver < 0) { - errmsg("bad UBI version: \"%s\"", optarg); - return -1; - } + if (endp == optarg || args.ubi_ver < 0) + return errmsg("bad UBI version: \"%s\"", optarg); break; case 'v': @@ -269,27 +224,19 @@ static int parse_opt(int argc, char * const argv[]) } } - if (optind == argc) { - errmsg("input PFI file was not specified (use -h for help)"); - return -1; - } + if (optind == argc) + return errmsg("input PFI file was not specified (use -h for help)"); - if (optind != argc - 1) { - errmsg("more then one input PFI file was specified (use -h for help)"); - return -1; - } + if (optind != argc - 1) + return errmsg("more then one input PFI file was specified (use -h for help)"); args.f_in = argv[optind]; - if (args.peb_size < 0) { - errmsg("physical eraseblock size was not specified (use -h for help)"); - return -1; - } + if (args.peb_size < 0) + return errmsg("physical eraseblock size was not specified (use -h for help)"); - if (args.min_io_size < 0) { - errmsg("min. I/O unit size was not specified (use -h for help)"); - return -1; - } + if (args.min_io_size < 0) + return errmsg("min. I/O unit size was not specified (use -h for help)"); if (args.subpage_size < 0) args.subpage_size = args.min_io_size; @@ -310,10 +257,8 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, *img = NULL; - if (strlen(sname) > 128) { - errmsg("too long section name \"%s\"", sname); - return -1; - } + if (strlen(sname) > 128) + return errmsg("too long section name \"%s\"", sname); /* Make sure mode is UBI, otherwise ignore this section */ sprintf(buf, "%s:mode", sname); @@ -342,21 +287,14 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, /* Fetch volume id */ sprintf(buf, "%s:vol_id", sname); vi->id = iniparser_getint(args.dict, buf, -1); - if (vi->id == -1) { - errmsg("\"vol_id\" key not found in section \"%s\"", sname); - return -1; - } + if (vi->id == -1) + return errmsg("\"vol_id\" key not found in section \"%s\"", sname); - if (vi->id < 0) { - errmsg("negative volume ID %d", vi->id); - return -1; - } + if (vi->id < 0) + return errmsg("negative volume ID %d", vi->id); - if (vi->id >= UBI_MAX_VOLUMES) { - errmsg("too highe volume ID %d, max. is %d", - vi->id, UBI_MAX_VOLUMES); - return -1; - } + if (vi->id >= UBI_MAX_VOLUMES) + return errmsg("too high volume ID %d, max. is %d", vi->id, UBI_MAX_VOLUMES); verbose(args.verbose, "volume ID: %d", vi->id); @@ -364,48 +302,24 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, sprintf(buf, "%s:vol_size", sname); p = iniparser_getstring(args.dict, buf, NULL); if (p) { - char *endp; - - vi->bytes = strtoull((char *)p, &endp, 0); - if (endp == p || vi->bytes <= 0) { - errmsg("bad \"vol_size\" key: \"%s\"", p); - return -1; - } - - if (*endp != '\0') { - int mult = ubiutils_get_multiplier(endp); - - if (mult == -1) { - errmsg("bad size specifier: \"%s\" - " - "should be 'KiB', 'MiB' or 'GiB'", endp); - return -1; - } - vi->bytes *= mult; - } + vi->bytes = ubiutils_get_bytes(optarg); + if (vi->bytes <= 0) + return errmsg("bad \"vol_size\" key: \"%s\"", p); verbose(args.verbose, "volume size: %lld bytes", vi->bytes); } else { struct stat st; - if (!*img) { - errmsg("neither image file (\"image=\") nor volume size" - " (\"vol_size=\") specified"); - return -1; - } + if (!*img) + return errmsg("neither image file (\"image=\") nor volume size (\"vol_size=\") specified"); - if (stat(*img, &st)) { - errmsg("cannot stat \"%s\"", *img); - perror("stat"); - return -1; - } + if (stat(*img, &st)) + return sys_errmsg("cannot stat \"%s\"", *img); vi->bytes = st.st_size; - if (vi->bytes == 0) { - errmsg("file \"%s\" referred from section \"%s\" is empty", - *img, sname); - return -1; - } + if (vi->bytes == 0) + return errmsg("file \"%s\" referred from section \"%s\" is empty", *img, sname); printf(PROGRAM_NAME ": volume size was not specified in" "section \"%s\", assume ", sname); @@ -425,10 +339,8 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, vi->type = UBI_VID_STATIC; else if (!strcmp(p, "dynamic")) vi->type = UBI_VID_DYNAMIC; - else { - errmsg("invalid volume type \"%s\"", p); - return -1; - } + else + return errmsg("invalid volume type \"%s\"", p); } verbose(args.verbose, "volume type: %s", @@ -437,18 +349,14 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, /* Fetch volume name */ sprintf(buf, "%s:vol_name", sname); p = iniparser_getstring(args.dict, buf, NULL); - if (!p) { - errmsg("\"vol_name\" key not found in section \"%s\"", sname); - return -1; - } + if (!p) + return errmsg("\"vol_name\" key not found in section \"%s\"", sname); vi->name = p; vi->name_len = strlen(p); - if (vi->name_len > UBI_VOL_NAME_MAX) { - errmsg("too long volume name in section \"%s\", max. is " - "%d characters", vi->name, UBI_VOL_NAME_MAX); - return -1; - } + if (vi->name_len > UBI_VOL_NAME_MAX) + return errmsg("too long volume name in section \"%s\", max. is %d characters", + vi->name, UBI_VOL_NAME_MAX); verbose(args.verbose, "volume name: %s", p); @@ -459,10 +367,8 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, normsg("volume alignment was not specified in section " "\"%s\", assume 1", sname); vi->alignment = 1; - } else if (vi->id < 0) { - errmsg("negative volume alignement %d", vi->alignment); - return -1; - } + } else if (vi->id < 0) + return errmsg("negative volume alignement %d", vi->alignment); verbose(args.verbose, "volume alignment: %d", vi->alignment); @@ -474,9 +380,7 @@ int read_section(const char *sname, struct ubigen_vol_info *vi, verbose(args.verbose, "autoresize flags found"); vi->flags |= UBI_VTBL_AUTORESIZE_FLG; } else { - errmsg("unknown flags \"%s\" in section \"%s\"", - p, sname); - return -1; + return errmsg("unknown flags \"%s\" in section \"%s\"", p, sname); } } @@ -580,8 +484,7 @@ int main(int argc, char * const argv[]) continue; if (stat(img, &st)) { - errmsg("cannot stat \"%s\"", img); - perror("stat"); + sys_errmsg("cannot stat \"%s\"", img); goto out_dict; } @@ -597,8 +500,7 @@ int main(int argc, char * const argv[]) f = fopen(img, "r"); if (!f) { - errmsg("cannot open \"%s\"", img); - perror("fopen"); + sys_errmsg("cannot open \"%s\"", img); goto out_dict; } diff --git a/ubi-utils/src/ubirmvol.c b/ubi-utils/src/ubirmvol.c index ca315a3..c30446a 100644 --- a/ubi-utils/src/ubirmvol.c +++ b/ubi-utils/src/ubirmvol.c @@ -28,7 +28,6 @@ #include <getopt.h> #include <stdlib.h> #include <string.h> -#include <errno.h> #include <libubi.h> #include "common.h" @@ -143,11 +142,8 @@ int main(int argc, char * const argv[]) return -1; libubi = libubi_open(); - if (libubi == NULL) { - errmsg("cannot open libubi"); - perror("libubi_open"); - return -1; - } + if (libubi == NULL) + return sys_errmsg("cannot open libubi"); err = ubi_node_type(libubi, args.node); if (err == 2) { @@ -161,8 +157,7 @@ int main(int argc, char * const argv[]) err = ubi_rmvol(libubi, args.node, args.vol_id); if (err) { - errmsg("cannot UBI remove volume"); - perror("ubi_rmvol"); + sys_errmsg("cannot UBI remove volume"); goto out_libubi; } diff --git a/ubi-utils/src/ubiupdate.c b/ubi-utils/src/ubiupdate.c index 6898119..c17b3c5 100644 --- a/ubi-utils/src/ubiupdate.c +++ b/ubi-utils/src/ubiupdate.c @@ -24,7 +24,6 @@ * Artem Bityutskiy */ -#include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdint.h> @@ -100,8 +99,7 @@ static int parse_opt(int argc, char * const argv[]) exit(EXIT_SUCCESS); case ':': - errmsg("parameter is missing"); - return -1; + return errmsg("parameter is missing"); default: fprintf(stderr, "Use -h for help\n"); @@ -109,14 +107,11 @@ static int parse_opt(int argc, char * const argv[]) } } - if (optind == argc) { - errmsg("UBI device name was not specified (use -h for help)"); - return -1; - } else if (optind != argc - 2) { - errmsg("specify UBI device name and image file name as first 2 " - "parameters (use -h for help)"); - return -1; - } + if (optind == argc) + return errmsg("UBI device name was not specified (use -h for help)"); + else if (optind != argc - 2) + return errmsg("specify UBI device name and image file name as first 2 " + "parameters (use -h for help)"); args.node = argv[optind]; args.img = argv[optind + 1]; @@ -129,16 +124,12 @@ static int truncate_volume(libubi_t libubi) int err, fd; fd = open(args.node, O_RDWR); - if (fd == -1) { - errmsg("cannot open \"%s\"", args.node); - perror("open"); - return -1; - } + if (fd == -1) + return sys_errmsg("cannot open \"%s\"", args.node); err = ubi_update_start(libubi, fd, 0); if (err) { - errmsg("cannot truncate volume \"%s\"", args.node); - perror("ubi_update_start"); + sys_errmsg("cannot truncate volume \"%s\"", args.node); close(fd); return -1; } @@ -158,17 +149,12 @@ static int ubi_write(int fd, const void *buf, int len) warnmsg("do not interrupt me!"); continue; } - errmsg("cannot write %d bytes to volume \"%s\"", - len, args.node); - perror("write"); - return -1; + return sys_errmsg("cannot write %d bytes to volume \"%s\"", + len, args.node); } - if (ret == 0) { - errmsg("cannot write %d bytes to volume \"%s\"", - len, args.node); - return -1; - } + if (ret == 0) + return errmsg("cannot write %d bytes to volume \"%s\"", len, args.node); len -= ret; buf += ret; @@ -185,10 +171,8 @@ static int update_volume(libubi_t libubi, struct ubi_vol_info *vol_info) char *buf; buf = malloc(vol_info->leb_size); - if (!buf) { - errmsg("cannot allocate %d bytes of memory", vol_info->leb_size); - return -1; - } + if (!buf) + return errmsg("cannot allocate %d bytes of memory", vol_info->leb_size); err = stat(args.img, &st); if (err < 0) { @@ -205,22 +189,19 @@ static int update_volume(libubi_t libubi, struct ubi_vol_info *vol_info) fd = open(args.node, O_RDWR); if (fd == -1) { - errmsg("cannot open UBI volume \"%s\"", args.node); - perror("open"); + sys_errmsg("cannot open UBI volume \"%s\"", args.node); goto out_free; } ifd = open(args.img, O_RDONLY); if (ifd == -1) { - errmsg("cannot open \"%s\"", args.img); - perror("open"); + sys_errmsg("cannot open \"%s\"", args.img); goto out_close1; } err = ubi_update_start(libubi, fd, bytes); if (err) { - errmsg("cannot start volume \"%s\" update", args.node); - perror("ubi_update_start"); + sys_errmsg("cannot start volume \"%s\" update", args.node); goto out_close; } @@ -236,9 +217,8 @@ static int update_volume(libubi_t libubi, struct ubi_vol_info *vol_info) warnmsg("do not interrupt me!"); continue; } else { - errmsg("cannot read %d bytes from \"%s\"", - tocopy, args.img); - perror("read"); + sys_errmsg("cannot read %d bytes from \"%s\"", + tocopy, args.img); goto out_close; } } @@ -273,14 +253,12 @@ int main(int argc, char * const argv[]) if (err) return -1; - if (!args.img && !args.truncate) { - errmsg("incorrect arguments, use -h for help"); - return -1; - } + if (!args.img && !args.truncate) + return errmsg("incorrect arguments, use -h for help"); libubi = libubi_open(); if (libubi == NULL) { - perror("Cannot open libubi"); + sys_errmsg("cannot open libubi"); goto out_libubi; } @@ -296,9 +274,8 @@ int main(int argc, char * const argv[]) err = ubi_get_vol_info(libubi, args.node, &vol_info); if (err) { - errmsg("cannot get information about UBI volume \"%s\"", - args.node); - perror("ubi_get_dev_info"); + sys_errmsg("cannot get information about UBI volume \"%s\"", + args.node); goto out_libubi; } |