[LTP] [PATCH 1/1] mallopt01: Rewrite to new API
Petr Vorel
pvorel@suse.cz
Tue Jan 19 14:24:27 CET 2021
From: Petr Vorel <petr.vorel@gmail.com>
Detect non-POSIX mallopt() support with autotools.
NOTE: mallopt() is supported in glibc and uClibc.
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
configure.ac | 1 +
testcases/kernel/syscalls/mallopt/mallopt01.c | 158 ++++++------------
2 files changed, 51 insertions(+), 108 deletions(-)
diff --git a/configure.ac b/configure.ac
index e44e25cc6..17ef76c1a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,6 +94,7 @@ AC_CHECK_FUNCS_ONCE([ \
io_uring_register \
io_uring_enter \
kcmp \
+ mallopt \
mkdirat \
mknodat \
modify_ldt \
diff --git a/testcases/kernel/syscalls/mallopt/mallopt01.c b/testcases/kernel/syscalls/mallopt/mallopt01.c
index 14e26dd81..f6999bd52 100644
--- a/testcases/kernel/syscalls/mallopt/mallopt01.c
+++ b/testcases/kernel/syscalls/mallopt/mallopt01.c
@@ -1,155 +1,97 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- *
- * Copyright (c) International Business Machines Corp., 2002
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Copyright (c) Linux Test Project, 2003-2021
+ * Copyright (c) International Business Machines Corp., 2002
+ * 01/02/2003 Port to LTP <avenkat@us.ibm.com>
+ * 06/30/2001 Port to Linux <nsharoff@us.ibm.com>
*/
-/* 01/02/2003 Port to LTP avenkat@us.ibm.com*/
-/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */
-
-/*
- * NAME
- * mallopt
- *
- * CALLS
- * malloc(3x), mallopt(3x), mallinfo(3x).
- *
- * ALGORITHM
- * Set options, malloc memory, and check resource ussage.
+/*\
+ * [DESCRIPTION]
*
- * RESTRICTIONS
- */
+ * Basic mallinfo() and mallopt() testing (M_MXFAST, M_NLBLKS).
+\*/
-#ifdef CONFIG_COLDFIRE
-#define __MALLOC_STANDARD__
-#endif
-#include <errno.h>
-/*
- * NOTE: struct mallinfo is only exported via malloc.h (not stdlib.h), even
- * though it's an obsolete header for malloc(3).
- *
- * Inconsistencies rock.
- */
#include <malloc.h>
-#include <stdio.h>
-
-#include "test.h"
-#include "safe_macros.h"
-
-#define FAILED 0
-#define PASSED 1
-#define MAX_FAST_SIZE (80 * sizeof(size_t) / 4)
-int local_flag = PASSED;
+#include "tst_test.h"
+#include "tst_safe_macros.h"
-char *TCID = "mallopt01";
-int block_number;
-FILE *temp;
-int TST_TOTAL = 6;
-extern int tst_COUNT; /* Test Case counter for tst_routines */
+#ifdef HAVE_MALLOPT
-void printinfo();
+#define MAX_FAST_SIZE (80 * sizeof(size_t) / 4)
-#if defined(__GLIBC__)
struct mallinfo info;
-int main(int argc, char *argv[])
+void print_mallinfo(void)
{
- char *buf;
-
- tst_parse_opts(argc, argv, NULL, NULL);
-
- tst_tmpdir();
+ tst_res(TINFO, "mallinfo structure:");
+ tst_res(TINFO, "mallinfo.arena = %d", info.arena);
+ tst_res(TINFO, "mallinfo.ordblks = %d", info.ordblks);
+ tst_res(TINFO, "mallinfo.smblks = %d", info.smblks);
+ tst_res(TINFO, "mallinfo.hblkhd = %d", info.hblkhd);
+ tst_res(TINFO, "mallinfo.hblks = %d", info.hblks);
+ tst_res(TINFO, "mallinfo.usmblks = %d", info.usmblks);
+ tst_res(TINFO, "mallinfo.fsmblks = %d", info.fsmblks);
+ tst_res(TINFO, "mallinfo.uordblks = %d", info.uordblks);
+ tst_res(TINFO, "mallinfo.fordblks = %d", info.fordblks);
+ tst_res(TINFO, "mallinfo.keepcost = %d", info.keepcost);
+}
- buf = SAFE_MALLOC(NULL, 20480);
+void test_mallopt(void)
+{
+ char *buf;
- /*
- * Check space usage.
- */
+ buf = SAFE_MALLOC(20480);
info = mallinfo();
if (info.uordblks < 20480) {
- printinfo();
- tst_resm(TFAIL, "mallinfo failed: uordblks < 20K");
+ print_mallinfo();
+ tst_res(TFAIL, "mallinfo() failed: uordblks < 20K");
}
if (info.smblks != 0) {
- printinfo();
- tst_resm(TFAIL, "mallinfo failed: smblks != 0");
+ print_mallinfo();
+ tst_res(TFAIL, "mallinfo() failed: smblks != 0");
}
if (info.uordblks >= 20480 && info.smblks == 0)
- tst_resm(TPASS, "mallinfo() succeeded");
- free(buf);
+ tst_res(TPASS, "mallinfo() succeeded");
- /*
- * Test mallopt's M_MXFAST and M_NLBLKS cmds.
- */
+ free(buf);
if (mallopt(M_MXFAST, MAX_FAST_SIZE) == 0)
- tst_resm(TFAIL, "mallopt(M_MXFAST, %d) failed", (int)MAX_FAST_SIZE);
+ tst_res(TFAIL, "mallopt(M_MXFAST, %d) failed", (int)MAX_FAST_SIZE);
else
- tst_resm(TPASS, "mallopt(M_MXFAST, %d) succeeded", (int)MAX_FAST_SIZE);
+ tst_res(TPASS, "mallopt(M_MXFAST, %d) succeeded", (int)MAX_FAST_SIZE);
if (mallopt(M_NLBLKS, 50) == 0)
- tst_resm(TFAIL, "mallopt(M_NLBLKS, 50) failed");
+ tst_res(TFAIL, "mallopt(M_NLBLKS, 50) failed");
else
- tst_resm(TPASS, "mallopt(M_NLBLKS, 50) succeeded");
+ tst_res(TPASS, "mallopt(M_NLBLKS, 50) succeeded");
if ((buf = malloc(1024)) == NULL) {
- tst_resm(TFAIL, "malloc(1024) failed");
+ tst_res(TFAIL, "malloc(1024) failed");
} else {
- tst_resm(TPASS, "malloc(1024) succeeded");
+ tst_res(TPASS, "malloc(1024) succeeded");
free(buf);
}
if (mallopt(M_MXFAST, 0) == 0)
- tst_resm(TFAIL, "mallopt(M_MXFAST, 0) failed");
+ tst_res(TFAIL, "mallopt(M_MXFAST, 0) failed");
else
- tst_resm(TPASS, "mallopt(M_MXFAST, 0) succeeded");
+ tst_res(TPASS, "mallopt(M_MXFAST, 0) succeeded");
if ((buf = malloc(1024)) == NULL) {
- tst_resm(TFAIL, "malloc(1024) failed");
+ tst_res(TFAIL, "malloc(1024) failed");
} else {
- tst_resm(TPASS, "malloc(1024) succeeded");
+ tst_res(TPASS, "malloc(1024) succeeded");
free(buf);
}
-
- unlink("core");
- tst_rmdir();
- tst_exit();
}
-void printinfo(void)
-{
-
- fprintf(stderr, "mallinfo structure:\n");
- fprintf(stderr, "mallinfo.arena = %d\n", info.arena);
- fprintf(stderr, "mallinfo.ordblks = %d\n", info.ordblks);
- fprintf(stderr, "mallinfo.smblks = %d\n", info.smblks);
- fprintf(stderr, "mallinfo.hblkhd = %d\n", info.hblkhd);
- fprintf(stderr, "mallinfo.hblks = %d\n", info.hblks);
- fprintf(stderr, "mallinfo.usmblks = %d\n", info.usmblks);
- fprintf(stderr, "mallinfo.fsmblks = %d\n", info.fsmblks);
- fprintf(stderr, "mallinfo.uordblks = %d\n", info.uordblks);
- fprintf(stderr, "mallinfo.fordblks = %d\n", info.fordblks);
- fprintf(stderr, "mallinfo.keepcost = %d\n", info.keepcost);
-}
+static struct tst_test test = {
+ .test_all = test_mallopt,
+};
#else
-int main(void)
-{
- tst_brkm(TCONF, NULL, "mallopt defined only for glibc");
-}
+TST_TEST_TCONF("system doesn't implement non-POSIX mallopt()");
#endif
--
2.30.0
More information about the ltp
mailing list