]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
open_subarray: pass subarray name as explicit arg.
authorNeilBrown <neilb@suse.de>
Mon, 22 Nov 2010 08:35:25 +0000 (19:35 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 22 Nov 2010 08:35:25 +0000 (19:35 +1100)
Rather than hiding this arg in the 'st' structure, pass it explicitly.

This is a first step to getting rid of 'subarray' from 'supertype'.

The strcpy in open_subarray should have better error checking, but it
will disappear soon so there is little point.

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

diff --git a/Kill.c b/Kill.c
index f5c30e97ea61f074c4ef5568bc993c2d54a0f2ea..29a43ea6bf20fe10071d43f4f9262a766e197a88 100644 (file)
--- a/Kill.c
+++ b/Kill.c
@@ -96,16 +96,7 @@ int Kill_subarray(char *dev, char *subarray, int quiet)
 
        memset(st, 0, sizeof(*st));
 
-       if (snprintf(st->subarray, sizeof(st->subarray), "%s", subarray) >=
-           (int)sizeof(st->subarray)) {
-               if (!quiet)
-                       fprintf(stderr,
-                               Name ": Input overflow for subarray '%s' > %zu bytes\n",
-                               subarray, sizeof(st->subarray) - 1);
-               return 2;
-       }
-
-       fd = open_subarray(dev, st, quiet);
+       fd = open_subarray(dev, subarray, st, quiet);
        if (fd < 0)
                return 2;
 
index d9530a489e34c8f613b1e4ee9533c3ec5cf040a5..c3322f4d322be56113cdfc588e51494d1e9ee26b 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -1037,16 +1037,8 @@ int Update_subarray(char *dev, char *subarray, char *update, mddev_ident_t ident
        int fd, rv = 2;
 
        memset(st, 0, sizeof(*st));
-       if (snprintf(st->subarray, sizeof(st->subarray), "%s", subarray) >=
-           (signed)sizeof(st->subarray)) {
-               if (!quiet)
-                       fprintf(stderr,
-                               Name ": Input overflow for subarray '%s' > %zu bytes\n",
-                               subarray, sizeof(st->subarray) - 1);
-               return 2;
-       }
 
-       fd = open_subarray(dev, st, quiet);
+       fd = open_subarray(dev, subarray, st, quiet);
        if (fd < 0)
                return 2;
 
diff --git a/mdadm.h b/mdadm.h
index 6f7f06f5a58ff497c132ffa08de6929fd7d4d16a..9ca3223a79e5802c044d939372cecdad0ff93db2 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -1032,7 +1032,7 @@ extern int open_container(int fd);
 extern int is_container_member(struct mdstat_ent *ent, char *devname);
 extern int is_subarray_active(char *subarray, char *devname);
 int is_container_active(char *devname);
-extern int open_subarray(char *dev, struct supertype *st, int quiet);
+extern int open_subarray(char *dev, char *subarray, struct supertype *st, int quiet);
 extern struct superswitch *version_to_superswitch(char *vers);
 
 extern int mdmon_running(int devnum);
diff --git a/util.c b/util.c
index 27989636d4ab2318cbe423f2c027c8560a0cb567..b965c8d7883ddae9d8f7ec66a978fcf7374f59ed 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1441,12 +1441,12 @@ int is_container_active(char *container)
 
 /* open_subarray - opens a subarray in a container
  * @dev: container device name
- * @st: supertype with only ->subarray set
+ * @st: empty supertype
  * @quiet: block reporting errors flag
  *
  * On success returns an fd to a container and fills in *st
  */
-int open_subarray(char *dev, struct supertype *st, int quiet)
+int open_subarray(char *dev, char *subarray, struct supertype *st, int quiet)
 {
        struct mdinfo *mdi;
        int fd, err = 1;
@@ -1498,6 +1498,8 @@ int open_subarray(char *dev, struct supertype *st, int quiet)
                goto free_sysfs;
        }
 
+       strncpy(st->subarray, subarray, sizeof(st->subarray)-1);
+
        if (st->ss->load_super(st, fd, NULL)) {
                if (!quiet)
                        fprintf(stderr, Name ": Failed to find subarray-%s in %s\n",