14e4196cbSGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2005-2007 Proofpoint, Inc. and its suppliers. 34e4196cbSGregory Neil Shapiro * All rights reserved. 44e4196cbSGregory Neil Shapiro * 54e4196cbSGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 64e4196cbSGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 74e4196cbSGregory Neil Shapiro * the sendmail distribution. 84e4196cbSGregory Neil Shapiro */ 94e4196cbSGregory Neil Shapiro 104e4196cbSGregory Neil Shapiro #include <sm/gen.h> 11*4313cc83SGregory Neil Shapiro SM_IDSTR(id, "@(#)$Id: t-memstat.c,v 1.11 2013-11-22 20:51:43 ca Exp $") 12d0cef73dSGregory Neil Shapiro 13d0cef73dSGregory Neil Shapiro #include <sm/misc.h> 144e4196cbSGregory Neil Shapiro 154e4196cbSGregory Neil Shapiro /* 164e4196cbSGregory Neil Shapiro ** Simple test program for memstat 174e4196cbSGregory Neil Shapiro */ 184e4196cbSGregory Neil Shapiro 194e4196cbSGregory Neil Shapiro #include <stdlib.h> 204e4196cbSGregory Neil Shapiro #include <unistd.h> 214e4196cbSGregory Neil Shapiro #include <stdio.h> 224e4196cbSGregory Neil Shapiro #include <strings.h> 23af9557fdSGregory Neil Shapiro #include <string.h> 24af9557fdSGregory Neil Shapiro 25af9557fdSGregory Neil Shapiro extern char *optarg; 26af9557fdSGregory Neil Shapiro extern int optind; 274e4196cbSGregory Neil Shapiro 28d0cef73dSGregory Neil Shapiro void 29d0cef73dSGregory Neil Shapiro usage(prg) 30d0cef73dSGregory Neil Shapiro char *prg; 31d0cef73dSGregory Neil Shapiro { 32d0cef73dSGregory Neil Shapiro fprintf(stderr, "usage: %s [options]\n", prg); 33d0cef73dSGregory Neil Shapiro fprintf(stderr, "options:\n"); 34d0cef73dSGregory Neil Shapiro fprintf(stderr, "-l n loop n times\n"); 35d0cef73dSGregory Neil Shapiro fprintf(stderr, "-m n allocate n bytes per iteration\n"); 36d0cef73dSGregory Neil Shapiro fprintf(stderr, "-r name use name as resource to query\n"); 37d0cef73dSGregory Neil Shapiro fprintf(stderr, "-s n sleep n seconds per iteration\n"); 38d0cef73dSGregory Neil Shapiro } 39d0cef73dSGregory Neil Shapiro 404e4196cbSGregory Neil Shapiro int 414e4196cbSGregory Neil Shapiro main(argc, argv) 424e4196cbSGregory Neil Shapiro int argc; 434e4196cbSGregory Neil Shapiro char **argv; 444e4196cbSGregory Neil Shapiro { 454e4196cbSGregory Neil Shapiro int r, r2, i, l, slp, sz; 464e4196cbSGregory Neil Shapiro long v; 474e4196cbSGregory Neil Shapiro char *resource; 484e4196cbSGregory Neil Shapiro 494e4196cbSGregory Neil Shapiro l = 1; 504e4196cbSGregory Neil Shapiro sz = slp = 0; 514e4196cbSGregory Neil Shapiro resource = NULL; 524e4196cbSGregory Neil Shapiro while ((r = getopt(argc, argv, "l:m:r:s:")) != -1) 534e4196cbSGregory Neil Shapiro { 544e4196cbSGregory Neil Shapiro switch ((char) r) 554e4196cbSGregory Neil Shapiro { 564e4196cbSGregory Neil Shapiro case 'l': 574e4196cbSGregory Neil Shapiro l = strtol(optarg, NULL, 0); 584e4196cbSGregory Neil Shapiro break; 594e4196cbSGregory Neil Shapiro 604e4196cbSGregory Neil Shapiro case 'm': 614e4196cbSGregory Neil Shapiro sz = strtol(optarg, NULL, 0); 624e4196cbSGregory Neil Shapiro break; 634e4196cbSGregory Neil Shapiro 644e4196cbSGregory Neil Shapiro case 'r': 654e4196cbSGregory Neil Shapiro resource = strdup(optarg); 665dd76dd0SGregory Neil Shapiro if (resource == NULL) 675dd76dd0SGregory Neil Shapiro { 685dd76dd0SGregory Neil Shapiro fprintf(stderr, "strdup(%s) failed\n", 695dd76dd0SGregory Neil Shapiro optarg); 705dd76dd0SGregory Neil Shapiro exit(1); 715dd76dd0SGregory Neil Shapiro } 724e4196cbSGregory Neil Shapiro break; 734e4196cbSGregory Neil Shapiro 744e4196cbSGregory Neil Shapiro case 's': 754e4196cbSGregory Neil Shapiro slp = strtol(optarg, NULL, 0); 764e4196cbSGregory Neil Shapiro break; 774e4196cbSGregory Neil Shapiro 784e4196cbSGregory Neil Shapiro default: 79d0cef73dSGregory Neil Shapiro usage(argv[0]); 80d0cef73dSGregory Neil Shapiro exit(1); 814e4196cbSGregory Neil Shapiro } 824e4196cbSGregory Neil Shapiro } 834e4196cbSGregory Neil Shapiro 844e4196cbSGregory Neil Shapiro r = sm_memstat_open(); 854e4196cbSGregory Neil Shapiro r2 = -1; 864e4196cbSGregory Neil Shapiro for (i = 0; i < l; i++) 874e4196cbSGregory Neil Shapiro { 884e4196cbSGregory Neil Shapiro char *mem; 894e4196cbSGregory Neil Shapiro 904e4196cbSGregory Neil Shapiro r2 = sm_memstat_get(resource, &v); 914e4196cbSGregory Neil Shapiro if (slp > 0 && i + 1 < l && 0 == r) 924e4196cbSGregory Neil Shapiro { 934e4196cbSGregory Neil Shapiro printf("open=%d, memstat=%d, %s=%ld\n", r, r2, 944e4196cbSGregory Neil Shapiro resource != NULL ? resource : "default-value", 954e4196cbSGregory Neil Shapiro v); 964e4196cbSGregory Neil Shapiro sleep(slp); 974e4196cbSGregory Neil Shapiro if (sz > 0) 984e4196cbSGregory Neil Shapiro { 994e4196cbSGregory Neil Shapiro /* 1004e4196cbSGregory Neil Shapiro ** Just allocate some memory to test the 1014e4196cbSGregory Neil Shapiro ** values that are returned. 1024e4196cbSGregory Neil Shapiro ** Note: this is a memory leak, but that 1034e4196cbSGregory Neil Shapiro ** doesn't matter here. 1044e4196cbSGregory Neil Shapiro */ 1054e4196cbSGregory Neil Shapiro 1064e4196cbSGregory Neil Shapiro mem = malloc(sz); 1074e4196cbSGregory Neil Shapiro if (NULL == mem) 1084e4196cbSGregory Neil Shapiro printf("malloc(%d) failed\n", sz); 1094e4196cbSGregory Neil Shapiro } 1104e4196cbSGregory Neil Shapiro } 1114e4196cbSGregory Neil Shapiro } 1124e4196cbSGregory Neil Shapiro printf("open=%d, memstat=%d, %s=%ld\n", r, r2, 1134e4196cbSGregory Neil Shapiro resource != NULL ? resource : "default-value", v); 1144e4196cbSGregory Neil Shapiro r = sm_memstat_close(); 1154e4196cbSGregory Neil Shapiro return r; 1164e4196cbSGregory Neil Shapiro } 117