robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 1 | /* |
| 2 | * |
| 3 | * Copyright (c) International Business Machines Corp., 2002 |
| 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify |
| 6 | * it under the terms of the GNU General Public License as published by |
| 7 | * the Free Software Foundation; either version 2 of the License, or |
| 8 | * (at your option) any later version. |
| 9 | * |
| 10 | * This program is distributed in the hope that it will be useful, |
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See |
| 13 | * the GNU General Public License for more details. |
| 14 | * |
| 15 | * You should have received a copy of the GNU General Public License |
| 16 | * along with this program; if not, write to the Free Software |
Wanlong Gao | 4548c6c | 2012-10-19 18:03:36 +0800 | [diff] [blame] | 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 18 | */ |
| 19 | |
| 20 | /* 01/02/2003 Port to LTP avenkat@us.ibm.com*/ |
| 21 | /* 06/30/2001 Port to Linux nsharoff@us.ibm.com */ |
| 22 | |
| 23 | /* |
| 24 | * NAME |
| 25 | * mallopt |
| 26 | * |
| 27 | * CALLS |
| 28 | * malloc(3x), mallopt(3x), mallinfo(3x). |
| 29 | * |
| 30 | * ALGORITHM |
| 31 | * Set options, malloc memory, and check resource ussage. |
| 32 | * |
| 33 | * RESTRICTIONS |
| 34 | */ |
| 35 | |
robbiew | 6eaecb2 | 2005-12-22 20:18:22 +0000 | [diff] [blame] | 36 | #ifdef CONFIG_COLDFIRE |
| 37 | #define __MALLOC_STANDARD__ |
| 38 | #endif |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 39 | #include <errno.h> |
Chris Dearman | 37550cf | 2012-10-17 19:54:01 -0700 | [diff] [blame] | 40 | /* |
Garrett Cooper | 2789bc7 | 2011-01-14 09:45:16 -0800 | [diff] [blame] | 41 | * NOTE: struct mallinfo is only exported via malloc.h (not stdlib.h), even |
Garrett Cooper | c2ed6ed | 2011-01-14 09:49:08 -0800 | [diff] [blame] | 42 | * though it's an obsolete header for malloc(3). |
Garrett Cooper | 2789bc7 | 2011-01-14 09:45:16 -0800 | [diff] [blame] | 43 | * |
| 44 | * Inconsistencies rock. |
| 45 | */ |
| 46 | #include <malloc.h> |
| 47 | #include <stdio.h> |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 48 | |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 49 | #include "test.h" |
Garrett Cooper | c2ed6ed | 2011-01-14 09:49:08 -0800 | [diff] [blame] | 50 | #include "safe_macros.h" |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 51 | |
| 52 | #define FAILED 0 |
| 53 | #define PASSED 1 |
| 54 | |
| 55 | int local_flag = PASSED; |
| 56 | |
plars | 48049f3 | 2003-07-05 03:12:42 +0000 | [diff] [blame] | 57 | char *TCID = "mallopt01"; |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 58 | int block_number; |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 59 | FILE *temp; |
| 60 | int TST_TOTAL = 1; |
Caspar Zhang | d59a659 | 2013-03-07 14:59:12 +0800 | [diff] [blame] | 61 | extern int tst_COUNT; /* Test Case counter for tst_routines */ |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 62 | |
| 63 | void printinfo(); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 64 | |
robbiew | d34d581 | 2005-07-11 22:28:09 +0000 | [diff] [blame] | 65 | #if !defined(UCLINUX) |
Garrett Cooper | a98d813 | 2010-08-18 01:40:20 -0700 | [diff] [blame] | 66 | struct mallinfo info; |
robbiew | d34d581 | 2005-07-11 22:28:09 +0000 | [diff] [blame] | 67 | |
subrata_modak | 56207ce | 2009-03-23 13:35:39 +0000 | [diff] [blame] | 68 | int main(int argc, char *argv[]) |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 69 | { |
subrata_modak | 56207ce | 2009-03-23 13:35:39 +0000 | [diff] [blame] | 70 | char *buf; |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 71 | |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 72 | tst_tmpdir(); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 73 | |
Garrett Cooper | c2ed6ed | 2011-01-14 09:49:08 -0800 | [diff] [blame] | 74 | buf = SAFE_MALLOC(NULL, 20480); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 75 | |
| 76 | /* |
| 77 | * Check space usage. |
| 78 | */ |
| 79 | |
| 80 | info = mallinfo(); |
| 81 | if (info.uordblks < 20480) { |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 82 | printinfo(); |
Garrett Cooper | 2789bc7 | 2011-01-14 09:45:16 -0800 | [diff] [blame] | 83 | tst_resm(TFAIL, "mallinfo failed: uordblks < 20K"); |
| 84 | } |
| 85 | if (info.smblks != 0) { |
| 86 | printinfo(); |
| 87 | tst_resm(TFAIL, "mallinfo failed: smblks != 0"); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 88 | } |
subrata_modak | 4bb656a | 2009-02-26 12:02:09 +0000 | [diff] [blame] | 89 | free(buf); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 90 | |
| 91 | /* |
| 92 | * Test mallopt's M_MXFAST and M_NLBLKS cmds. |
| 93 | */ |
| 94 | mallopt(M_MXFAST, 2048); |
| 95 | mallopt(M_NLBLKS, 50); |
Garrett Cooper | c2ed6ed | 2011-01-14 09:49:08 -0800 | [diff] [blame] | 96 | buf = SAFE_MALLOC(NULL, 1024); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 97 | |
| 98 | free(buf); |
| 99 | |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 100 | unlink("core"); |
| 101 | tst_rmdir(); |
Garrett Cooper | 2c28215 | 2010-12-16 00:55:50 -0800 | [diff] [blame] | 102 | tst_exit(); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 103 | } |
subrata_modak | 56207ce | 2009-03-23 13:35:39 +0000 | [diff] [blame] | 104 | |
Mike Frysinger | c57fba5 | 2014-04-09 18:56:30 -0400 | [diff] [blame] | 105 | void printinfo(void) |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 106 | { |
| 107 | |
Garrett Cooper | 2789bc7 | 2011-01-14 09:45:16 -0800 | [diff] [blame] | 108 | fprintf(stderr, "mallinfo structure:\n"); |
| 109 | fprintf(stderr, "mallinfo.arena = %d\n", info.arena); |
| 110 | fprintf(stderr, "mallinfo.ordblks = %d\n", info.ordblks); |
| 111 | fprintf(stderr, "mallinfo.smblks = %d\n", info.smblks); |
| 112 | fprintf(stderr, "mallinfo.hblkhd = %d\n", info.hblkhd); |
| 113 | fprintf(stderr, "mallinfo.hblks = %d\n", info.hblks); |
| 114 | fprintf(stderr, "mallinfo.usmblks = %d\n", info.usmblks); |
| 115 | fprintf(stderr, "mallinfo.fsmblks = %d\n", info.fsmblks); |
| 116 | fprintf(stderr, "mallinfo.uordblks = %d\n", info.uordblks); |
| 117 | fprintf(stderr, "mallinfo.fordblks = %d\n", info.fordblks); |
| 118 | fprintf(stderr, "mallinfo.keepcost = %d\n", info.keepcost); |
robbiew | 6d387ef | 2003-01-03 20:53:14 +0000 | [diff] [blame] | 119 | } |
| 120 | |
robbiew | d34d581 | 2005-07-11 22:28:09 +0000 | [diff] [blame] | 121 | #else |
Mike Frysinger | c57fba5 | 2014-04-09 18:56:30 -0400 | [diff] [blame] | 122 | int main(void) |
robbiew | d34d581 | 2005-07-11 22:28:09 +0000 | [diff] [blame] | 123 | { |
Garrett Cooper | 2789bc7 | 2011-01-14 09:45:16 -0800 | [diff] [blame] | 124 | tst_brkm(TCONF, NULL, "test is not available on uClinux"); |
robbiew | d34d581 | 2005-07-11 22:28:09 +0000 | [diff] [blame] | 125 | } |
Garrett Cooper | bacc849 | 2011-01-14 00:36:17 -0800 | [diff] [blame] | 126 | #endif /* if !defined(UCLINUX) */ |