added unknown encoding handler & expat is statically linked
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 27 Oct 2008 20:33:16 +0000
changeset 22 cc1df6cc67b5
parent 21 50b045a0c824
child 23 6fbb595a44bc
added unknown encoding handler & expat is statically linked
xmlreaderimpl/trunk/Make.proto
xmlreaderimpl/trunk/Make.spec
xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.so
xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.st
xmlreaderimpl/trunk/bc.def
xmlreaderimpl/trunk/stx_goodies_xmlsuite_xmlreaderimpl.st
--- a/xmlreaderimpl/trunk/Make.proto	Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/Make.proto	Mon Oct 27 20:33:16 2008 +0000
@@ -58,14 +58,15 @@
 
 # ********** OPTIONAL: MODIFY the next line ***
 # additional C-libraries that should be pre-linked with the class-objects
-LD_OBJ_LIBS=-lexpat
-OTHERLIBS=-lexpat
-LOCAL_SHARED_LIBS=-lexpat
+LD_OBJ_LIBS=
 
 
 # ********** OPTIONAL: MODIFY the next line ***
 # additional C targets or libraries should be added below
 LOCAL_EXTRA_TARGETS=
+LOCAL_SHARED_LIBS=-lexpat
+LDFLAGS+=-static
+
 
 all:: preMake classLibRule postMake
 
@@ -94,7 +95,8 @@
 
 
 XMLv2__ExpatXMLReader.$(SO): XMLv2__ExpatXMLReader.$(O)
-        $(MAKE) $(SHAREDLIBRULE) LIB=XMLv2__ExpatXMLReader.$(SO) OBJS="XMLv2__ExpatXMLReader.$(O)" LOCAL_SHARED_LIBS="-lexpat"
+	ld -nostdlib -shared -static -L/usr/lib -Llib -L/usr/local/lib -L/usr/X11/lib -R.,-Rlib,-R/opt/stx/`cat ../../../RELEASE`/lib/lib,-R/usr/local/lib/stx`cat ../../../RELEASE` -o XMLv2__ExpatXMLReader.so XMLv2__ExpatXMLReader.o -lexpat
+
 
 
 
--- a/xmlreaderimpl/trunk/Make.spec	Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/Make.spec	Mon Oct 27 20:33:16 2008 +0000
@@ -58,7 +58,6 @@
 STCWARNINGS=
 
 OBJS= \
-    extensions.$(O) \
     stx_goodies_xmlsuite_xmlreaderimpl.$(O) \
     XMLv2__ExpatXMLReader.$(O) \
     XMLv2__VWSAXBuilder.$(O) \
Binary file xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.so has changed
--- a/xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.st	Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.st	Mon Oct 27 20:33:16 2008 +0000
@@ -22,11 +22,10 @@
 
 #define CHUNK_SIZE 8192
 
-#ifdef DEBUG
 # define EXPAT_DEBUG(args) printf("ExpatXMLReader [debug]") ; printf args
-#else
+/*
 # define EXPAT_DEBUG(args)
-#endif
+*/
 
 #define EXPAT_DEBUG_ENTER EXPAT_DEBUG((" Entering %s\n",__PRETTY_FUNCTION__))
 #define EXPAT_DEBUG_LEAVE EXPAT_DEBUG((" Leaving  %s\n",__PRETTY_FUNCTION__))
@@ -206,6 +205,44 @@
     EXPAT_DEBUG_LEAVE;
 }
 
