Load override.cfg from config dir to add or override menu controls
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3159 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -150,6 +150,7 @@ initKeyConfig (void)
|
||||
|
||||
/* First, load in the menu keys */
|
||||
LoadResourceIndex (contentDir, "menu.key", "menu.");
|
||||
LoadResourceIndex (configDir, "override.cfg", "menu.");
|
||||
for (i = 0; i < NUM_MENU_KEYS; i++)
|
||||
{
|
||||
if (!menu_res_names[i])
|
||||
|
||||
@@ -121,10 +121,10 @@ res_GetResource (RESOURCE res)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (desc->resdata.ptr == NULL)
|
||||
loadResourceDesc (desc);
|
||||
if (desc->resdata.ptr != NULL)
|
||||
return desc->resdata.ptr;
|
||||
|
||||
loadResourceDesc (desc);
|
||||
++desc->refcount;
|
||||
|
||||
return desc->resdata.ptr;
|
||||
// May still be NULL, if the load failed.
|
||||
@@ -176,6 +176,13 @@ res_FreeResource (RESOURCE res)
|
||||
return;
|
||||
}
|
||||
|
||||
if (desc->refcount > 0)
|
||||
--desc->refcount;
|
||||
else
|
||||
log_add (log_Debug, "Warning: freeing an unreferenced resource.");
|
||||
if (desc->refcount > 0)
|
||||
return; // Still references left
|
||||
|
||||
freeFun = desc->vtable->freeFun;
|
||||
if (freeFun == NULL)
|
||||
{
|
||||
@@ -216,7 +223,7 @@ res_DetachResource (RESOURCE res)
|
||||
freeFun = desc->vtable->freeFun;
|
||||
if (freeFun == NULL)
|
||||
{
|
||||
log_add (log_Debug, "Warning: trying to detatch from a non-heap resource.");
|
||||
log_add (log_Debug, "Warning: trying to detach from a non-heap resource.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -227,8 +234,16 @@ res_DetachResource (RESOURCE res)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (desc->refcount > 1)
|
||||
{
|
||||
log_add (log_Debug, "Warning: trying to detach a resource referenced "
|
||||
"%u times", desc->refcount);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
result = desc->resdata.ptr;
|
||||
desc->resdata.ptr = NULL;
|
||||
desc->refcount = 0;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ typedef struct resource_desc
|
||||
char *fname;
|
||||
ResourceHandlers *vtable;
|
||||
RESOURCE_DATA resdata;
|
||||
// refcount is rudimentary as nothing really frees the descriptors
|
||||
unsigned refcount;
|
||||
} ResourceDesc;
|
||||
|
||||
struct resource_index_desc
|
||||
|
||||
@@ -106,6 +106,7 @@ newResourceDesc (const char *res_id, const char *resval)
|
||||
strncpy (result->fname, path, pathlen);
|
||||
result->fname[pathlen] = '\0';
|
||||
result->vtable = vtable;
|
||||
result->refcount = 0;
|
||||
|
||||
if (vtable->freeFun == NULL)
|
||||
{
|
||||
@@ -324,6 +325,9 @@ res_GetString (const char *key)
|
||||
ResourceDesc *desc = lookupResourceDesc (idx, key);
|
||||
if (!desc || !desc->resdata.ptr || strcmp(desc->vtable->resType, "STRING"))
|
||||
return NULL;
|
||||
/* TODO: Work out exact STRING semantics, specifically, the lifetime of
|
||||
* the returned value. If caller is allowed to reference the returned
|
||||
* value forever, STRING has to be ref-counted. */
|
||||
return (const char *)desc->resdata.ptr;
|
||||
}
|
||||
|
||||
@@ -424,7 +428,8 @@ res_Remove (const char *key)
|
||||
{
|
||||
if (oldDesc->resdata.ptr != NULL)
|
||||
{
|
||||
log_add (log_Warning, "WARNING: Replacing '%s' while it is live", key);
|
||||
if (oldDesc->refcount > 0)
|
||||
log_add (log_Warning, "WARNING: Replacing '%s' while it is live", key);
|
||||
if (oldDesc->vtable && oldDesc->vtable->freeFun)
|
||||
{
|
||||
oldDesc->vtable->freeFun(oldDesc->resdata.ptr);
|
||||
|
||||
Reference in New Issue
Block a user