# include <kernel/kernel.h> # include <kernel/rsrc.h> # include <type.h> private object rsrcd; /* resource manager */ /* * NAME: create() * DESCRIPTION: initialize API */ static void create() { rsrcd = find_object(RSRCD); } /* * NAME: add_owner() * DESCRIPTION: add a new resource owner */ static void add_owner(string owner) { rsrcd->add_owner(owner); } /* * NAME: remove_owner() * DESCRIPTION: remove a resource owner */ static void remove_owner(string owner) { rsrcd->remove_owner(owner); } /* * NAME: query_owners() * DESCRIPTION: return a list of resource owners */ static string *query_owners() { return rsrcd->query_owners(); } /* * NAME: set_rsrc() * DESCRIPTION: set the maximum, decay percentage and decay period of a * resource */ static void set_rsrc(string name, int max, int decay, int period) { if (!name || max < -1 || decay < 0 || decay > 100 || period < 0 || !decay != !period) { error("Bad arguments for set_rsrc"); } rsrcd->set_rsrc(name, max, decay, period); } /* * NAME: remove_rsrc() * DESCRIPTION: remove a resource */ static void remove_rsrc(string name) { if (!name) { error("Bad argument for remove_rsrc"); } rsrcd->remove_rsrc(name); } /* * NAME: query_rsrc() * DESCRIPTION: get usage and limits of a resource */ static mixed *query_rsrc(string name) { if (!name) { error("Bad argument for query_rsrc"); } return rsrcd->query_rsrc(name); } /* * NAME: query_resources() * DESCRIPTION: return a list of resources */ static string *query_resources() { return rsrcd->query_resources(); } /* * NAME: rsrc_set_limit() * DESCRIPTION: set individual resource limit */ static void rsrc_set_limit(string owner, string name, int max) { if (!name || max < -1) { error("Bad arguments for rsrc_set_limit"); } rsrcd->rsrc_set_limit(owner, name, max); } /* * NAME: rsrc_get() * DESCRIPTION: get individual resource usage */ static mixed *rsrc_get(string owner, string name) { if (!name) { error("Bad arguments for rsrc_get"); } return rsrcd->rsrc_get(owner, name); } /* * NAME: rsrc_incr() * DESCRIPTION: increment or decrement a resource, returning 1 if succeeded, * 0 if failed */ static int rsrc_incr(string owner, string name, mixed index, int incr, varargs int force) { if (!name || (typeof(index) == T_OBJECT && sscanf(object_name(index), "%*s#-1") != 0)) { error("Bad arguments for rsrc_incr"); } return rsrcd->rsrc_incr(owner, name, index, incr, force); }