Module Name:    src
Committed By:   pgoyette
Date:           Wed Sep  5 21:53:46 UTC 2018

Modified Files:
        src/tests/modules [pgoyette-compat]: t_builtin.c

Log Message:
Adapt this test to the new MODCTL_STAT, too.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.3.12.1 src/tests/modules/t_builtin.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/modules/t_builtin.c
diff -u src/tests/modules/t_builtin.c:1.3 src/tests/modules/t_builtin.c:1.3.12.1
--- src/tests/modules/t_builtin.c:1.3	Fri Jan 13 21:30:42 2017
+++ src/tests/modules/t_builtin.c	Wed Sep  5 21:53:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_builtin.c,v 1.3 2017/01/13 21:30:42 christos Exp $	*/
+/*	$NetBSD: t_builtin.c,v 1.3.12.1 2018/09/05 21:53:45 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.  All rights reserved.
@@ -139,9 +139,11 @@ ATF_TC_HEAD(disabledstat, tc)
 
 ATF_TC_BODY(disabledstat, tc)
 {
-	struct modstat ms[128];
+	modstat_t *ms;
 	struct iovec iov;
 	size_t i;
+	size_t len;
+	int count;
 	bool found = false;
 
 	rump_init();
@@ -149,14 +151,30 @@ ATF_TC_BODY(disabledstat, tc)
 
 	RL(rump_sys_modctl(MODCTL_UNLOAD, kernfs));
 
-	iov.iov_base = ms;
-	iov.iov_len = sizeof(ms);
-	RL(rump_sys_modctl(MODCTL_STAT, &iov));
-
-	for (i = 0; i < __arraycount(ms); i++) {
-		if (strcmp(ms[i].ms_name, kernfs) == 0) {
-			ATF_REQUIRE_EQ(ms[i].ms_refcnt, (u_int)-1);
-			found = 1;
+	for (len = 8192; ;) {
+		iov.iov_base = malloc(len);
+		iov.iov_len = len;
+
+		errno = 0;
+
+		if (rump_sys_modctl(MODCTL_STAT, &iov) != 0) {
+			int err = errno;
+			fprintf(stderr, "modctl(MODCTL_STAT) failed: %s\n",
+			    strerror(err));
+			atf_tc_fail("Failed to query module status");
+		}
+		if (len >= iov.iov_len)
+			break;
+		free(iov.iov_base);
+		len = iov.iov_len;
+	}
+
+	count = *(int *)iov.iov_base;
+	ms = (modstat_t *)((char *)iov.iov_base + sizeof(int));
+	while ( count ) {
+		if (strcmp(ms->ms_name, kernfs) == 0) {
+			ATF_REQUIRE_EQ(ms->ms_refcnt, (u_int)-1);
+			found = true;
 			break;
 		}
 	}

Reply via email to