aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2016-12-14 21:26:43 +0000
committerBrooks Davis <brooks@FreeBSD.org>2016-12-14 21:26:43 +0000
commitb32720888a5e55bb2d38a7494071bea228dcd644 (patch)
treea5556d2e39314f215408e720612217cf49510e31 /sbin
parentf50fae318d6dd4028b6aca25436053c28b07b0ea (diff)
downloadsrc-b32720888a5e55bb2d38a7494071bea228dcd644.tar.gz
src-b32720888a5e55bb2d38a7494071bea228dcd644.zip
Add a free_iovec() function to reset iovec's.
The primary purpose is to call nmount() in a loop with new iovec's so free_iovec takes arguments by reference and resets their values. Reviewed by: cem MFC after: 1 week Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D8513
Notes
Notes: svn path=/head/; revision=310092
Diffstat (limited to 'sbin')
-rw-r--r--sbin/mount/getmntopts.c14
-rw-r--r--sbin/mount/mntopts.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/sbin/mount/getmntopts.c b/sbin/mount/getmntopts.c
index f8a34530c5dc..59a383ebe5f0 100644
--- a/sbin/mount/getmntopts.c
+++ b/sbin/mount/getmntopts.c
@@ -181,3 +181,17 @@ build_iovec_argf(struct iovec **iov, int *iovlen, const char *name,
va_end(ap);
build_iovec(iov, iovlen, name, strdup(val), (size_t)-1);
}
+
+/*
+ * Free the iovec and reset to NULL with zero length. Useful for calling
+ * nmount in a loop.
+ */
+void
+free_iovec(struct iovec **iov, int *iovlen)
+{
+ int i;
+
+ for (i = 0; i < *iovlen; i++)
+ free((*iov)[i].iov_base);
+ free(*iov);
+}
diff --git a/sbin/mount/mntopts.h b/sbin/mount/mntopts.h
index d273dde9f1d5..4cb83f15e6e5 100644
--- a/sbin/mount/mntopts.h
+++ b/sbin/mount/mntopts.h
@@ -99,3 +99,4 @@ int checkpath(const char *, char resolved_path[]);
extern int getmnt_silent;
void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, size_t len);
void build_iovec_argf(struct iovec **iov, int *iovlen, const char *name, const char *fmt, ...);
+void free_iovec(struct iovec **iovec, int *iovlen);