mfi(4) & mfiutil(8): Sync with FreeBSD.
[dragonfly.git] / usr.sbin / mfiutil / mfi_config.c
index 7b8621e..f0dcb15 100644 (file)
@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/usr.sbin/mfiutil/mfi_config.c,v 1.6 2011/06/20 21:28:50 bz Exp $
+ * $FreeBSD: src/usr.sbin/mfiutil/mfi_config.c,v 1.8 2011/11/29 08:16:14 delphij Exp $
  */
 
 #include <sys/param.h>
@@ -348,6 +348,7 @@ parse_array(int fd, int raid_type, char *array_str, struct array_info *info)
                error = mfi_lookup_drive(fd, cp, &device_id);
                if (error) {
                        free(info->drives);
+                       info->drives = NULL;
                        return (error);
                }
 
@@ -355,12 +356,14 @@ parse_array(int fd, int raid_type, char *array_str, struct array_info *info)
                        error = errno;
                        warn("Failed to fetch drive info for drive %s", cp);
                        free(info->drives);
+                       info->drives = NULL;
                        return (error);
                }
 
                if (pinfo->fw_state != MFI_PD_STATE_UNCONFIGURED_GOOD) {
                        warnx("Drive %u is not available", device_id);
                        free(info->drives);
+                       info->drives = NULL;
                        return (EINVAL);
                }
        }
@@ -817,9 +820,11 @@ error:
        free(config);
        free(state.volumes);
        free(state.arrays);
-       for (i = 0; i < narrays; i++)
-               free(arrays[i].drives);
-       free(arrays);
+       if (arrays != NULL) {
+               for (i = 0; i < narrays; i++)
+                       free(arrays[i].drives);
+               free(arrays);
+       }
        close(fd);
 
        return (error);