|
From: <av...@us...> - 2012-02-12 02:32:36
|
Revision: 3763
http://sc2.svn.sourceforge.net/sc2/?rev=3763&view=rev
Author: avolkov
Date: 2012-02-12 02:32:30 +0000 (Sun, 12 Feb 2012)
Log Message:
-----------
Const-correctness for STRING resources; bug #1155; in part from Louis Delacroix
Modified Paths:
--------------
trunk/sc2/src/libs/reslib.h
trunk/sc2/src/libs/resource/resinit.c
Modified: trunk/sc2/src/libs/reslib.h
===================================================================
--- trunk/sc2/src/libs/reslib.h 2012-02-12 01:07:17 UTC (rev 3762)
+++ trunk/sc2/src/libs/reslib.h 2012-02-12 02:32:30 UTC (rev 3763)
@@ -37,6 +37,7 @@
typedef union {
DWORD num;
void *ptr;
+ const char *str;
} RESOURCE_DATA;
#define NULL_RESOURCE NULL
Modified: trunk/sc2/src/libs/resource/resinit.c
===================================================================
--- trunk/sc2/src/libs/resource/resinit.c 2012-02-12 01:07:17 UTC (rev 3762)
+++ trunk/sc2/src/libs/resource/resinit.c 2012-02-12 02:32:30 UTC (rev 3763)
@@ -139,7 +139,7 @@
static void
UseDescriptorAsRes (const char *descriptor, RESOURCE_DATA *resdata)
{
- resdata->ptr = (void *)descriptor;
+ resdata->str = descriptor;
}
static void
@@ -286,7 +286,7 @@
static void
RawDescriptor (RESOURCE_DATA *resdata, char *buf, unsigned int size)
{
- snprintf (buf, size, "%s", (char *)resdata->ptr);
+ snprintf (buf, size, "%s", resdata->str);
}
static void
@@ -475,12 +475,12 @@
{
RESOURCE_INDEX idx = _get_current_index_header ();
ResourceDesc *desc = lookupResourceDesc (idx, key);
- if (!desc || !desc->resdata.ptr || strcmp(desc->vtable->resType, "STRING"))
+ if (!desc || !desc->resdata.str || strcmp(desc->vtable->resType, "STRING"))
return "";
/* 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;
+ return desc->resdata.str;
}
void
@@ -489,24 +489,24 @@
RESOURCE_INDEX idx = _get_current_index_header ();
ResourceDesc *desc = lookupResourceDesc (idx, key);
int srclen, dstlen;
- if (!desc || !desc->resdata.ptr || strcmp(desc->vtable->resType, "STRING"))
+ if (!desc || !desc->resdata.str || strcmp(desc->vtable->resType, "STRING"))
{
/* TODO: This is kind of roundabout. We can do better by refactoring newResourceDesc */
process_resource_desc(key, "STRING:undefined");
desc = lookupResourceDesc (idx, key);
}
srclen = strlen (value);
- dstlen = strlen (desc->resdata.ptr);
+ dstlen = strlen (desc->fname);
if (srclen > dstlen) {
char *newValue = HMalloc(srclen + 1);
char *oldValue = desc->fname;
log_add(log_Warning, "Reallocating string space for '%s'", key);
strncpy (newValue, value, srclen + 1);
- desc->resdata.ptr = newValue;
+ desc->resdata.str = newValue;
desc->fname = newValue;
HFree (oldValue);
} else {
- strncpy (desc->resdata.ptr, value, srclen + 1);
+ strncpy (desc->fname, value, srclen + 1);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|