1058561cbSjbeck /*
2*4aac33d3Sjbeck * Copyright (c) 2005-2007 Sendmail, Inc. and its suppliers.
3058561cbSjbeck * All rights reserved.
4058561cbSjbeck *
5058561cbSjbeck * By using this file, you agree to the terms and conditions set
6058561cbSjbeck * forth in the LICENSE file which can be found at the top level of
7058561cbSjbeck * the sendmail distribution.
8058561cbSjbeck */
9058561cbSjbeck
10058561cbSjbeck #include <sm/gen.h>
11*4aac33d3Sjbeck SM_IDSTR(id, "@(#)$Id: t-memstat.c,v 1.9 2007/03/14 21:41:09 ca Exp $")
12058561cbSjbeck
13058561cbSjbeck #include <sm/misc.h>
14058561cbSjbeck
15058561cbSjbeck /*
16058561cbSjbeck ** Simple test program for memstat
17058561cbSjbeck */
18058561cbSjbeck
19058561cbSjbeck #include <stdlib.h>
20058561cbSjbeck #include <unistd.h>
21058561cbSjbeck #include <stdio.h>
22058561cbSjbeck #include <strings.h>
23058561cbSjbeck #include <string.h>
24058561cbSjbeck
25058561cbSjbeck extern char *optarg;
26058561cbSjbeck extern int optind;
27058561cbSjbeck
28*4aac33d3Sjbeck void
usage(prg)29*4aac33d3Sjbeck usage(prg)
30*4aac33d3Sjbeck char *prg;
31*4aac33d3Sjbeck {
32*4aac33d3Sjbeck fprintf(stderr, "usage: %s [options]\n", prg);
33*4aac33d3Sjbeck fprintf(stderr, "options:\n");
34*4aac33d3Sjbeck fprintf(stderr, "-l n loop n times\n");
35*4aac33d3Sjbeck fprintf(stderr, "-m n allocate n bytes per iteration\n");
36*4aac33d3Sjbeck fprintf(stderr, "-r name use name as resource to query\n");
37*4aac33d3Sjbeck fprintf(stderr, "-s n sleep n seconds per iteration\n");
38*4aac33d3Sjbeck }
39*4aac33d3Sjbeck
40058561cbSjbeck int
main(argc,argv)41058561cbSjbeck main(argc, argv)
42058561cbSjbeck int argc;
43058561cbSjbeck char **argv;
44058561cbSjbeck {
45058561cbSjbeck int r, r2, i, l, slp, sz;
46058561cbSjbeck long v;
47058561cbSjbeck char *resource;
48058561cbSjbeck
49058561cbSjbeck l = 1;
50058561cbSjbeck sz = slp = 0;
51058561cbSjbeck resource = NULL;
52058561cbSjbeck while ((r = getopt(argc, argv, "l:m:r:s:")) != -1)
53058561cbSjbeck {
54058561cbSjbeck switch ((char) r)
55058561cbSjbeck {
56058561cbSjbeck case 'l':
57058561cbSjbeck l = strtol(optarg, NULL, 0);
58058561cbSjbeck break;
59058561cbSjbeck
60058561cbSjbeck case 'm':
61058561cbSjbeck sz = strtol(optarg, NULL, 0);
62058561cbSjbeck break;
63058561cbSjbeck
64058561cbSjbeck case 'r':
65058561cbSjbeck resource = strdup(optarg);
66058561cbSjbeck break;
67058561cbSjbeck
68058561cbSjbeck case 's':
69058561cbSjbeck slp = strtol(optarg, NULL, 0);
70058561cbSjbeck break;
71058561cbSjbeck
72058561cbSjbeck default:
73*4aac33d3Sjbeck usage(argv[0]);
74*4aac33d3Sjbeck exit(1);
75058561cbSjbeck }
76058561cbSjbeck }
77058561cbSjbeck
78058561cbSjbeck r = sm_memstat_open();
79058561cbSjbeck r2 = -1;
80058561cbSjbeck for (i = 0; i < l; i++)
81058561cbSjbeck {
82058561cbSjbeck char *mem;
83058561cbSjbeck
84058561cbSjbeck r2 = sm_memstat_get(resource, &v);
85058561cbSjbeck if (slp > 0 && i + 1 < l && 0 == r)
86058561cbSjbeck {
87058561cbSjbeck printf("open=%d, memstat=%d, %s=%ld\n", r, r2,
88058561cbSjbeck resource != NULL ? resource : "default-value",
89058561cbSjbeck v);
90058561cbSjbeck sleep(slp);
91058561cbSjbeck if (sz > 0)
92058561cbSjbeck {
93058561cbSjbeck /*
94058561cbSjbeck ** Just allocate some memory to test the
95058561cbSjbeck ** values that are returned.
96058561cbSjbeck ** Note: this is a memory leak, but that
97058561cbSjbeck ** doesn't matter here.
98058561cbSjbeck */
99058561cbSjbeck
100058561cbSjbeck mem = malloc(sz);
101058561cbSjbeck if (NULL == mem)
102058561cbSjbeck printf("malloc(%d) failed\n", sz);
103058561cbSjbeck }
104058561cbSjbeck }
105058561cbSjbeck }
106058561cbSjbeck printf("open=%d, memstat=%d, %s=%ld\n", r, r2,
107058561cbSjbeck resource != NULL ? resource : "default-value", v);
108058561cbSjbeck r = sm_memstat_close();
109058561cbSjbeck return r;
110058561cbSjbeck }
111