From owner-svn-src-projects@FreeBSD.ORG Sat Apr 7 04:53:33 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1F577106566B; Sat, 7 Apr 2012 04:53:33 +0000 (UTC) (envelope-from gber@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0839D8FC0C; Sat, 7 Apr 2012 04:53:33 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q374rWHn043122; Sat, 7 Apr 2012 04:53:32 GMT (envelope-from gber@svn.freebsd.org) Received: (from gber@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q374rWXo043111; Sat, 7 Apr 2012 04:53:32 GMT (envelope-from gber@svn.freebsd.org) Message-Id: <201204070453.q374rWXo043111@svn.freebsd.org> From: Grzegorz Bernacki Date: Sat, 7 Apr 2012 04:53:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r233977 - in projects/nand: sbin/newfs_nandfs usr.sbin/nandsim usr.sbin/nandtool X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Apr 2012 04:53:33 -0000 Author: gber Date: Sat Apr 7 04:53:32 2012 New Revision: 233977 URL: http://svn.freebsd.org/changeset/base/233977 Log: nandtool newfs: Follow-up to latest changes in geom & cleanup Obtained from: Semihalf Supported by: FreeBSD Foundation, Juniper Networks Modified: projects/nand/sbin/newfs_nandfs/newfs_nandfs.c projects/nand/usr.sbin/nandsim/nandsim.c projects/nand/usr.sbin/nandtool/Makefile projects/nand/usr.sbin/nandtool/nand_erase.c projects/nand/usr.sbin/nandtool/nand_info.c projects/nand/usr.sbin/nandtool/nand_read.c projects/nand/usr.sbin/nandtool/nand_readoob.c projects/nand/usr.sbin/nandtool/nand_write.c projects/nand/usr.sbin/nandtool/nand_writeoob.c projects/nand/usr.sbin/nandtool/nandtool.c Modified: projects/nand/sbin/newfs_nandfs/newfs_nandfs.c ============================================================================== --- projects/nand/sbin/newfs_nandfs/newfs_nandfs.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/sbin/newfs_nandfs/newfs_nandfs.c Sat Apr 7 04:53:32 2012 (r233977) @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #define DEBUG #undef DEBUG @@ -165,7 +166,7 @@ nandfs_log2(unsigned n) * N.B. this function will return 0 if supplied 0. */ for (count = 0; n/2; count++) - n /= 2; + n /= 2; return count; } @@ -750,7 +751,7 @@ save_cpfile(void) /* mark rest of cp as invalid */ cno = NANDFS_FIRST_CNO + 1; i = NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET + 1; - for (;i < entries; i++) { + for (; i < entries; i++) { cp[i].cp_cno = cno++; cp[i].cp_flags = NANDFS_CHECKPOINT_INVALID; } @@ -909,10 +910,10 @@ check_parameters(void) i = 0; if (volumelabel) { while (isalnum(volumelabel[++i])); - if (volumelabel[i] != '\0') { - errx(1, "bad volume label. " - "Valid characters are alphanumerics."); - } + if (volumelabel[i] != '\0') { + errx(1, "bad volume label. " + "Valid characters are alphanumerics."); + } if (strlen(volumelabel) >= 16) errx(1, "Bad volume label. Length is longer than %d.", @@ -969,6 +970,7 @@ check_mounted(const char *fname, mode_t static void calculate_geometry(int fd) { + struct chip_param_io chip_params; char ident[DISK_IDENT_SIZE]; char medianame[MAXPATHLEN]; @@ -988,8 +990,13 @@ calculate_geometry(int fd) debug("mediasize: %#jx", mediasize); /* Get storage erase unit size */ - if (ioctl(fd, DIOCNBLKSIZE, &erasesize)) + if (!is_nand) erasesize = NANDFS_DEF_ERASESIZE; + else if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) + errx(1, "Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); + else + erasesize = chip_params.page_size * chip_params.pages_per_block; + debug("erasesize: %#jx", (uintmax_t)erasesize); if (blocks_per_segment == 0) { @@ -1134,8 +1141,8 @@ main(int argc, char *argv[]) fname = *argv++; if (!strchr(fname, '/')) { snprintf(buf, sizeof(buf), "%s%s", _PATH_DEV, fname); - if (!(fname = strdup(buf))) - err(1, NULL); + if (!(fname = strdup(buf))) + err(1, NULL); } fd = g_open(fname, 1); Modified: projects/nand/usr.sbin/nandsim/nandsim.c ============================================================================== --- projects/nand/usr.sbin/nandsim/nandsim.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandsim/nandsim.c Sat Apr 7 04:53:32 2012 (r233977) @@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #include #include Modified: projects/nand/usr.sbin/nandtool/Makefile ============================================================================== --- projects/nand/usr.sbin/nandtool/Makefile Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/Makefile Sat Apr 7 04:53:32 2012 (r233977) @@ -1,3 +1,5 @@ +# $FreeBSD$ + PROG= nandtool SRCS= nandtool.c nand_read.c nand_write.c nand_erase.c nand_info.c SRCS+= nand_readoob.c nand_writeoob.c @@ -6,6 +8,4 @@ DPADD= ${LIBGEOM} LDADD= -lgeom MAN= nandtool.8 -WARNS?= 7 - .include Modified: projects/nand/usr.sbin/nandtool/nand_erase.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nand_erase.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nand_erase.c Sat Apr 7 04:53:32 2012 (r233977) @@ -34,16 +34,17 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include "nandtool.h" int nand_erase(struct cmd_param *params) { + struct chip_param_io chip_params; char *dev; int fd = -1; off_t pos, count, err = 0; off_t start, nblocks, i; - int page_size, block_size, mult; + int block_size, mult; if (!(dev = param_get_string(params, "dev"))) { fprintf(stderr, "Please supply valid 'dev' parameter.\n"); @@ -58,21 +59,17 @@ int nand_erase(struct cmd_param *params) if ((count = param_get_int(params, "count")) < 0) count = 1; - if (ioctl(fd, DIOCGSECTORSIZE, &page_size)) { - perrorf("Cannot get page size for %s", dev); + if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) { + perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); err = errno; goto out; } - if (ioctl(fd, DIOCNBLKSIZE, &block_size)) { - perrorf("Cannot get block size for %s", dev); - err = errno; - goto out; - } + block_size = chip_params.page_size * chip_params.pages_per_block; if (param_has_value(params, "page")) { - pos = page_size * param_get_int(params, "page"); - mult = page_size; + pos = chip_params.page_size * param_get_int(params, "page"); + mult = chip_params.page_size; } else if (param_has_value(params, "block")) { pos = block_size * param_get_int(params, "block"); mult = block_size; @@ -82,7 +79,7 @@ int nand_erase(struct cmd_param *params) } else { /* Erase all chip */ - if (ioctl(fd, DIOCGMEDIASIZE, &count) < 0) { + if (ioctl(fd, DIOCGMEDIASIZE, &count) == -1) { err = errno; goto out; } Modified: projects/nand/usr.sbin/nandtool/nand_info.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nand_info.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nand_info.c Sat Apr 7 04:53:32 2012 (r233977) @@ -34,17 +34,19 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include "nandtool.h" int nand_info(struct cmd_param *params) { - int fd = -1, page_size, block_size, oob_size, err = 0; - off_t media_size; + struct chip_param_io chip_params; + int fd = -1, err = 0, block_size; + off_t chip_size, media_size; const char *dev; if ((dev = param_get_string(params, "dev")) == NULL) { - fprintf(stderr, "Please supply 'dev' parameter, eg. 'dev=/dev/gnand0'\n"); + fprintf(stderr, "Please supply 'dev' parameter, eg. " + "'dev=/dev/gnand0'\n"); return (EINVAL); } @@ -53,35 +55,29 @@ int nand_info(struct cmd_param *params) return (errno); } - if (ioctl(fd, DIOCGSECTORSIZE, &page_size) < 0) { - perrorf("Cannot ioctl(DIOCGSECTORSIZE)"); + if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) { + perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); err = errno; goto out; } - if (ioctl(fd, DIOCNBLKSIZE, &block_size) < 0) { - perrorf("Cannot ioctl(DIOCGSECTORSIZE)"); - err = errno; - goto out; - } - - if (ioctl(fd, DIOCNOOBSIZE, &oob_size) < 0) { - perrorf("Cannot ioctl(DIOCGSECTORSIZE)"); - err = errno; - goto out; - } - - if (ioctl(fd, DIOCGMEDIASIZE, &media_size) < 0) { + if (ioctl(fd, DIOCGMEDIASIZE, &media_size) == -1) { perrorf("Cannot ioctl(DIOCGMEDIASIZE)"); err = errno; goto out; } + block_size = chip_params.page_size * chip_params.pages_per_block; + chip_size = block_size * chip_params.blocks; + printf("Device:\t\t\t%s\n", dev); - printf("Page size:\t\t%d bytes\n", page_size); - printf("Block size:\t\t%d bytes (%d KB)\n", block_size, block_size / 1024); - printf("OOB size per page:\t%d bytes\n", oob_size); - printf("Chip size:\t\t%jd MB\n", (uintmax_t)(media_size / 1024 / 1024)); + printf("Page size:\t\t%d bytes\n", chip_params.page_size); + printf("Block size:\t\t%d bytes (%d KB)\n", block_size, + block_size / 1024); + printf("OOB size per page:\t%d bytes\n", chip_params.oob_size); + printf("Chip size:\t\t%jd MB\n", (uintmax_t)(chip_size / 1024 / 1024)); + printf("Slice size:\t\t%jd MB\n", + (uintmax_t)(media_size / 1024 / 1024)); out: if (fd != -1) @@ -89,4 +85,3 @@ out: return (err); } - Modified: projects/nand/usr.sbin/nandtool/nand_read.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nand_read.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nand_read.c Sat Apr 7 04:53:32 2012 (r233977) @@ -34,15 +34,16 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include "nandtool.h" int nand_read(struct cmd_param *params) { + struct chip_param_io chip_params; int fd = -1, out_fd = -1, ret; char *dev, *out; uint8_t *buf = NULL; - int pos, done = 0, count, mult, page_size, block_size; + int pos, done = 0, count, mult, block_size; int err = 0; if (!(dev = param_get_string(params, "dev"))) { @@ -64,28 +65,24 @@ int nand_read(struct cmd_param *params) goto out; } - if (ioctl(fd, DIOCNBLKSIZE, &block_size) < 0) { - perrorf("ioctl(DIOCNBLKSIZE) failed"); + if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) { + perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); err = errno; goto out; } - if (ioctl(fd, DIOCGSECTORSIZE, &page_size) < 0) { - perrorf("ioctl(DIOCGSECTORSIZE) failed"); - err = errno; - goto out; - } + block_size = chip_params.page_size * chip_params.pages_per_block; if (param_has_value(params, "page")) { - pos = page_size * param_get_int(params, "page"); - mult = page_size; + pos = chip_params.page_size * param_get_int(params, "page"); + mult = chip_params.page_size; } else if (param_has_value(params, "block")) { pos = block_size * param_get_int(params, "block"); mult = block_size; } else if (param_has_value(params, "pos")) { pos = param_get_int(params, "pos"); mult = 1; - if (pos % page_size) { + if (pos % chip_params.page_size) { fprintf(stderr, "Position must be page-size aligned!\n"); err = errno; goto out; @@ -102,8 +99,9 @@ int nand_read(struct cmd_param *params) else count = param_get_int(params, "count") * mult; - if (!(buf = malloc(page_size))) { - perrorf("Cannot allocate buffer [size %x]", page_size); + if (!(buf = malloc(chip_params.page_size))) { + perrorf("Cannot allocate buffer [size %x]", + chip_params.page_size); err = errno; goto out; } @@ -111,7 +109,8 @@ int nand_read(struct cmd_param *params) lseek(fd, pos, SEEK_SET); while (done < count) { - if ((ret = read(fd, buf, page_size)) != page_size) { + if ((ret = read(fd, buf, chip_params.page_size)) != + (int32_t)chip_params.page_size) { perrorf("read error (read %d bytes)", ret); goto out; } @@ -119,13 +118,14 @@ int nand_read(struct cmd_param *params) done += ret; if (out_fd != -1) { - if ((ret = write(out_fd, buf, page_size)) != page_size) { + if ((ret = write(out_fd, buf, chip_params.page_size)) != + (int32_t)chip_params.page_size) { perrorf("write error (written %d bytes)", ret); err = errno; goto out; } } else - hexdump(buf, page_size); + hexdump(buf, chip_params.page_size); } out: Modified: projects/nand/usr.sbin/nandtool/nand_readoob.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nand_readoob.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nand_readoob.c Sat Apr 7 04:53:32 2012 (r233977) @@ -35,24 +35,24 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include "nandtool.h" int nand_read_oob(struct cmd_param *params) { + struct chip_param_io chip_params; + struct nand_oob_rw req; char *dev, *out; int fd = -1, fd_out = -1; - int err = 0; + int page, err = 0; uint8_t *buf = NULL; - int oobsize, page, pagesize; - struct nand_oob_request req; if ((page = param_get_int(params, "page")) < 0) { fprintf(stderr, "You must supply valid 'page' argument.\n"); return (EINVAL); } - if (!(dev = param_get_string(params, "dev"))){ + if (!(dev = param_get_string(params, "dev"))) { fprintf(stderr, "You must supply 'dev' argument.\n"); return (EINVAL); } @@ -71,39 +71,33 @@ int nand_read_oob(struct cmd_param *para goto out; } - if (ioctl(fd, DIOCGSECTORSIZE, &pagesize)) { - perrorf("Cannot get page size for %s", dev); + if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) { + perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); err = errno; goto out; } - if (ioctl(fd, DIOCNOOBSIZE, &oobsize)) { - perrorf("Cannot get OOB size for %s", dev); - err = errno; - goto out; - } - - buf = malloc(oobsize); + buf = malloc(chip_params.oob_size); if (buf == NULL) { - perrorf("Cannot allocate %d bytes\n", oobsize); + perrorf("Cannot allocate %d bytes\n", chip_params.oob_size); err = errno; goto out; } - req.length = oobsize; - req.offset = page * pagesize; - req.ubuf = buf; + req.page = page; + req.len = chip_params.oob_size; + req.data = buf; - if (ioctl(fd, DIOCNREADOOB, &req)) { + if (ioctl(fd, NAND_IO_OOB_READ, &req) == -1) { perrorf("Cannot read OOB from %s", dev); err = errno; goto out; } if (fd_out != -1) - write(fd_out, buf, oobsize); + write(fd_out, buf, chip_params.oob_size); else - hexdump(buf, oobsize); + hexdump(buf, chip_params.oob_size); out: if (fd != -1) Modified: projects/nand/usr.sbin/nandtool/nand_write.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nand_write.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nand_write.c Sat Apr 7 04:53:32 2012 (r233977) @@ -34,15 +34,16 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include "nandtool.h" int nand_write(struct cmd_param *params) { + struct chip_param_io chip_params; char *dev, *file; int fd = -1, in_fd = -1, ret, err = 0; uint8_t *buf = NULL; - int page_size, block_size, mult, pos, done = 0, count, raw; + int block_size, mult, pos, done = 0, count, raw; raw = param_get_boolean(params, "raw"); @@ -67,29 +68,26 @@ int nand_write(struct cmd_param *params) goto out; } - if (ioctl(fd, DIOCGSECTORSIZE, &page_size) < 0) { - perrorf("ioctl(DIOCGSECTORSIZE) failed"); + if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) { + perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); err = errno; goto out; } - if (ioctl(fd, DIOCNBLKSIZE, &block_size) < 0) { - perrorf("ioctl(DIOCNBLKSIZE) failed"); - err = errno; - goto out; - } + block_size = chip_params.page_size * chip_params.pages_per_block; if (param_has_value(params, "page")) { - pos = page_size * param_get_int(params, "page"); - mult = page_size; + pos = chip_params.page_size * param_get_int(params, "page"); + mult = chip_params.page_size; } else if (param_has_value(params, "block")) { pos = block_size * param_get_int(params, "block"); mult = block_size; } else if (param_has_value(params, "pos")) { pos = param_get_int(params, "pos"); mult = 1; - if (pos % page_size) { - fprintf(stderr, "Position must be page-size aligned!\n"); + if (pos % chip_params.page_size) { + fprintf(stderr, "Position must be page-size " + "aligned!\n"); errno = EINVAL; goto out; } @@ -105,17 +103,18 @@ int nand_write(struct cmd_param *params) else count = param_get_int(params, "count") * mult; - if (!(buf = malloc(page_size))) { - perrorf("Cannot allocate buffer [size %x]", page_size); + if (!(buf = malloc(chip_params.page_size))) { + perrorf("Cannot allocate buffer [size %x]", + chip_params.page_size); err = errno; goto out; } lseek(fd, pos, SEEK_SET); - while (done < count) - { - if ((ret = read(in_fd, buf, page_size)) != page_size) { + while (done < count) { + if ((ret = read(in_fd, buf, chip_params.page_size)) != + (int32_t)chip_params.page_size) { if (ret > 0) { /* End of file ahead, truncate here */ break; @@ -126,7 +125,8 @@ int nand_write(struct cmd_param *params) } } - if ((ret = write(fd, buf, page_size)) != page_size) { + if ((ret = write(fd, buf, chip_params.page_size)) != + (int32_t)chip_params.page_size) { err = errno; goto out; } Modified: projects/nand/usr.sbin/nandtool/nand_writeoob.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nand_writeoob.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nand_writeoob.c Sat Apr 7 04:53:32 2012 (r233977) @@ -34,16 +34,17 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include "nandtool.h" int nand_write_oob(struct cmd_param *params) { + struct chip_param_io chip_params; + struct nand_oob_rw req; char *dev, *in; int fd = -1, fd_in = -1; uint8_t *buf = NULL; - int pagesize, oobsize, page, err = 0; - struct nand_oob_request req; + int page, err = 0; if (!(dev = param_get_string(params, "dev"))) { fprintf(stderr, "Please supply valid 'dev' parameter.\n"); @@ -71,38 +72,30 @@ int nand_write_oob(struct cmd_param *par goto out; } - if (ioctl(fd, DIOCGSECTORSIZE, &pagesize)) { - perrorf("Cannot get page size for %s", dev); + if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) { + perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)"); err = errno; goto out; } - - if (ioctl(fd, DIOCNOOBSIZE, &oobsize)) { - perrorf("Cannot get OOB size for %s", dev); - err = errno; - goto out; - } - - buf = xmalloc(oobsize); + buf = xmalloc(chip_params.oob_size); if (buf == NULL) { - perrorf("Cannot allocate %d bytes\n", oobsize); + perrorf("Cannot allocate %d bytes\n", chip_params.oob_size); err = errno; goto out; } - if (read(fd_in, buf, oobsize) < 0) { + if (read(fd_in, buf, chip_params.oob_size) < 0) { perrorf("Cannot read from %s", in); err = errno; goto out; } + req.page = page; + req.len = chip_params.oob_size; + req.data = buf; - req.offset = page * pagesize; - req.length = oobsize; - req.ubuf = buf; - - if (ioctl(fd, DIOCNWRITEOOB, &req)) { + if (ioctl(fd, NAND_IO_OOB_PROG, &req) == -1) { perrorf("Cannot write OOB to %s", dev); err = errno; goto out; Modified: projects/nand/usr.sbin/nandtool/nandtool.c ============================================================================== --- projects/nand/usr.sbin/nandtool/nandtool.c Sat Apr 7 04:39:14 2012 (r233976) +++ projects/nand/usr.sbin/nandtool/nandtool.c Sat Apr 7 04:53:32 2012 (r233977) @@ -55,7 +55,8 @@ static const struct { { NULL, NULL, NULL }, }; -char *param_get_string(struct cmd_param *params, const char *name) +char * +param_get_string(struct cmd_param *params, const char *name) { int i; @@ -67,7 +68,8 @@ char *param_get_string(struct cmd_param return (NULL); } -int param_get_int(struct cmd_param *params, const char *name) +int +param_get_int(struct cmd_param *params, const char *name) { unsigned long ret; char *str = param_get_string(params, name); @@ -85,7 +87,8 @@ int param_get_int(struct cmd_param *para return (ret); } -int param_get_boolean(struct cmd_param *params, const char *name) +int +param_get_boolean(struct cmd_param *params, const char *name) { char *str = param_get_string(params, name); @@ -98,7 +101,8 @@ int param_get_boolean(struct cmd_param * return (0); } -int param_has_value(struct cmd_param *params, const char *name) +int +param_has_value(struct cmd_param *params, const char *name) { int i; @@ -110,16 +114,18 @@ int param_has_value(struct cmd_param *pa return (0); } -int param_get_count(struct cmd_param *params) +int +param_get_count(struct cmd_param *params) { int i; for (i = 0; params[i].name[0] != '\0'; i++); - return i; + return (i); } -void hexdump(uint8_t *buf, int length) +void +hexdump(uint8_t *buf, int length) { int i, j; for (i = 0; i < length; i += 16) { @@ -140,28 +146,33 @@ void hexdump(uint8_t *buf, int length) } } -void *xmalloc(size_t len) +void * +xmalloc(size_t len) { void *ret = malloc(len); if (!ret) { - fprintf(stderr, "Cannot allocate buffer of %zd bytes. Exiting.\n", len); + fprintf(stderr, "Cannot allocate buffer of %zd bytes. " + "Exiting.\n", len); exit(EX_OSERR); } - return ret; + return (ret); } -void perrorf(const char *format, ...) +void +perrorf(const char *format, ...) { va_list args; + va_start(args, format); vfprintf(stderr, format, args); va_end(args); fprintf(stderr, ": %s\n", strerror(errno)); } -int usage(struct cmd_param *params) +int +usage(struct cmd_param *params) { int i; @@ -174,7 +185,8 @@ int usage(struct cmd_param *params) fprintf(stderr, "\t%s\n", commands[i].name); fprintf(stderr, "\n"); - fprintf(stderr, "For information about particular command, type:\n"); + fprintf(stderr, "For information about particular command, " + "type:\n"); fprintf(stderr, "'nandtool help topic='\n"); } else if (param_has_value(params, "topic")) { for (i = 0; commands[i].name != NULL; i++) { @@ -194,7 +206,8 @@ int usage(struct cmd_param *params) return (EX_USAGE); } -int main(int argc, const char *argv[]) +int +main(int argc, const char *argv[]) { struct cmd_param *params; int i, ret, idx; @@ -210,13 +223,14 @@ int main(int argc, const char *argv[]) if (sscanf(argv[i], "%63[^=]=%63s", params[idx].name, params[idx].value) < 2) { fprintf(stderr, "Syntax error in argument %d. " - "Argument should be in form 'name=value'.\n", i); + "Argument should be in form 'name=value'.\n", i); + free(params); return (-1); } } - params[idx+1].name[0] = '\0'; - params[idx+1].value[0] = '\0'; + params[idx].name[0] = '\0'; + params[idx].value[0] = '\0'; for (i = 0; commands[i].name != NULL; i++) { if (!strcmp(commands[i].name, argv[1])) {