]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/sendmail/libsm/t-memstat.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / sendmail / libsm / t-memstat.c
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
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
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 }