]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Create parse_num() function.
authorNeilBrown <neilb@suse.de>
Mon, 9 Jul 2012 07:14:17 +0000 (17:14 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 9 Jul 2012 07:14:17 +0000 (17:14 +1000)
Instead of open-coding this several times, just do it once.

The frees up the name 'c' which I'm about to use.

Signed-off-by: NeilBrown <neilb@suse.de>
mdadm.c
mdadm.h
util.c

diff --git a/mdadm.c b/mdadm.c
index 5aa0823f01488949ecba5ccc83657e8466200e2b..476756e50372f3551ff21d33b52f2201f16a45f6 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -51,7 +51,6 @@ int main(int argc, char *argv[])
        int mode = 0;
        int opt;
        int option_index;
-       char *c;
        int rv;
        int i;
 
@@ -65,7 +64,6 @@ int main(int argc, char *argv[])
        int sparedisks = 0;
        struct mddev_ident ident;
        char *configfile = NULL;
-       char *cp;
        char *update = NULL;
        int scan = 0;
        int devmode = 0;
@@ -590,8 +588,8 @@ int main(int argc, char *argv[])
                                        raiddisks, optarg);
                                exit(2);
                        }
-                       raiddisks = strtol(optarg, &c, 10);
-                       if (!optarg[0] || *c || raiddisks<=0) {
+                       raiddisks = parse_num(optarg);
+                       if (raiddisks <= 0) {
                                pr_err("invalid number of raid devices: %s\n",
                                        optarg);
                                exit(2);
@@ -610,8 +608,8 @@ int main(int argc, char *argv[])
                                        level);
                                exit(2);
                        }
-                       sparedisks = strtol(optarg, &c, 10);
-                       if (!optarg[0] || *c || sparedisks < 0) {
+                       sparedisks = parse_num(optarg);
+                       if (sparedisks < 0) {
                                pr_err("invalid number of spare-devices: %s\n",
                                        optarg);
                                exit(2);
@@ -699,8 +697,8 @@ int main(int argc, char *argv[])
                        if (strcmp(optarg, "dev")==0)
                                ident.super_minor = -2;
                        else {
-                               ident.super_minor = strtoul(optarg, &cp, 10);
-                               if (!optarg[0] || *cp) {
+                               ident.super_minor = parse_num(optarg);
+                               if (ident.super_minor < 0) {
                                        pr_err("Bad super-minor number: %s.\n", optarg);
                                        exit(2);
                                }
@@ -865,8 +863,8 @@ int main(int argc, char *argv[])
                                pr_err("only specify delay once. %s ignored.\n",
                                        optarg);
                        else {
-                               delay = strtol(optarg, &c, 10);
-                               if (!optarg[0] || *c || delay<1) {
+                               delay = parse_num(optarg);
+                               if (delay<1) {
                                        pr_err("invalid delay: %s\n",
                                                optarg);
                                        exit(2);
@@ -1095,8 +1093,8 @@ int main(int argc, char *argv[])
                case O(CREATE, WriteBehind): /* write-behind mode */
                        write_behind = DEFAULT_MAX_WRITE_BEHIND;
                        if (optarg) {
-                               write_behind = strtol(optarg, &c, 10);
-                               if (write_behind < 0 || *c ||
+                               write_behind = parse_num(optarg);
+                               if (write_behind < 0 ||
                                    write_behind > 16383) {
                                        pr_err("Invalid value for maximum outstanding write-behind writes: %s.\n\tMust be between 0 and 16383.\n", optarg);
                                        exit(2);
diff --git a/mdadm.h b/mdadm.h
index 564b5105c186da5dde80bde0169bf0dc4256b8d0..056b87fcb400b3d0ba9c6873dfe231a1c493b094 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -1133,6 +1133,7 @@ extern long long parse_size(char *size);
 extern int parse_uuid(char *str, int uuid[4]);
 extern int parse_layout_10(char *layout);
 extern int parse_layout_faulty(char *layout);
+extern long parse_num(char *num);
 extern int check_ext2(int fd, char *name);
 extern int check_reiser(int fd, char *name);
 extern int check_raid(int fd, char *name);
diff --git a/util.c b/util.c
index d0765a6dabad4c678fc9ec7ca7dfc069d28802b6..ad3c1502fcdbaccc654cc09b7b2a90460e2c1d6b 100644 (file)
--- a/util.c
+++ b/util.c
@@ -253,6 +253,17 @@ int parse_layout_faulty(char *layout)
 
        return mode | (atoi(layout+ln)<< ModeShift);
 }
+
+long parse_num(char *num)
+{
+       /* Either return a valid number, or -1 */
+       char *c;
+       long rv = strtol(num, &c, 10);
+       if (rv < 0 || *c || !num[0])
+               return -1;
+       else
+               return rv;
+}
 #endif
 
 void remove_partitions(int fd)