Preparing for the incoming AppInterface changes

This commit is contained in:
Pierre Pronchery 2009-10-31 17:48:24 +00:00
parent 15ddd4916d
commit 6d18e80713
6 changed files with 181 additions and 83 deletions

View File

@ -1,6 +1,6 @@
PACKAGE = Probe
VERSION = 0.0.0
SUBDIRS = src
SUBDIRS = data src
RM = rm -f
LN = ln -f
TAR = tar -czvf
@ -21,6 +21,10 @@ dist:
$(RM) -r $(PACKAGE)-$(VERSION)
$(LN) -s . $(PACKAGE)-$(VERSION)
@$(TAR) $(PACKAGE)-$(VERSION).tar.gz \
$(PACKAGE)-$(VERSION)/data/Makefile \
$(PACKAGE)-$(VERSION)/data/Probe.interface \
$(PACKAGE)-$(VERSION)/data/Probe.h \
$(PACKAGE)-$(VERSION)/data/project.conf \
$(PACKAGE)-$(VERSION)/src/probe.c \
$(PACKAGE)-$(VERSION)/src/damon.c \
$(PACKAGE)-$(VERSION)/src/Makefile \

View File

@ -2,5 +2,5 @@ package=Probe
version=0.0.0
config=h
subdirs=src
subdirs=data,src
dist=Makefile,COPYING,config.h

View File