+static int XMLCALL
+unknownEncodingHandler(void *readerPointer,
+                       const XML_Char *name,
+                       XML_Encoding *info)
+{
+    OBJ reader;
+    OBJ mapArray;
+    int i;
+    int size;
+    EXPAT_DEBUG_ENTER;
+    reader = **(OBJ**)readerPointer;
+    EXPAT_DEBUG((" Unknown encoding %s encountered\n"));
+    mapArray = __SSEND1(reader, @symbol(expatUnknownEncoding:), 0, __MKSTRING(name));
+    if (! __isArray(mapArray)) goto error;
+    EXPAT_DEBUG((" Got map!\n"));
+    size =  (256 < __arraySize(mapArray) ? 256 : __arraySize(mapArray));   
+    for (i = 0; i < size; i++) {
+        if (__isInteger(__ArrayInstPtr(mapArray)->a_element[i])) {
+            info->map[i] = __intVal(__ArrayInstPtr(mapArray)->a_element[i]);
+            EXPAT_DEBUG((" map[%d] = %d;\n", i, info->map[i]));
+        } else {
+            EXPAT_DEBUG((" Non-integer value in the map array!"));
+            goto error;
+        }
+    }
+    info->convert = NULL;
+    info->release = NULL;
+    EXPAT_DEBUG((" OK, return 1\n"));
+    EXPAT_DEBUG_LEAVE;
+    return 1;
+    error:
+    EXPAT_DEBUG((" FAIL, return 0\n"));
+    EXPAT_DEBUG_LEAVE;
+    return 0;
+   
+}
+
+
 
 %}
 ! !
@@ -267,6 +304,19 @@
 
 !ExpatXMLReader methodsFor:'expat events'!
 
+expatUnknownEncoding: aString
+
+    | encoder |
+    encoder := CharacterEncoder encoderFor: aString.
+    (encoder isKindOf: CharacterEncoderImplementations::SingleByteEncoder)
+        ifFalse:[^nil "multibyte encoders not supported"].
+    ^( ( 0 to: 255 ) collect: [:c|encoder decode:c] ) asArray
+
+    "Modified: / 27-10-2008 / 19:09:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
+
+!
+
+
 expatCharacters:aString
 
     | handler |
@@ -450,6 +500,7 @@
         XML_SetStartCdataSectionHandler(p, startCDataSection);
         XML_SetEndCdataSectionHandler(p, endCDataSection);
         XML_SetXmlDeclHandler(p, xmlProlog);
+        XML_SetUnknownEncodingHandler(p, unknownEncodingHandler, data);
         XML_SetReturnNSTriplet(p,1);
 
         /* Store parser into instance variable */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlreaderimpl/trunk/bc.def	Mon Oct 27 20:33:16 2008 +0000
@@ -0,0 +1,6 @@
+LIBRARY xmlreaderimpl
+CODE PRELOAD MOVEABLE DISCARDABLE
+SEGMENTS
+   INITCODE    PRELOAD DISCARDABLE
+EXPORTS 
+    _xmlreaderimpl_Init   @1
--- a/xmlreaderimpl/trunk/stx_goodies_xmlsuite_xmlreaderimpl.st	Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/stx_goodies_xmlsuite_xmlreaderimpl.st	Mon Oct 27 20:33:16 2008 +0000
@@ -18,16 +18,15 @@
 !
 postLoadAction
 
-    | expatLibraryName |
-    OperatingSystem isUNIXlike ifTrue:
-        [expatLibraryName := 'XMLv2__ExpatXMLReader.so'].
-    OperatingSystem isMSWINDOWSlike ifTrue:
-        [expatLibraryName := 'XMLv2__ExpatXMLReader.dll'].
+    | expatXMLReaderLibName expatXMLReaderLib |
+    expatXMLReaderLibName := 'XMLv2__ExpatXMLReader' , 
+                                ObjectFileLoader sharedLibraryExtension.
+    expatXMLReaderLib :=
+        (Smalltalk getPackageDirectoryForPackage: self package) 
+            construct: expatXMLReaderLibName.
+    expatXMLReaderLib exists 
+        ifTrue:[ObjectFileLoader loadObjectFile: expatXMLReaderLib nameString].
 
-    ((Smalltalk getPackageDirectoryForPackage:'stx:goodies/xmlsuite/xmlreaderimpl')
-        construct: expatLibraryName) exists ifTrue:
-            [expatLibraryName := ((Smalltalk getPackageDirectoryForPackage:'stx:goodies/xmlsuite/xmlreaderimpl')
-                                    construct: expatLibraryName)].
 !
 
 preRequisites