107 lines
2.3 KiB
C
107 lines
2.3 KiB
C
/*
|
|
* Copyright (c) 1993-1995 Argonaut Technologies Limited. All rights reserved.
|
|
*
|
|
* $Id: resreg.c 2.3 1996/10/01 14:13:59 sam Exp $
|
|
* $Locker: $
|
|
*
|
|
* Resource class management
|
|
*/
|
|
#include "fw.h"
|
|
#include "brassert.h"
|
|
|
|
BR_RCS_ID("$Id: resreg.c 2.3 1996/10/01 14:13:59 sam Exp $")
|
|
|
|
/*
|
|
* Resource Classes
|
|
*/
|
|
br_resource_class * BR_PUBLIC_ENTRY BrResClassAdd(br_resource_class *rclass)
|
|
{
|
|
br_resource_class *r;
|
|
|
|
UASSERT(rclass != NULL);
|
|
|
|
/*
|
|
* The registry resource is initally faked
|
|
*/
|
|
UASSERT(rclass->res_class == BR_MEMORY_REGISTRY ||
|
|
rclass->res_class == BR_MEMORY_ANCHOR ||
|
|
fw.resource_class_index[rclass->res_class] == NULL);
|
|
|
|
r = BrRegistryAdd(&fw.reg_resource_classes,rclass);
|
|
|
|
if(r != NULL)
|
|
fw.resource_class_index[rclass->res_class] = r;
|
|
|
|
return r; r;
|
|
}
|
|
|
|
br_resource_class * BR_PUBLIC_ENTRY BrResClassRemove(br_resource_class *rclass)
|
|
{
|
|
br_resource_class *r;
|
|
|
|
UASSERT(rclass != NULL);
|
|
UASSERT(fw.resource_class_index[rclass->res_class] != NULL);
|
|
|
|
r = BrRegistryRemove(&fw.reg_resource_classes,rclass);
|
|
|
|
if(r != NULL)
|
|
fw.resource_class_index[rclass->res_class] = NULL;
|
|
|
|
return r;
|
|
}
|
|
|
|
br_resource_class * BR_PUBLIC_ENTRY BrResClassFind(char *pattern)
|
|
{
|
|
return BrRegistryFind(&fw.reg_resource_classes,pattern);
|
|
}
|
|
|
|
br_resclass_find_cbfn * BR_PUBLIC_ENTRY BrResClassFindHook(br_resclass_find_cbfn *hook)
|
|
{
|
|
br_resclass_find_cbfn * old =
|
|
(br_resclass_find_cbfn *) fw.reg_resource_classes.find_failed_hook;
|
|
|
|
fw.reg_resource_classes.find_failed_hook = (br_find_failed_cbfn *)hook;
|
|
|
|
return old;
|
|
}
|
|
|
|
br_uint_32 BR_PUBLIC_ENTRY BrResClassAddMany(br_resource_class **items, int n)
|
|
{
|
|
int i;
|
|
|
|
for(i=0; i < n; i++)
|
|
BrResClassAdd(*items++);
|
|
|
|
return n;
|
|
}
|
|
|
|
br_uint_32 BR_PUBLIC_ENTRY BrResClassRemoveMany(br_resource_class **items, int n)
|
|
{
|
|
int i,r;
|
|
|
|
for(i=0, r=0; i < n; i++)
|
|
if(BrResClassRemove(*items++))
|
|
r++;
|
|
|
|
return r;
|
|
}
|
|
|
|
br_uint_32 BR_PUBLIC_ENTRY BrResClassFindMany(char *pattern, br_resource_class **items, int max)
|
|
{
|
|
return BrRegistryFindMany(&fw.reg_resource_classes, pattern, (void **)items, max);
|
|
}
|
|
|
|
br_uint_32 BR_PUBLIC_ENTRY BrResClassCount(char *pattern)
|
|
{
|
|
return BrRegistryCount(&fw.reg_resource_classes,pattern);
|
|
}
|
|
|
|
br_uint_32 BR_PUBLIC_ENTRY BrResClassEnum(char *pattern,
|
|
br_resclass_enum_cbfn *callback, void *arg)
|
|
{
|
|
return BrRegistryEnum(&fw.reg_resource_classes,pattern,(br_enum_cbfn *)callback,arg);
|
|
}
|
|
|
|
|
|
|
|
|