@ -3,10 +3,10 @@ PREFIX = /usr/local
DESTDIR =
BINDIR = $(PREFIX)/bin
CC = cc
CPPFLAGSF=
CPPFLAGSF= -I ../data
CPPFLAGS=
CFLAGSF = -W
CFLAGS = -Wall -g -O2 -ansi
CFLAGS = -Wall -g -O2 -pedantic
LDFLAGSF= -l System
LDFLAGS = -L $(PREFIX)/lib -Wl,-rpath,$(PREFIX)/lib
RM = rm -f
@ -31,7 +31,7 @@ DaMon_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
DaMon: $(DaMon_OBJS)
$(CC) -o DaMon $(DaMon_OBJS) $(DaMon_LDFLAGS)
probe.o: probe.c
probe.o: probe.c ../data/Probe.h
$(CC) $(Probe_CFLAGS) -c probe.c
damon.o: damon.c

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2008 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Network Probe */
/* Probe is not free software; you can redistribute it and/or modify it under
* the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 3.0
@ -13,6 +13,8 @@
* You should have received a copy of the Creative Commons Attribution-
* NonCommercial-ShareAlike 3.0 along with Probe; if not, browse to
* http://creativecommons.org/licenses/by-nc-sa/3.0/ */
/* FIXME: catch SIGPIPE, determine if we can avoid catching it if an AppServer
* exits */
@ -27,16 +29,22 @@
#include <errno.h>
#include "../config.h"
#define DAMON_DEFAULT_REFRESH 10
#ifndef PREFIX
# define PREFIX "/usr/local"
#endif
#ifndef ETCDIR
# define ETCDIR PREFIX "/etc"
#endif
#define DAMON_DEFAULT_REFRESH 10
/* types */
typedef struct _DaMon DaMon;
typedef struct _Host
{
DaMon * damon;
AppClient * appclient;
char * hostname;
char ** ifaces;
@ -46,25 +54,26 @@ typedef struct _Host
/* DaMon */
/* types */
typedef struct _DaMon
struct _DaMon
{
char const * prefix;
unsigned int refresh;
Host * hosts;
unsigned int hosts_cnt;
Event * event;
} DaMon;
};
/* functions */
/* public */
/* damon */
static int _damon_init(DaMon * damon);
static int _damon_init(DaMon * damon, char const * config);
static void _damon_destroy(DaMon * damon);
static int _damon(void)
static int _damon(char const * config)
{
DaMon damon;
if(_damon_init(&damon) != 0)
if(_damon_init(&damon, config) != 0)
return 1;
if(event_loop(damon.event) != 0)
error_print("DaMon");
@ -74,14 +83,14 @@ static int _damon(void)
/* _damon_init */
static int _init_config(DaMon * damon);
static int _init_config(DaMon * damon, char const * filename);
static int _damon_refresh(DaMon * damon);
static int _damon_init(DaMon * damon)
static int _damon_init(DaMon * damon, char const * filename)
{
struct timeval tv;
if(_init_config(damon) != 0)
if(_init_config(damon, filename) != 0)
return 1;
if((damon->event = event_new()) == NULL)
return error_print("DaMon");
@ -96,19 +105,21 @@ static int _damon_init(DaMon * damon)
/* _init_config */
static int _config_hosts(DaMon * damon, Config * config, char const * hosts);
static int _init_config(DaMon * damon)
static int _init_config(DaMon * damon, char const * filename)
{
Config * config;
char * filename = ETCDIR "/damon.cfg";
char const * p;
char * q;
int tmp;
if((config = config_new()) == NULL)
return 1;
damon->prefix = NULL;
damon->refresh = DAMON_DEFAULT_REFRESH;
damon->hosts = NULL;
damon->hosts_cnt = 0;
if(filename == NULL)
filename = ETCDIR "/damon.cfg";
if(config_load(config, filename) != 0)
{
fprintf(stderr, "DaMon: %s: Could not load configuration\n",
@ -116,6 +127,8 @@ static int _init_config(DaMon * damon)
config_delete(config);
return 1;
}
if((damon->prefix = config_get(config, "", "prefix")) == NULL)
damon->prefix = ".";
if((p = config_get(config, "", "refresh")) != NULL)
{
tmp = strtol(p, &q, 10);
@ -131,8 +144,8 @@ static int _init_config(DaMon * damon)
return 0;
}
static int _hosts_host(Config * config, Host * host, char const * h,
unsigned int pos);
static int _hosts_host(DaMon * damon, Config * config, Host * host,
char const * h, unsigned int pos);
static int _config_hosts(DaMon * damon, Config * config, char const * hosts)
{
char const * h = hosts;
@ -156,8 +169,8 @@ static int _config_hosts(DaMon * damon, Config * config, char const * hosts)
return error_set_print("DaMon", 1, "%s",
strerror(errno));
damon->hosts = p;
if(_hosts_host(config, &damon->hosts[damon->hosts_cnt++], h,
pos) != 0)
p = &damon->hosts[damon->hosts_cnt++];
if(_hosts_host(damon, config, p, h, pos) != 0)
return 1;
h += pos;
pos = 0;
@ -166,11 +179,12 @@ static int _config_hosts(DaMon * damon, Config * config, char const * hosts)
}
static char ** _host_comma(char const * line);
static int _hosts_host(Config * config, Host * host, char const * h,
unsigned int pos)
static int _hosts_host(DaMon * damon, Config * config, Host * host,
char const * h, unsigned int pos)
{
char const * p;
host->damon = damon;
host->appclient = NULL;
host->ifaces = NULL;
host->vols = NULL;
@ -267,7 +281,7 @@ static int _damon_refresh(DaMon * damon)
Host * hosts = damon->hosts;
#ifdef DEBUG
fprintf(stderr, "%s", "_damon_refresh()\n");
fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
for(i = 0; i < damon->hosts_cnt; i++)
{
@ -276,7 +290,7 @@ static int _damon_refresh(DaMon * damon)
== NULL)
continue;
if((p = realloc(rrd, string_length(hosts[i].hostname) + 12))
== NULL)
== NULL) /* XXX avoid this constant */
break;
rrd = p;
if(_refresh_uptime(ac, &hosts[i], rrd) != 0
@ -310,7 +324,7 @@ static AppClient * _refresh_connect(Host * host, Event * event)
return host->appclient;
}
static int _rrd_update(char * file, int args_cnt, ...);
static int _rrd_update(DaMon * damon, char const * filename, int args_cnt, ...);
static int _refresh_uptime(AppClient * ac, Host * host, char * rrd)
{
int32_t ret;
@ -318,7 +332,7 @@ static int _refresh_uptime(AppClient * ac, Host * host, char * rrd)
if(appclient_call(ac, &ret, "uptime") != 0)
return error_print("DaMon");
sprintf(rrd, "%s_%s", host->hostname, "uptime.rrd");
_rrd_update(rrd, 1, ret);
_rrd_update(host->damon, rrd, 1, ret);
return 0;
}
@ -331,7 +345,7 @@ static int _refresh_load(AppClient * ac, Host * host, char * rrd)
|| appclient_call(ac, &ret[2], "load_15") != 0)
return error_print("DaMon");
sprintf(rrd, "%s_%s", host->hostname, "load.rrd");
_rrd_update(rrd, 3, ret[0], ret[1], ret[2]);
_rrd_update(host->damon, rrd, 3, ret[0], ret[1], ret[2]);
return 0;
}
@ -342,7 +356,7 @@ static int _refresh_procs(AppClient * ac, Host * host, char * rrd)
if(appclient_call(ac, &res, "procs") != 0)
return 1;
sprintf(rrd, "%s_%s", host->hostname, "procs.rrd");
_rrd_update(rrd, 1, res);
_rrd_update(host->damon, rrd, 1, res);
return 0;
}
@ -356,7 +370,7 @@ static int _refresh_ram(AppClient * ac, Host * host, char * rrd)
|| appclient_call(ac, &res[3], "ram_buffer") != 0)
return 1;
sprintf(rrd, "%s_%s", host->hostname, "ram.rrd");
_rrd_update(rrd, 4, res[0], res[1], res[2], res[3]);
_rrd_update(host->damon, rrd, 4, res[0], res[1], res[2], res[3]);
return 0;
}
@ -368,7 +382,7 @@ static int _refresh_swap(AppClient * ac, Host * host, char * rrd)
|| appclient_call(ac, &res[1], "swap_free") != 0)
return 1;
sprintf(rrd, "%s_%s", host->hostname, "swap.rrd");
_rrd_update(rrd, 2, res[0], res[1]);
_rrd_update(host->damon, rrd, 2, res[0], res[1]);
return 0;
}
@ -379,11 +393,12 @@ static int _refresh_users(AppClient * ac, Host * host, char * rrd)
if(appclient_call(ac, &res, "users") != 0)
return 1;
sprintf(rrd, "%s_%s", host->hostname, "users.rrd");
_rrd_update(rrd, 1, res);
_rrd_update(host->damon, rrd, 1, res);
return 0;
}
static int _ifaces_if(AppClient * ac, Host * host, char * rrd, char * iface);
static int _ifaces_if(AppClient * ac, Host * host, char * rrd,
char const * iface);
static int _refresh_ifaces(AppClient * ac, Host * host, char * rrd)
{
char ** p = host->ifaces;
@ -396,7 +411,8 @@ static int _refresh_ifaces(AppClient * ac, Host * host, char * rrd)
return ret;
}
static int _ifaces_if(AppClient * ac, Host * host, char * rrd, char * iface)
static int _ifaces_if(AppClient * ac, Host * host, char * rrd,
char const * iface)
{
int32_t res[2];
@ -404,7 +420,7 @@ static int _ifaces_if(AppClient * ac, Host * host, char * rrd, char * iface)
|| appclient_call(ac, &res[1], "iftxbytes", iface) != 0)
return 1;
sprintf(rrd, "%s_%s%s", host->hostname, iface, ".rrd");
_rrd_update(rrd, 2, res[0], res[1]);
_rrd_update(host->damon, rrd, 2, res[0], res[1]);
return 0;
}
@ -426,17 +442,18 @@ static int _vols_vol(AppClient * ac, Host * host, char * rrd, char * vol)
int32_t res[2];
if(appclient_call(ac, &res[0], "voltotal", vol) != 0
|| appclient_call(ac, &res[1], "volfree", vol) != 0)
|| appclient_call(ac, &res[1], "volfree", vol)
!= 0)
return 1;
sprintf(rrd, "%s%s%s", host->hostname, vol, ".rrd"); /* FIXME */
_rrd_update(rrd, 2, res[0], res[1]);
_rrd_update(host->damon, rrd, 2, res[0], res[1]);
return 0;
}
static int _exec(char * argv[]);
static int _rrd_update(char * file, int args_cnt, ...)
static int _rrd_update(DaMon * damon, char const * filename, int args_cnt, ...)
{
char * argv[] = { "rrdtool", "update", file, NULL, NULL };
char * argv[] = { "rrdtool", "update", NULL, NULL, NULL };
struct timeval tv;
int pos;
int i;
@ -446,6 +463,7 @@ static int _rrd_update(char * file, int args_cnt, ...)
if(gettimeofday(&tv, NULL) != 0)
return error_set_print("DaMon", 1, "%s%s", "gettimeofday: ",
strerror(errno));
argv[2] = string_new_append(damon->prefix, "/", filename, NULL);
if((argv[3] = malloc((args_cnt + 1) * 12)) == NULL)
return error_set_print("DaMon", 1, "%s", strerror(errno));
pos = sprintf(argv[3], "%ld", tv.tv_sec);
@ -455,6 +473,7 @@ static int _rrd_update(char * file, int args_cnt, ...)
va_end(args);
ret = _exec(argv);
free(argv[3]);
string_delete(argv[2]);
return ret;
}
@ -474,9 +493,12 @@ static int _exec(char * argv[])
strerror(errno));
exit(2);
}
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s() ", __func__);
while(*argv != NULL)
fprintf(stderr, "%s ", *argv++);
fprintf(stderr, "\n");
#endif
while((ret = waitpid(pid, &status, 0)) != -1)
if(WIFEXITED(status))
break;
@ -487,8 +509,31 @@ static int _exec(char * argv[])
}
/* main */
int main(void)
/* usage */
static int _usage(void)
{
return _damon() == 0 ? 0 : 2;
fputs("Usage: DaMon [-f filename]\n"
" -f\tConfiguration file to load\n", stderr);
return 1;
}
/* main */
int main(int argc, char * argv[])
{
int o;
char const * config = NULL;
while((o = getopt(argc, argv, "f:")) != -1)
switch(o)
{
case 'f':
config = optarg;
break;
default:
return _usage();
}
if(optind != argc)
return _usage();
return (_damon(config) == 0) ? 0 : 2;
}

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2007 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Network Probe */
/* Probe is not free software; you can redistribute it and/or modify it under
* the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 3.0
@ -24,6 +24,7 @@
#include <stdio.h>
#include <string.h>
#include <System.h>
#include "Probe.h"
#if defined(__linux__)
@ -47,7 +48,8 @@
/* functions */
static int _probe_error(char const * message, int ret);
static int _probe_error(int ret);
static int _probe_perror(char const * message, int ret);
/* sysinfo */
@ -319,7 +321,7 @@ static int _ifinfo_linux_append(struct ifinfo ** dev, char * buf, int nb)
int j = 0;
if((p = realloc(*dev, sizeof(*p) * (nb + 1))) == NULL)
return _probe_error("realloc", 1);
return _probe_perror("realloc", 1);
*dev = p;
for(i = 0; i < sizeof(p->name) && buf[i] != '\0'; i++);
if(i != sizeof(p->name))
@ -371,9 +373,9 @@ static int _ifinfo_bsd(struct ifinfo ** dev)
struct ifaddrs * p;
if(fd < 0 && (fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
return _probe_error("socket", -1);
return _probe_perror("socket", -1);
if(getifaddrs(&ifa) != 0)
return _probe_error("getifaddrs", -1);
return _probe_perror("getifaddrs", -1);
for(p = ifa; p != NULL; p = p->ifa_next)
{
if(p->ifa_addr->sa_family != AF_LINK)
@ -395,9 +397,9 @@ static int _ifinfo_bsd_append(struct ifinfo ** dev, char * ifname, int fd,
strcpy(ifdr.ifdr_name, ifname);
if(ioctl(fd, SIOCGIFDATA, &ifdr) == -1)
return _probe_error("SIOCGIFDATA", 1);
return _probe_perror("SIOCGIFDATA", 1);
if((p = realloc(*dev, sizeof(*p) * (nb + 1))) == NULL)
return _probe_error("realloc", 1);
return _probe_perror("realloc", 1);
*dev = p;
strcpy(p[nb].name, ifname);
# if defined(DEBUG)
@ -448,7 +450,7 @@ static int _volinfo_linux(struct volinfo ** dev)
int len;
if((fp = fopen("/etc/mtab", "r")) == NULL)
return _probe_error("/etc/mtab", -1);
return _probe_perror("/etc/mtab", -1);
for(i = 0; fgets(buf, sizeof(buf), fp) != NULL; i++)
{
len = string_length(buf);
@ -514,14 +516,14 @@ static int _volinfo_bsd(struct volinfo ** dev)
int cnt2;
if((cnt = getvfsstat(NULL, 0, ST_WAIT)) == -1)
return _probe_error("getvfsstat", -1);
return _probe_perror("getvfsstat", -1);
if((buf = malloc(sizeof(struct statvfs) * cnt)) == NULL)
return _probe_error("malloc", -1);
return _probe_perror("malloc", -1);
if((cnt2 = getvfsstat(buf, sizeof(struct statvfs) * cnt, ST_WAIT))
== -1)
{
free(buf);
return _probe_error("getvfsstat", -1);
return _probe_perror("getvfsstat", -1);
}
for(ret = 0; ret < cnt && ret < cnt2; ret++)
{
@ -540,7 +542,7 @@ static int _volinfo_bsd_append(struct volinfo ** dev, struct statvfs * buf,
struct volinfo * p;
if((p = realloc(*dev, sizeof(*p) * (nb + 1))) == NULL)
return _probe_error("realloc", 1);
return _probe_perror("realloc", 1);
*dev = p;
strcpy(p[nb].name, buf->f_mntonname);
# if defined(DEBUG)
@ -565,6 +567,7 @@ static int _volinfo_generic(struct volinfo ** dev)
/* Probe */
/* private */
/* types */
typedef struct _Probe
{
@ -581,8 +584,14 @@ typedef struct _Probe
Probe probe;
/* functions */
/* prototypes */
static int _probe_error(int ret);
static int _probe_perror(char const * message, int ret);
static int _probe_timeout(Probe * probe);
/* functions */
/* probe */
static int _probe(void)
{
AppServer * appserver;
@ -600,7 +609,7 @@ static int _probe(void)
{
free(probe.ifinfo);
free(probe.volinfo);
return _probe_error("Event", 1);
return _probe_error(1);
}
if((appserver = appserver_new_event("Probe", ASO_REMOTE, event))
== NULL)
@ -608,13 +617,13 @@ static int _probe(void)
free(probe.ifinfo);
free(probe.volinfo);
event_delete(event);
return _probe_error("AppServer", 1);
return _probe_error(1);
}
tv.tv_sec = PROBE_REFRESH;
tv.tv_usec = 0;
if(event_register_timeout(event, &tv, (EventTimeoutFunc)_probe_timeout,
&probe) != 0)
_probe_error("timeout", 0);
_probe_error(0);
else
event_loop(event);
appserver_delete(appserver);
@ -624,13 +633,25 @@ static int _probe(void)
return 1;
}
static int _probe_error(char const * message, int ret)
/* probe_error */
static int _probe_error(int ret)
{
error_print("Probe");
return ret;
}
/* probe_perror */
static int _probe_perror(char const * message, int ret)
{
fputs("Probe: ", stderr);
perror(message);
return ret;
}
/* probe_timeout */
static int _probe_timeout(Probe * probe)
{
int i;
@ -640,21 +661,24 @@ static int _probe_timeout(Probe * probe)
fprintf(stderr, "%s%d%s", "_probe_timeout(", count++, ")\n");
#endif
if(_sysinfo(&probe->sysinfo) != 0)
return _probe_error("sysinfo", 1);
return _probe_perror("sysinfo", 1);
if(_userinfo(&probe->users) != 0)
return _probe_error("userinfo", 1);
return _probe_perror("userinfo", 1);
if((i = _ifinfo(&probe->ifinfo)) < 0)
return _probe_error("ifinfo", 1);
return _probe_perror("ifinfo", 1);
probe->ifinfo_cnt = i;
if((i = _volinfo(&probe->volinfo)) < 0)
return _probe_error("volinfo", 1);
return _probe_perror("volinfo", 1);
probe->volinfo_cnt = i;
return 0;
}
/* public */
/* functions */
/* AppInterface */
int uptime(void)
/* Probe_uptime */
uint32_t Probe_uptime(void)
{
#if defined(DEBUG)
printf("%s%ld%s", "Uptime: ", probe.sysinfo.uptime, "\n");
@ -663,7 +687,8 @@ int uptime(void)
}
int load_1(void)
/* Probe_load_1 */
uint32_t Probe_load_1(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Load 1: ", probe.sysinfo.loads[0], "\n");
@ -672,7 +697,8 @@ int load_1(void)
}
int load_5(void)
/* Probe_load_5 */
uint32_t Probe_load_5(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Load 5: ", probe.sysinfo.loads[1], "\n");
@ -681,7 +707,8 @@ int load_5(void)
}
int load_15(void)
/* Probe_load_15 */
uint32_t Probe_load_15(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Load 15: ", probe.sysinfo.loads[2], "\n");
@ -690,7 +717,8 @@ int load_15(void)
}
int ram_total(void)
/* Probe_ram_total */
uint32_t Probe_ram_total(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Total RAM: ", probe.sysinfo.totalram, "\n");
@ -698,7 +726,9 @@ int ram_total(void)
return probe.sysinfo.totalram;
}
int ram_free(void)
/* Probe_ram_free */
uint32_t Probe_ram_free(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Free RAM: ", probe.sysinfo.freeram, "\n");
@ -706,7 +736,9 @@ int ram_free(void)
return probe.sysinfo.freeram;
}
int ram_shared(void)
/* Probe_ram_shared */
uint32_t Probe_ram_shared(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Shared RAM: ", probe.sysinfo.sharedram, "\n");
@ -714,7 +746,9 @@ int ram_shared(void)
return probe.sysinfo.sharedram;
}
int ram_buffer(void)
/* Probe_ram_buffer */
uint32_t Probe_ram_buffer(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Buffered RAM: ", probe.sysinfo.bufferram, "\n");
@ -723,7 +757,8 @@ int ram_buffer(void)
}
int swap_total(void)
/* Probe_swap_total */
uint32_t Probe_swap_total(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Total swap: ", probe.sysinfo.totalswap, "\n");
@ -731,7 +766,9 @@ int swap_total(void)
return probe.sysinfo.totalswap;
}
int swap_free(void)
/* Probe_swap_free */
uint32_t Probe_swap_free(void)
{
#if defined(DEBUG)
printf("%s%lu%s", "Free swap: ", probe.sysinfo.freeswap, "\n");
@ -740,7 +777,8 @@ int swap_free(void)
}
int procs(void)
/* Probe_procs */
uint32_t Probe_procs(void)
{
#if defined(DEBUG)
printf("%s%u%s", "Procs: ", probe.sysinfo.procs, "\n");
@ -749,7 +787,8 @@ int procs(void)
}
int users(void)
/* Probe_users */
uint32_t Probe_users(void)
{
#if defined(DEBUG)
printf("%s%u%s", "Users: ", probe.users, "\n");
@ -758,7 +797,8 @@ int users(void)
}
int ifrxbytes(char * dev)
/* Probe_ifrxbytes */
uint32_t Probe_ifrxbytes(String const * dev)
{
unsigned int i;
@ -773,7 +813,9 @@ int ifrxbytes(char * dev)
return probe.ifinfo[i].ibytes;
}
int iftxbytes(char * dev)
/* Probe_iftxbytes */
uint32_t Probe_iftxbytes(String const * dev)
{
unsigned int i;
@ -789,12 +831,13 @@ int iftxbytes(char * dev)
}
int voltotal(char * vol)
/* Probe_voltotal */
uint32_t Probe_voltotal(String const * volume)
{
unsigned int i;
for(i = 0; i < probe.volinfo_cnt
&& string_compare(probe.volinfo[i].name, vol) != 0;
&& string_compare(probe.volinfo[i].name, volume) != 0;
i++);
if(i == probe.volinfo_cnt)
return -1;
@ -805,12 +848,14 @@ int voltotal(char * vol)
return probe.volinfo[i].total * (probe.volinfo[i].block_size / 1024);
}
int volfree(char * vol)
/* Probe_volfree */
uint32_t Probe_volfree(String const * volume)
{
unsigned int i;
for(i = 0; i < probe.volinfo_cnt
&& string_compare(probe.volinfo[i].name, vol) != 0;
&& string_compare(probe.volinfo[i].name, volume) != 0;
i++);
if(i == probe.volinfo_cnt)
return -1;

View File

@ -1,6 +1,7 @@
targets=Probe,DaMon
cppflags_force=-I ../data
cflags_force=-W
cflags=-Wall -g -O2 -ansi
cflags=-Wall -g -O2 -pedantic
ldflags_force=-l System -l dl
ldflags=-L $(PREFIX)/lib -Wl,-rpath,$(PREFIX)/lib
dist=Makefile
@ -13,3 +14,6 @@ ldflags=-Wl,--export-dynamic
[DaMon]
type=binary
sources=damon.c
[probe.c]
depends=../data/Probe.h