Index: branches/ErmaC/Enoch/i386/libsaio/xml.c
===================================================================
--- branches/ErmaC/Enoch/i386/libsaio/xml.c (revision 2865)
+++ branches/ErmaC/Enoch/i386/libsaio/xml.c (revision 2866)
@@ -905,10 +905,11 @@
// ParseTagData
static long ParseTagData( char *buffer, TagPtr *tag)
{
- int actuallen = 0;
- long length = 0;
+ //int actuallen = 0;
+ int len = 0;
+ long length = 0;
TagPtr tmpTag;
- char *string;
+ char *tmpString;
length = FixDataMatchingTag(buffer, kXMLTagData);
if (length == -1)
@@ -921,18 +922,14 @@
{
return -1;
}
-
- //printf("ParseTagData unimplimented\n");
- //printf("Data: %s\n", buffer);
- // getchar();
-
- string = BASE64Decode(buffer, strlen(buffer), &actuallen);
+ tmpString = NewSymbol(buffer);
tmpTag->type = kTagTypeData;
- tmpTag->string = string;
+ tmpTag->string = tmpString;
+ tmpTag->data = (UInt8 *)BASE64Decode(buffer, strlen(buffer), &len);
+ tmpTag->dataLen = len;
tmpTag->tag = NULL;
- tmpTag->offset = actuallen; // buffer_start ? buffer - buffer_start: 0;
-
+ tmpTag->offset = /* actuallen; */ buffer_start ? buffer - buffer_start: 0;
tmpTag->tagNext = NULL;
*tag = tmpTag;
@@ -1100,6 +1097,8 @@
{
tag[cnt].type = kTagTypeNone;
tag[cnt].string = 0;
+ tag[cnt].data = 0;
+ tag[cnt].dataLen = 0;
tag[cnt].tag = 0;
tag[cnt].tagNext = tag + cnt + 1;
}
@@ -1135,6 +1134,8 @@
// Clear and free the tag.
tag->type = kTagTypeNone;
tag->string = NULL;
+ tag->data = NULL;
+ tag->dataLen = 0;
tag->tag = NULL;
tag->offset = 0;
tag->tagNext = gTagsFree;
@@ -1176,6 +1177,7 @@
if (symbol == NULL)
{
stop("NULL symbol!");
+ return NULL;
}
// Set the symbol's data.
Index: branches/ErmaC/Enoch/i386/libsaio/xml.h
===================================================================
--- branches/ErmaC/Enoch/i386/libsaio/xml.h (revision 2865)
+++ branches/ErmaC/Enoch/i386/libsaio/xml.h (revision 2866)
@@ -62,6 +62,8 @@
#define kXMLTagReference "reference"
#define kXMLStringID "ID="
#define kXMLStringIDRef "IDREF="
+#define kXMLStringIDRefs "IDREFS="
+#define kXMLTagSIZE "size="
#define kPropCFBundleIdentifier ("CFBundleIdentifier")
#define kPropCFBundleExecutable ("CFBundleExecutable")
Index: branches/ErmaC/Enoch/i386/libsaio/stringTable.c
===================================================================
--- branches/ErmaC/Enoch/i386/libsaio/stringTable.c (revision 2865)
+++ branches/ErmaC/Enoch/i386/libsaio/stringTable.c (revision 2866)
@@ -364,6 +364,26 @@
const char *key_val;
int size;
+ // looking for real boolean ( or )
+ // if is a boolean tag, return immediately
+ TagPtr entry = XMLGetProperty(config->dictionary,key);
+
+ if(XMLIsBoolean(entry))
+ {
+ int value = XMLCastBoolean(entry);
+ if (value) {
+ *result_val = true;
+ return true;
+ }
+ else
+ {
+ *result_val = false;
+ return false;
+ }
+ }
+
+ // check if is a boolean as "string" (Yes/No)
+ // (IMHO this should be deprecated soon)
if (getValueForKey(key, &key_val, &size, config))
{
if ((size >= 1) && (key_val[0] == 'Y' || key_val[0] == 'y'))
Index: branches/ErmaC/Enoch/i386/boot2/drivers.c
===================================================================
--- branches/ErmaC/Enoch/i386/boot2/drivers.c (revision 2865)
+++ branches/ErmaC/Enoch/i386/boot2/drivers.c (revision 2866)
@@ -650,12 +650,12 @@
// LoadMatchedModules
long LoadMatchedModules( void )
{
- TagPtr prop;
- ModulePtr module;
- char *fileName, segName[32];
- DriverInfoPtr driver;
- long length, driverAddr, driverLength;
- void *executableAddr = 0;
+ TagPtr prop;
+ ModulePtr module;
+ char *fileName, segName[32];
+ DriverInfoPtr driver;
+ long length, driverAddr, driverLength;
+ void *executableAddr = 0;
module = gModuleHead;