Index: branches/meklort/i386/libsaio/xml.c =================================================================== --- branches/meklort/i386/libsaio/xml.c (revision 604) +++ branches/meklort/i386/libsaio/xml.c (revision 605) @@ -27,8 +27,10 @@ #include "sl.h" #include "xml.h" -string_ref* ref_strings = NULL; +string_ref *ref_strings = NULL; +/// TODO: remove below +static char* buffer_start = NULL; // TODO: redo the next two functions void SaveRefString(char* string, int id) { @@ -267,9 +269,13 @@ pos = 0; char *configBuffer; + + configBuffer = malloc(strlen(buffer)+1); strcpy(configBuffer, buffer); + buffer_start = configBuffer; + while (1) { length = XMLParseNextTag(configBuffer + pos, &tag); @@ -392,6 +398,7 @@ tmpTag->string = str; tmpTag->tag = 0; tmpTag->tagNext = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start + pos : 0; *tag = tmpTag; length = 0; @@ -464,6 +471,8 @@ tmpTag->string = (char*) integer; tmpTag->tag = 0; tmpTag->tagNext = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start + pos : 0; + *tag = tmpTag; length = 0; @@ -575,6 +584,7 @@ tmpTag->type = type; tmpTag->string = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start : 0; tmpTag->tag = tagList; tmpTag->tagNext = 0; @@ -617,6 +627,7 @@ tmpTag->type = kTagTypeKey; tmpTag->string = string; tmpTag->tag = subTag; + tmpTag->offset = buffer_start ? buffer - buffer_start: 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -650,6 +661,7 @@ tmpTag->type = kTagTypeString; tmpTag->string = string; tmpTag->tag = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start: 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -676,6 +688,7 @@ tmpTag->type = kTagTypeInteger; tmpTag->string = 0; tmpTag->tag = 0; + tmpTag->offset = 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -749,6 +762,7 @@ tmpTag->type = kTagTypeInteger; tmpTag->string = (char *)integer; tmpTag->tag = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start: 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -781,6 +795,7 @@ tmpTag->type = kTagTypeData; tmpTag->string = string; tmpTag->tag = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start: 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -809,6 +824,7 @@ tmpTag->type = kTagTypeDate; tmpTag->string = 0; tmpTag->tag = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start: 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -830,6 +846,7 @@ tmpTag->type = type; tmpTag->string = 0; tmpTag->tag = 0; + tmpTag->offset = buffer_start ? buffer - buffer_start: 0; tmpTag->tagNext = 0; *tag = tmpTag; @@ -951,6 +968,7 @@ tag->type = kTagTypeNone; tag->string = 0; tag->tag = 0; + tag->offset = 0; tag->tagNext = gTagsFree; gTagsFree = tag; #else @@ -1098,6 +1116,21 @@ return NULL; } +long XMLCastStringOffset(TagPtr dict) +{ + if(dict && + ((dict->type == kTagTypeString) || + (dict->type == kTagTypeKey))) + { + return dict->offset; + } + else + { + return -1; + } +} + + bool XMLCastBoolean(TagPtr dict) { if(!dict) return false; Index: branches/meklort/i386/libsaio/xml.h =================================================================== --- branches/meklort/i386/libsaio/xml.h (revision 604) +++ branches/meklort/i386/libsaio/xml.h (revision 605) @@ -92,6 +92,7 @@ bool XMLCastBoolean( TagPtr dict ); char* XMLCastString( TagPtr dict ); +long XMLCastStringOffset(TagPtr dict); int XMLCastInteger ( TagPtr dict ); TagPtr XMLCastDict ( TagPtr dict ); TagPtr XMLCastArray( TagPtr dict );