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. |