058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
4aac33d31b41cc7e3ac6fb66747ff2cae63d08cfjbeck * Copyright (c) 2005-2007 Sendmail, Inc. and its suppliers.
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck * All rights reserved.
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck *
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck * By using this file, you agree to the terms and conditions set
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck * forth in the LICENSE file which can be found at the top level of
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck * the sendmail distribution.
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck */
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#pragma ident "%Z%%M% %I% %E% SMI"
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <sm/gen.h>
4aac33d31b41cc7e3ac6fb66747ff2cae63d08cfjbeckSM_RCSID("@(#)$Id: memstat.c,v 1.6 2007/03/20 23:26:12 ca Exp $")
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <errno.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <sm/misc.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#if USESWAPCTL
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <sys/stat.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <sys/swap.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckstatic long sc_page_size;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_OPEN -- open memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_open()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck sc_page_size = sysconf(_SC_PAGE_SIZE);
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (sc_page_size == -1)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_CLOSE -- close memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_close()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_GET -- get memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** resource -- resource to look up
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** pvalue -- (pointer to) memory statistics value (output)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** 0: success
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** !=0: error
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_get(resource, pvalue)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck char *resource;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck long *pvalue;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck int r;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck struct anoninfo ai;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck r = swapctl(SC_AINFO, &ai);
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (r == -1)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck r = ai.ani_max - ai.ani_resv;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck r *= sc_page_size >> 10;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck *pvalue = r;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#elif USEKSTAT
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <kstat.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <sys/sysinfo.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckstatic kstat_ctl_t *kc;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckstatic kstat_t *kst;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_OPEN -- open memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_open()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck kstat_named_t *kn;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck kc = kstat_open();
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (kc == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck kst = kstat_lookup(kc, "unix", 0,
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck (name != NULL) ? name : "system_pages");
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (kst == 0)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -2;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_CLOSE -- close memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_close()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck int r;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (kc == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck r = kstat_close(kc);
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (r != 0)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_GET -- get memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** resource -- resource to look up
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** pvalue -- (pointer to) memory statistics value (output)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** 0: success
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** !=0: error
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_get(resource, pvalue)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck char *resource;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck long *pvalue;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck int r;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck kstat_named_t *kn;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (kc == NULL || kst == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (kstat_read(kc, kst, NULL) == -1)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -2;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck kn = kstat_data_lookup(kst,
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck (resource != NULL) ? resource: "freemem");
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (kn == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (errno != 0) ? errno : -3;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck *pvalue = kn->value.ul;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#elif USEPROCMEMINFO
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/proc/meminfo?
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck total: used: free: shared: buffers: cached:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckMem: 261468160 252149760 9318400 0 3854336 109813760
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckSwap: 1052794880 62185472 990609408
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckMemTotal: 255340 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckMemFree: 9100 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckMemShared: 0 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckBuffers: 3764 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckCached: 107240 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckActive: 104340 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckInact_dirty: 4220 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckInact_clean: 2444 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckInact_target: 4092 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckHighTotal: 0 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckHighFree: 0 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckLowTotal: 255340 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckLowFree: 9100 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckSwapTotal: 1028120 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckSwapFree: 967392 kB
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <stdio.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#include <string.h>
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckstatic FILE *fp;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_OPEN -- open memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_open()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck fp = fopen("/proc/meminfo", "r");
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (fp != NULL) ? 0 : errno;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_CLOSE -- close memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_close()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (fp != NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck {
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck fclose(fp);
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck fp = NULL;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck }
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_GET -- get memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** resource -- resource to look up
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** pvalue -- (pointer to) memory statistics value (output)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** 0: success
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** !=0: error
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_get(resource, pvalue)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck char *resource;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck long *pvalue;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck int r;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck size_t l;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck char buf[80];
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (resource == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return EINVAL;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (pvalue == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return EINVAL;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (fp == NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return -1; /* try to reopen? */
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck rewind(fp);
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck l = strlen(resource);
4aac33d31b41cc7e3ac6fb66747ff2cae63d08cfjbeck if (l >= sizeof(buf))
4aac33d31b41cc7e3ac6fb66747ff2cae63d08cfjbeck return EINVAL;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck while (fgets(buf, sizeof(buf), fp) != NULL)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck {
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck if (strncmp(buf, resource, l) == 0 && buf[l] == ':')
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck {
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck r = sscanf(buf + l + 1, "%ld", pvalue);
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return (r > 0) ? 0 : -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck }
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck }
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#else /* USEPROCMEMINFO */
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_OPEN -- open memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_open()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_CLOSE -- close memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** none
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** errno as error code, 0: ok
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_close()
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return 0;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck/*
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** SM_MEMSTAT_GET -- get memory statistics
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Parameters:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** resource -- resource to look up
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** pvalue -- (pointer to) memory statistics value (output)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck**
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** Results:
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** 0: success
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck** !=0: error
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck*/
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeckint
058561cbaa119a6f2659bc27ef343e1b47266bb2jbecksm_memstat_get(resource, pvalue)
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck char *resource;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck long *pvalue;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck{
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck return -1;
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck}
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck
058561cbaa119a6f2659bc27ef343e1b47266bb2jbeck#endif /* USEKSTAT */