1 /*
2 * Copyright (c) 2005-2007 Proofpoint, Inc. and its suppliers.
3 * All rights reserved.
4 *
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
8 */
9
10 #include <sm/gen.h>
11 SM_IDSTR(id, "@(#)$Id: t-memstat.c,v 1.11 2013-11-22 20:51:43 ca Exp $")
12
13 #include <sm/misc.h>
14
15 /*
16 ** Simple test program for memstat
17 */
18
19 #include <stdlib.h>
20 #include <unistd.h>
21 #include <stdio.h>
22 #include <strings.h>
23 #include <string.h>
24
25 extern char *optarg;
26 extern int optind;
27
28 void
usage(prg)29 usage(prg)
30 char *prg;
31 {
32 fprintf(stderr, "usage: %s [options]\n", prg);
33 fprintf(stderr, "options:\n");
34 fprintf(stderr, "-l n loop n times\n");
35 fprintf(stderr, "-m n allocate n bytes per iteration\n");
36 fprintf(stderr, "-r name use name as resource to query\n");
37 fprintf(stderr, "-s n sleep n seconds per iteration\n");
38 }
39
40 int
main(argc,argv)41 main(argc, argv)
42 int argc;
43 char **argv;
44 {
45 int r, r2, i, l, slp, sz;
46 long v;
47 char *resource;
48
49 l = 1;
50 sz = slp = 0;
51 resource = NULL;
52 while ((r = getopt(argc, argv, "l:m:r:s:")) != -1)
53 {
54 switch ((char) r)
55 {
56 case 'l':
57 l = strtol(optarg, NULL, 0);
58 break;
59
60 case 'm':
61 sz = strtol(optarg, NULL, 0);
62 break;
63
64 case 'r':
65 resource = strdup(optarg);
66 if (resource == NULL)
67 {
68 fprintf(stderr, "strdup(%s) failed\n",
69 optarg);
70 exit(1);
71 }
72 break;
73
74 case 's':
75 slp = strtol(optarg, NULL, 0);
76 break;
77
78 default:
79 usage(argv[0]);
80 exit(1);
81 }
82 }
83
84 r = sm_memstat_open();
85 r2 = -1;
86 for (i = 0; i < l; i++)
87 {
88 char *mem;
89
90 r2 = sm_memstat_get(resource, &v);
91 if (slp > 0 && i + 1 < l && 0 == r)
92 {
93 printf("open=%d, memstat=%d, %s=%ld\n", r, r2,
94 resource != NULL ? resource : "default-value",
95 v);
96 sleep(slp);
97 if (sz > 0)
98 {
99 /*
100 ** Just allocate some memory to test the
101 ** values that are returned.
102 ** Note: this is a memory leak, but that
103 ** doesn't matter here.
104 */
105
106 mem = malloc(sz);
107 if (NULL == mem)
108 printf("malloc(%d) failed\n", sz);
109 }
110 }
111 }
112 printf("open=%d, memstat=%d, %s=%ld\n", r, r2,
113 resource != NULL ? resource : "default-value", v);
114 r = sm_memstat_close();
115 return r;
116 }
117