]> www.infradead.org Git - mtd-utils.git/commitdiff
flash_{lock,unlock}: convert to common code
authorMike Frysinger <vapier@gentoo.org>
Mon, 6 Jun 2011 04:09:13 +0000 (00:09 -0400)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mon, 6 Jun 2011 12:32:43 +0000 (15:32 +0300)
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
flash_unlock.c

index 759a5bc29ecb46bb9b7874d3d5afa9da9a45d0eb..3bb33819aeb88306e38880a0a620665a4807b978 100644 (file)
 #include <sys/mount.h>
 #include <string.h>
 
+#include "common.h"
 #include <mtd/mtd-user.h>
 
+static void usage(int status)
+{
+       fprintf(status ? stderr : stdout,
+               "Usage: %s <mtd device> [offset] [block count]\n\n"
+               "If offset is not specified, it defaults to 0.\n"
+               "If block count is not specified, it defaults to all blocks.\n",
+               PROGRAM_NAME);
+       exit(status);
+}
+
 int main(int argc, char *argv[])
 {
        int fd, request;
        struct mtd_info_user mtdInfo;
        struct erase_info_user mtdLockInfo;
        int count;
+       const char *dev;
+
+       /* Parse command line options */
+       if (argc < 2 || argc > 4)
+               usage(1);
+       if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
+               usage(0);
 
-       /*
-        * Parse command line options
-        */
-       if (argc < 2) {
-               fprintf(stderr, "USAGE: %s <mtd device> <offset> <block count>\n", PROGRAM_NAME);
-               exit(1);
-       } else if (strncmp(argv[1], "/dev/mtd", 8) != 0) {
-               fprintf(stderr, "'%s' is not a MTD device.  Must specify mtd device: /dev/mtd?\n", argv[1]);
-               exit(1);
-       }
+       dev = argv[1];
 
-       fd = open(argv[1], O_RDWR);
-       if (fd < 0) {
-               fprintf(stderr, "Could not open mtd device: %s\n", argv[1]);
-               exit(1);
-       }
+       /* Get the device info to compare to command line sizes */
+       fd = open(dev, O_RDWR);
+       if (fd < 0)
+               sys_errmsg_die("could not open: %s", dev);
 
-       if (ioctl(fd, MEMGETINFO, &mtdInfo)) {
-               fprintf(stderr, "Could not get MTD device info from %s\n", argv[1]);
-               close(fd);
-               exit(1);
-       }
+       if (ioctl(fd, MEMGETINFO, &mtdInfo))
+               sys_errmsg_die("could not get mtd info: %s", dev);
 
+       /* Make sure user options are valid */
        if (argc > 2)
                mtdLockInfo.start = strtol(argv[2], NULL, 0);
        else
                mtdLockInfo.start = 0;
-       if (mtdLockInfo.start > mtdInfo.size) {
-               fprintf(stderr, "%#x is beyond device size %#x\n",
+       if (mtdLockInfo.start > mtdInfo.size)
+               errmsg_die("%#x is beyond device size %#x",
                        mtdLockInfo.start, mtdInfo.size);
-               close(fd);
-               exit(1);
-       }
 
        if (argc > 3) {
                count = strtol(argv[3], NULL, 0);
@@ -71,21 +74,17 @@ int main(int argc, char *argv[])
                        mtdLockInfo.length = mtdInfo.size - mtdInfo.erasesize;
                else
                        mtdLockInfo.length = mtdInfo.erasesize * count;
-       } else {
+       } else
                mtdLockInfo.length = mtdInfo.size - mtdInfo.erasesize;
-       }
-       if (mtdLockInfo.start + mtdLockInfo.length > mtdInfo.size) {
-               fprintf(stderr, "%s range is more than device supports\n", FLASH_MSG);
-               exit(1);
-       }
+       if (mtdLockInfo.start + mtdLockInfo.length > mtdInfo.size)
+               errmsg_die("range is more than device supports: %#x + %#x > %#x",
+                       mtdLockInfo.start, mtdLockInfo.length, mtdInfo.size);
 
+       /* Finally do the operation */
        request = FLASH_UNLOCK ? MEMUNLOCK : MEMLOCK;
-       if (ioctl(fd, request, &mtdLockInfo)) {
-               fprintf(stderr, "Could not %s MTD device: %s\n",
-                       FLASH_MSG, argv[1]);
-               close(fd);
-               exit(1);
-       }
+       if (ioctl(fd, request, &mtdLockInfo))
+               sys_errmsg_die("could not %s device: %s\n",
+                       FLASH_MSG, dev);
 
        return 0;
 }