Blob Blame History Raw
autofs-5.1.1 - factor out free multi map context

From: Ian Kent <raven@themaw.net>

Seperate out the free context function for the multi map module.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 modules/lookup_multi.c |   38 +++++++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 9 deletions(-)

diff --git a/modules/lookup_multi.c b/modules/lookup_multi.c
index 0ee20f5..36ace11 100644
--- a/modules/lookup_multi.c
+++ b/modules/lookup_multi.c
@@ -40,6 +40,32 @@ struct lookup_context {
 
 int lookup_version = AUTOFS_LOOKUP_VERSION;	/* Required by protocol */
 
+static int free_multi_context(struct lookup_context *ctxt)
+{
+	int rv;
+
+	if (!ctxt)
+		return 0;
+
+	rv = 0;
+	if (ctxt->m) {
+		int i;
+
+		for (i = 0; i < ctxt->n; i++) {
+			if (ctxt->m[i].mod)
+				rv = rv || close_lookup(ctxt->m[i].mod);
+			if (ctxt->m[i].argv)
+				free_argv(ctxt->m[i].argc, ctxt->m[i].argv);
+		}
+		free(ctxt->m);
+	}
+
+	if (ctxt->argl)
+		free(ctxt->argl);
+
+	return rv;
+}
+
 static struct lookup_mod *nss_open_lookup(const char *format, int argc, const char **argv)
 {
 	struct list_head nsslist;
@@ -306,16 +332,10 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
 int lookup_done(void *context)
 {
 	struct lookup_context *ctxt = (struct lookup_context *) context;
-	int i, rv = 0;
+	int rv;
 
-	for (i = 0; i < ctxt->n; i++) {
-		if (ctxt->m[i].mod)
-			rv = rv || close_lookup(ctxt->m[i].mod);
-		if (ctxt->m[i].argv)
-			free_argv(ctxt->m[i].argc, ctxt->m[i].argv);
-	}
-	free(ctxt->argl);
-	free(ctxt->m);
+	rv = free_multi_context(ctxt);
 	free(ctxt);
+
 	return rv;
 }