summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorssolie <ssolie>2009-08-08 03:48:55 +0000
committerssolie <ssolie>2009-08-08 03:48:55 +0000
commit2db1b86de13ce603281b78016f278d0cff4d1460 (patch)
treef9fdedb5bfcfe67660106de85fb6a8627e87b63c
parent2308aa1e368cc28bb6c4bee80c9ad4970f29ee56 (diff)
downloadlibexpat-2db1b86de13ce603281b78016f278d0cff4d1460.tar.gz
Some AmigaOS related changes.
-rw-r--r--MANIFEST2
-rw-r--r--amiga/Makefile11
-rw-r--r--amiga/README.txt8
-rw-r--r--amiga/expat_68k.c12
-rwxr-xr-xamiga/expat_68k.h24
-rwxr-xr-xamiga/expat_68k_handler_stubs.c58
-rw-r--r--amiga/expat_base.h40
-rwxr-xr-xamiga/expat_lib.c105
-rwxr-xr-xamiga/launch.c14
-rwxr-xr-xamiga/stdlib.c109
10 files changed, 187 insertions, 196 deletions
diff --git a/MANIFEST b/MANIFEST
index 765ccb3..1fefb3a 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,8 +1,8 @@
-amiga/stdlib.c
amiga/launch.c
amiga/expat_68k.c
amiga/expat_68k.h
amiga/expat_68k_handler_stubs.c
+amiga/expat_base.h
amiga/expat_vectors.c
amiga/expat_lib.c
amiga/expat.xml
diff --git a/amiga/Makefile b/amiga/Makefile
index 4fa1f4b..c6d1261 100644
--- a/amiga/Makefile
+++ b/amiga/Makefile
@@ -214,20 +214,19 @@ newlib/benchmark.o: benchmark.c
#############################################################################
-libs/expat.library: libs/expat_lib.o libs/expat_68k.o libs/expat_68k_handler_stubs.o libs/expat_vectors.o libs/stdlib.o newlib/libexpat.a
- $(CC) -mcrt=newlib -nostartfiles -nostdlib $^ -o $@ newlib/libexpat.a
+libs/expat.library: libs/expat_lib.o libs/expat_68k.o libs/expat_68k_handler_stubs.o libs/expat_vectors.o newlib/libexpat.a
+ $(CC) -mcrt=newlib -nostartfiles $^ -o $@ newlib/libexpat.a -Wl,--cref,-M,-Map=$@.map
protect $@ -e
+ $(STRIP) $(STRIPFLAGS) $@
-libs/expat_lib.o: expat_lib.c
+libs/expat_lib.o: expat_lib.c expat_base.h
-libs/expat_68k.o: expat_68k.c expat_68k.h
+libs/expat_68k.o: expat_68k.c expat_68k.h expat_base.h
libs/expat_68k_handler_stubs.o: expat_68k_handler_stubs.c expat_68k.h
libs/expat_vectors.o: expat_vectors.c
-libs/stdlib.o: stdlib.c
-
libs/launch.o: launch.c
#############################################################################
diff --git a/amiga/README.txt b/amiga/README.txt
index f26f0f2..3ba9267 100644
--- a/amiga/README.txt
+++ b/amiga/README.txt
@@ -39,6 +39,14 @@ Expat repository available at http://expat.sourceforge.net/
HISTORY
=======
+53.1 - bumped version to match AmigaOS streaming
+ - modified to remove all global variables (except INewLib)
+ - removed replacements for malloc(), etc. which are now
+ handled by the respective C library
+ - compiled with the latest binutils which bumps the
+ AMIGAOS_DYNVERSION to 2 for the libexpat.so target
+ - now strips the expat.library binary
+
5.2 - fixed XML_Parse 68k stub which enables xmlviewer to work
without crashing
- added some new functions to the 68k jump table available
diff --git a/amiga/expat_68k.c b/amiga/expat_68k.c
index d84a5a4..aa4c6e2 100644
--- a/amiga/expat_68k.c
+++ b/amiga/expat_68k.c
@@ -22,7 +22,7 @@
*/
/*
-** This file was originally automatically generated by fdtrans.
+** Note: This file was originally automatically generated by fdtrans.
*/
#ifdef __USE_INLINE__
@@ -35,6 +35,7 @@
#include <proto/exec.h>
#include <interfaces/expat.h>
#include "expat_68k.h"
+#include "expat_base.h"
STATIC ULONG stub_OpenPPC(ULONG *regarray)
@@ -74,12 +75,14 @@ static M68kXML_Parser stub_XML_ParserCreatePPC(ULONG *regarray)
struct Library *Base = (struct Library *) regarray[REG68K_A6/4];
struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize);
struct ExpatIFace *Self = (struct ExpatIFace *) ExtLib->MainIFace;
+ struct ExecIFace *IExec = ((struct ExpatBase *)Self->Data.LibBase)->IExec;
M68kXML_Parser p;
p = IExec->AllocVec(sizeof(*p), MEMF_SHARED|MEMF_CLEAR);
if (p) {
p->p = Self->XML_ParserCreate((const XML_Char *)regarray[8]);
if (p->p) {
+ p->IExec = IExec;
Self->XML_SetUserData(p->p, p);
return p;
}
@@ -94,12 +97,14 @@ static M68kXML_Parser stub_XML_ParserCreateNSPPC(ULONG *regarray)
struct Library *Base = (struct Library *) regarray[REG68K_A6/4];
struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize);
struct ExpatIFace *Self = (struct ExpatIFace *) ExtLib->MainIFace;
+ struct ExecIFace *IExec = ((struct ExpatBase *)Self->Data.LibBase)->IExec;
M68kXML_Parser p;
p = IExec->AllocVec(sizeof(*p), MEMF_SHARED|MEMF_CLEAR);
if (p) {
p->p = Self->XML_ParserCreateNS((const XML_Char *)regarray[8], (XML_Char)regarray[0]);
if (p->p) {
+ p->IExec = IExec;
Self->XML_SetUserData(p->p, p);
return p;
}
@@ -114,6 +119,7 @@ static M68kXML_Parser stub_XML_ParserCreate_MMPPC(ULONG *regarray)
struct Library *Base = (struct Library *) regarray[REG68K_A6/4];
struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize);
struct ExpatIFace *Self = (struct ExpatIFace *) ExtLib->MainIFace;
+ struct ExecIFace *IExec = ((struct ExpatBase *)Self->Data.LibBase)->IExec;
M68kXML_Parser p;
p = IExec->AllocVec(sizeof(*p), MEMF_SHARED|MEMF_CLEAR);
@@ -122,6 +128,7 @@ static M68kXML_Parser stub_XML_ParserCreate_MMPPC(ULONG *regarray)
(const XML_Memory_Handling_Suite *)regarray[9],
(const XML_Char *)regarray[10]);
if (p->p) {
+ p->IExec = IExec;
Self->XML_SetUserData(p->p, p);
return p;
}
@@ -136,6 +143,7 @@ static M68kXML_Parser stub_XML_ExternalEntityParserCreatePPC(ULONG *regarray)
struct Library *Base = (struct Library *) regarray[REG68K_A6/4];
struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize);
struct ExpatIFace *Self = (struct ExpatIFace *) ExtLib->MainIFace;
+ struct ExecIFace *IExec = ((struct ExpatBase *)Self->Data.LibBase)->IExec;
M68kXML_Parser p;
p = IExec->AllocVec(sizeof(*p), MEMF_SHARED|MEMF_CLEAR);
@@ -143,6 +151,7 @@ static M68kXML_Parser stub_XML_ExternalEntityParserCreatePPC(ULONG *regarray)
p->p = Self->XML_ExternalEntityParserCreate((XML_Parser)regarray[8],
(const XML_Char *)regarray[9], (const XML_Char *)regarray[10]);
if (p->p) {
+ p->IExec = IExec;
Self->XML_SetUserData(p->p, p);
return p;
}
@@ -157,6 +166,7 @@ static void stub_XML_ParserFreePPC(ULONG *regarray)
struct Library *Base = (struct Library *) regarray[REG68K_A6/4];
struct ExtendedLibrary *ExtLib = (struct ExtendedLibrary *) ((ULONG)Base + Base->lib_PosSize);
struct ExpatIFace *Self = (struct ExpatIFace *) ExtLib->MainIFace;
+ struct ExecIFace *IExec = ((struct ExpatBase *)Self->Data.LibBase)->IExec;
M68kXML_Parser p = (M68kXML_Parser)regarray[8];
if (p) {
diff --git a/amiga/expat_68k.h b/amiga/expat_68k.h
index f1273f1..6f1aac5 100755
--- a/amiga/expat_68k.h
+++ b/amiga/expat_68k.h
@@ -1,3 +1,26 @@
+/*
+** Copyright (c) 2001-2009 Expat maintainers.
+**
+** Permission is hereby granted, free of charge, to any person obtaining
+** a copy of this software and associated documentation files (the
+** "Software"), to deal in the Software without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Software, and to
+** permit persons to whom the Software is furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Software.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
#ifndef EXPAT_68K_H
#define EXPAT_68K_H
@@ -7,6 +30,7 @@
typedef struct M68kXML_ParserStruct {
XML_Parser p;
+ struct ExecIFace *IExec;
void *handlerarg;
void *extenthandlerarg;
void *enchandlerarg;
diff --git a/amiga/expat_68k_handler_stubs.c b/amiga/expat_68k_handler_stubs.c
index c09ebac..aca33c6 100755
--- a/amiga/expat_68k_handler_stubs.c
+++ b/amiga/expat_68k_handler_stubs.c
@@ -21,19 +21,23 @@
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#ifdef __USE_INLINE__
+#undef __USE_INLINE__
+#endif
+
#include "expat_68k.h"
#include <exec/emulation.h>
#include <proto/exec.h>
#include <stdarg.h>
-static uint32 VARARGS68K call_68k_code (void *code, int num_args, ...) {
+static uint32 VARARGS68K call_68k_code (struct ExecIFace *IExec, void *code, int num_args, ...) {
uint32 res = 0;
va_list vargs;
va_startlinear(vargs, num_args);
uint32 *args = va_getlinearva(vargs, uint32 *);
- uint8 *stack = AllocVec(4096, MEMF_SHARED);
+ uint8 *stack = IExec->AllocVec(4096, MEMF_SHARED);
if (stack) {
uint32 *sp = (uint32 *)(stack + 4096);
args += num_args;
@@ -41,8 +45,8 @@ static uint32 VARARGS68K call_68k_code (void *code, int num_args, ...) {
*--sp = *--args;
}
- res = EmulateTags(code, ET_StackPtr, sp, TAG_END);
- FreeVec(stack);
+ res = IExec->EmulateTags(code, ET_StackPtr, sp, TAG_END);
+ IExec->FreeVec(stack);
}
va_end(vargs);
@@ -52,47 +56,47 @@ static uint32 VARARGS68K call_68k_code (void *code, int num_args, ...) {
void _68k_startelementhandler(void *userdata, const char *name, const char **attrs) {
M68kXML_Parser p = userdata;
- call_68k_code(p->startelementhandler, 3, p->handlerarg, name, attrs);
+ call_68k_code(p->IExec, p->startelementhandler, 3, p->handlerarg, name, attrs);
}
void _68k_endelementhandler(void *userdata, const char *name) {
M68kXML_Parser p = userdata;
- call_68k_code(p->endelementhandler, 2, p->handlerarg, name);
+ call_68k_code(p->IExec, p->endelementhandler, 2, p->handlerarg, name);
}
void _68k_chardatahandler(void *userdata, const char *s, int len) {
M68kXML_Parser p = userdata;
- call_68k_code(p->chardatahandler, 3, p->handlerarg, s, len);
+ call_68k_code(p->IExec, p->chardatahandler, 3, p->handlerarg, s, len);
}
void _68k_procinsthandler(void *userdata, const char *target, const char *data) {
M68kXML_Parser p = userdata;
- call_68k_code(p->procinsthandler, 3, p->handlerarg, target, data);
+ call_68k_code(p->IExec, p->procinsthandler, 3, p->handlerarg, target, data);
}
void _68k_commenthandler(void *userdata, const char *data) {
M68kXML_Parser p = userdata;
- call_68k_code(p->commenthandler, 2, p->handlerarg, data);
+ call_68k_code(p->IExec, p->commenthandler, 2, p->handlerarg, data);
}
void _68k_startcdatahandler(void *userdata) {
M68kXML_Parser p = userdata;
- call_68k_code(p->startcdatahandler, 1, p->handlerarg);
+ call_68k_code(p->IExec, p->startcdatahandler, 1, p->handlerarg);
}
void _68k_endcdatahandler(void *userdata) {
M68kXML_Parser p = userdata;
- call_68k_code(p->endcdatahandler, 1, p->handlerarg);
+ call_68k_code(p->IExec, p->endcdatahandler, 1, p->handlerarg);
}
void _68k_defaulthandler(void *userdata, const char *s, int len) {
M68kXML_Parser p = userdata;
- call_68k_code(p->defaulthandler, 3, p->handlerarg, s, len);
+ call_68k_code(p->IExec, p->defaulthandler, 3, p->handlerarg, s, len);
}
void _68k_defaulthandlerexp(void *userdata, const char *s, int len) {
M68kXML_Parser p = userdata;
- call_68k_code(p->defaulthandlerexp, 3, p->handlerarg, s, len);
+ call_68k_code(p->IExec, p->defaulthandlerexp, 3, p->handlerarg, s, len);
}
int _68k_extentrefhandler(XML_Parser parser, const char *context, const char *base,
@@ -100,51 +104,51 @@ int _68k_extentrefhandler(XML_Parser parser, const char *context, const char *ba
{
M68kXML_Parser p = XML_GetUserData(parser);
void *arg = p->extenthandlerarg;
- return (int)call_68k_code(p->extentrefhandler, 5, arg ? arg : p, context, base, sysid, pubid);
+ return (int)call_68k_code(p->IExec, p->extentrefhandler, 5, arg ? arg : p, context, base, sysid, pubid);
}
int _68k_unknownenchandler(void *enchandlerdata, const char *name, XML_Encoding *info) {
M68kXML_Parser p = enchandlerdata;
- return (int)call_68k_code(p->unknownenchandler, 3, p->enchandlerarg, name, info);
+ return (int)call_68k_code(p->IExec, p->unknownenchandler, 3, p->enchandlerarg, name, info);
}
void _68k_startnamespacehandler(void *userdata, const char *prefix, const char *uri) {
M68kXML_Parser p = userdata;
- call_68k_code(p->startnamespacehandler, 3, p->handlerarg, prefix, uri);
+ call_68k_code(p->IExec, p->startnamespacehandler, 3, p->handlerarg, prefix, uri);
}
void _68k_endnamespacehandler(void *userdata, const char *prefix) {
M68kXML_Parser p = userdata;
- call_68k_code(p->endnamespacehandler, 2, p->handlerarg, prefix);
+ call_68k_code(p->IExec, p->endnamespacehandler, 2, p->handlerarg, prefix);
}
void _68k_xmldeclhandler(void *userdata, const char *version, const char *encoding, int standalone) {
M68kXML_Parser p = userdata;
- call_68k_code(p->xmldeclhandler, 4, p->handlerarg, version, encoding, standalone);
+ call_68k_code(p->IExec, p->xmldeclhandler, 4, p->handlerarg, version, encoding, standalone);
}
void _68k_startdoctypehandler(void *userdata, const char *doctypename,
const char *sysid, const char *pubid, int has_internal_subset)
{
M68kXML_Parser p = userdata;
- call_68k_code(p->startdoctypehandler, 5, p->handlerarg, doctypename, sysid, pubid, has_internal_subset);
+ call_68k_code(p->IExec, p->startdoctypehandler, 5, p->handlerarg, doctypename, sysid, pubid, has_internal_subset);
}
void _68k_enddoctypehandler(void *userdata) {
M68kXML_Parser p = userdata;
- call_68k_code(p->enddoctypehandler, 1, p->handlerarg);
+ call_68k_code(p->IExec, p->enddoctypehandler, 1, p->handlerarg);
}
void _68k_elementdeclhandler(void *userdata, const char *name, XML_Content *model) {
M68kXML_Parser p = userdata;
- call_68k_code(p->elementdeclhandler, 3, p->handlerarg, name, model);
+ call_68k_code(p->IExec, p->elementdeclhandler, 3, p->handlerarg, name, model);
}
void _68k_attlistdeclhandler(void *userdata, const char *elname, const char *attname,
const char *att_type, const char *dflt, int isrequired)
{
M68kXML_Parser p = userdata;
- call_68k_code(p->attlistdeclhandler, 6, p->handlerarg, elname, attname, att_type, dflt, isrequired);
+ call_68k_code(p->IExec, p->attlistdeclhandler, 6, p->handlerarg, elname, attname, att_type, dflt, isrequired);
}
void _68k_entitydeclhandler(void *userdata, const char *entityname, int is_param_entity,
@@ -152,7 +156,7 @@ void _68k_entitydeclhandler(void *userdata, const char *entityname, int is_param
const char *notationname)
{
M68kXML_Parser p = userdata;
- call_68k_code(p->entitydeclhandler, 9, p->handlerarg, entityname, is_param_entity,
+ call_68k_code(p->IExec, p->entitydeclhandler, 9, p->handlerarg, entityname, is_param_entity,
value, value_length, base, sysid, pubid, notationname);
}
@@ -160,22 +164,22 @@ void _68k_unparseddeclhandler(void *userdata, const char *entityname, const char
const char *sysid, const char *pubid, const char *notationname)
{
M68kXML_Parser p = userdata;
- call_68k_code(p->unparseddeclhandler, 6, p->handlerarg, entityname, base, sysid, pubid, notationname);
+ call_68k_code(p->IExec, p->unparseddeclhandler, 6, p->handlerarg, entityname, base, sysid, pubid, notationname);
}
void _68k_notationdeclhandler(void *userdata, const char *notationname, const char *base,
const char *sysid, const char *pubid)
{
M68kXML_Parser p = userdata;
- call_68k_code(p->notationdeclhandler, 5, p->handlerarg, notationname, base, sysid, pubid);
+ call_68k_code(p->IExec, p->notationdeclhandler, 5, p->handlerarg, notationname, base, sysid, pubid);
}
int _68k_notstandalonehandler(void *userdata) {
M68kXML_Parser p = userdata;
- return (int)call_68k_code(p->notstandalonehandler, 1, p->handlerarg);
+ return (int)call_68k_code(p->IExec, p->notstandalonehandler, 1, p->handlerarg);
}
void _68k_skippedentityhandler(void *userdata, const char *entityname, int is_param_entity) {
M68kXML_Parser p = userdata;
- call_68k_code(p->skippedentityhandler, 3, p->handlerarg, entityname, is_param_entity);
+ call_68k_code(p->IExec, p->skippedentityhandler, 3, p->handlerarg, entityname, is_param_entity);
}
diff --git a/amiga/expat_base.h b/amiga/expat_base.h
new file mode 100644
index 0000000..2663639
--- /dev/null
+++ b/amiga/expat_base.h
@@ -0,0 +1,40 @@
+/*
+** Copyright (c) 2001-2009 Expat maintainers.
+**
+** Permission is hereby granted, free of charge, to any person obtaining
+** a copy of this software and associated documentation files (the
+** "Software"), to deal in the Software without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Software, and to
+** permit persons to whom the Software is furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Software.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef EXPAT_BASE_H
+#define EXPAT_BASE_H
+
+#include <exec/libraries.h>
+#include <dos/dos.h>
+#include <interfaces/exec.h>
+#include <interfaces/utility.h>
+
+
+struct ExpatBase {
+ struct Library libNode;
+ uint16 pad;
+ BPTR SegList;
+ struct ExecIFace *IExec;
+};
+
+#endif
diff --git a/amiga/expat_lib.c b/amiga/expat_lib.c
index e86ff19..70e91b1 100755
--- a/amiga/expat_lib.c
+++ b/amiga/expat_lib.c
@@ -21,24 +21,30 @@
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#ifdef __USE_INLINE__
+#undef __USE_INLINE__
+#endif
+
+#define __NOLIBBASE__
+#define __NOGLOBALIFACE__
+
#include <dos/dos.h>
#include <proto/exec.h>
+#include "expat_base.h"
+
+
#define LIBNAME "expat.library"
#define LIBPRI 0
-#define VERSION 5
-#define REVISION 2
-#define VSTRING "expat.library 5.2 (9.2.2009)" /* dd.mm.yyyy */
+#define VERSION 53
+#define REVISION 1
+#define VSTRING "expat.library 53.1 (7.8.2009)" /* dd.mm.yyyy */
static const char* __attribute__((used)) verstag = "\0$VER: " VSTRING;
-struct ExpatBase {
- struct Library libNode;
- uint16 pad;
- BPTR SegList;
-};
+struct Interface *INewlib = 0;
struct ExpatBase * libInit(struct ExpatBase *libBase, BPTR seglist, struct ExecIFace *ISys);
@@ -47,6 +53,8 @@ uint32 libRelease (struct LibraryManagerInterface *Self);
struct ExpatBase *libOpen (struct LibraryManagerInterface *Self, uint32 version);
BPTR libClose (struct LibraryManagerInterface *Self);
BPTR libExpunge (struct LibraryManagerInterface *Self);
+struct Interface *openInterface(struct ExecIFace *IExec, CONST_STRPTR libName, uint32 libVer);
+void closeInterface(struct ExecIFace *IExec, struct Interface *iface);
static APTR lib_manager_vectors[] = {
@@ -112,20 +120,13 @@ static struct Resident __attribute__((used)) lib_res = {
};
-struct Library *DOSLib = 0;
-struct Library *UtilityBase = 0;
-
-struct ExecIFace *IExec = 0;
-struct DOSIFace *IDOS = 0;
-struct UtilityIFace *IUtility = 0;
-
-
-void _start()
+int32 _start()
{
+ return RETURN_FAIL;
}
-struct ExpatBase *libInit(struct ExpatBase *libBase, BPTR seglist, struct ExecIFace *ISys)
+struct ExpatBase *libInit(struct ExpatBase *libBase, BPTR seglist, struct ExecIFace *iexec)
{
libBase->libNode.lib_Node.ln_Type = NT_LIBRARY;
libBase->libNode.lib_Node.ln_Pri = LIBPRI;
@@ -134,29 +135,20 @@ struct ExpatBase *libInit(struct ExpatBase *libBase, BPTR seglist, struct ExecIF
libBase->libNode.lib_Version = VERSION;
libBase->libNode.lib_Revision = REVISION;
libBase->libNode.lib_IdString = VSTRING;
+
libBase->SegList = seglist;
- IExec = ISys;
+ libBase->IExec = iexec;
+ INewlib = openInterface(iexec, "newlib.library", 0);
- DOSLib = OpenLibrary("dos.library", 51);
- if ( DOSLib != 0 ) {
- IDOS = (struct DOSIFace *)GetInterface(DOSLib, "main", 1, NULL);
- if ( IDOS != 0 ) {
- UtilityBase = OpenLibrary("utility.library", 51);
- if ( UtilityBase != 0 ) {
- IUtility = (struct UtilityIFace*)GetInterface(UtilityBase, "main", 1, NULL);
- if ( IUtility != 0 ) {
- return libBase;
- }
+ if ( INewlib != 0 ) {
+ return libBase;
+ }
- CloseLibrary(UtilityBase);
- }
+ closeInterface(iexec, INewlib);
+ INewlib = 0;
- DropInterface((struct Interface *)IDOS);
- }
-
- CloseLibrary(DOSLib);
- }
+ iexec->DeleteLibrary(&libBase->libNode);
return NULL;
}
@@ -204,29 +196,25 @@ BPTR libClose( struct LibraryManagerInterface *Self )
return (BPTR)Self->LibExpunge();
}
else {
- return 0;
+ return ZERO;
}
}
BPTR libExpunge( struct LibraryManagerInterface *Self )
{
- struct ExpatBase *libBase;
- BPTR result = 0;
-
- libBase = (struct ExpatBase *)Self->Data.LibBase;
+ struct ExpatBase *libBase = (struct ExpatBase *)Self->Data.LibBase;
+ BPTR result = ZERO;
if (libBase->libNode.lib_OpenCnt == 0) {
- Remove(&libBase->libNode.lib_Node);
+ libBase->IExec->Remove(&libBase->libNode.lib_Node);
result = libBase->SegList;
- DropInterface((struct Interface *)IUtility);
- CloseLibrary(UtilityBase);
- DropInterface((struct Interface *)IDOS);
- CloseLibrary(DOSLib);
+ closeInterface(libBase->IExec, INewlib);
+ INewlib = 0;
- DeleteLibrary(&libBase->libNode);
+ libBase->IExec->DeleteLibrary(&libBase->libNode);
}
else {
libBase->libNode.lib_Flags |= LIBF_DELEXP;
@@ -234,3 +222,26 @@ BPTR libExpunge( struct LibraryManagerInterface *Self )
return result;
}
+
+
+struct Interface *openInterface(struct ExecIFace *IExec, CONST_STRPTR libName, uint32 libVer)
+{
+ struct Library *base = IExec->OpenLibrary(libName, libVer);
+ struct Interface *iface = IExec->GetInterface(base, "main", 1, 0);
+ if (iface == 0) {
+ IExec->CloseLibrary(base);
+ }
+
+ return iface;
+}
+
+
+void closeInterface(struct ExecIFace *IExec, struct Interface *iface)
+{
+ if (iface != 0)
+ {
+ struct Library *base = iface->Data.LibBase;
+ IExec->DropInterface(iface);
+ IExec->CloseLibrary(base);
+ }
+}
diff --git a/amiga/launch.c b/amiga/launch.c
index 93b474a..20b069c 100755
--- a/amiga/launch.c
+++ b/amiga/launch.c
@@ -21,6 +21,10 @@
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#ifdef __USE_INLINE__
+#undef __USE_INLINE__
+#endif
+
#include <stdlib.h>
#include <proto/exec.h>
@@ -34,20 +38,20 @@ void cleanup() __attribute__((destructor));
void setup()
{
- ExpatBase = OpenLibrary("expat.library", 5);
- IExpat = (struct ExpatIFace*)GetInterface(ExpatBase, "main", 1, NULL);
+ ExpatBase = IExec->OpenLibrary("expat.library", 53);
+ IExpat = (struct ExpatIFace*)IExec->GetInterface(ExpatBase, "main", 1, NULL);
if ( IExpat == 0 ) {
- DebugPrintF("Can't open expat.library\n");
+ IExec->DebugPrintF("Can't open expat.library\n");
}
}
void cleanup()
{
- DropInterface((struct Interface*)IExpat);
+ IExec->DropInterface((struct Interface*)IExpat);
IExpat = 0;
- CloseLibrary(ExpatBase);
+ IExec->CloseLibrary(ExpatBase);
ExpatBase = 0;
}
diff --git a/amiga/stdlib.c b/amiga/stdlib.c
deleted file mode 100755
index 3d03a1c..0000000
--- a/amiga/stdlib.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-** Copyright (c) 2001-2009 Expat maintainers.
-**
-** Permission is hereby granted, free of charge, to any person obtaining
-** a copy of this software and associated documentation files (the
-** "Software"), to deal in the Software without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Software, and to
-** permit persons to whom the Software is furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be included
-** in all copies or substantial portions of the Software.
-**
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include <stdlib.h>
-#include <exec/memory.h>
-#include <proto/exec.h>
-#include <proto/utility.h>
-
-void * malloc (size_t len)
-{
- uint32 size = sizeof(uint32) + len;
-
- uint32 *mem = AllocMem(size, MEMF_SHARED);
- if ( mem != 0 ) {
- *mem = size;
- ++mem;
- }
-
- return mem;
-}
-
-
-void * realloc (void * mem, size_t len2)
-{
- if ( mem == 0 ) {
- return malloc(len2);
- }
-
- if ( len2 == 0 ) {
- free(mem);
- return 0;
- }
-
- void * new_mem = malloc(len2);
- if ( new_mem == 0 ) {
- return 0;
- }
-
- uint32 mem_size = *(((uint32*)mem) - 1);
- CopyMem(mem, new_mem, mem_size);
- free(mem);
-
- return new_mem;
-}
-
-
-void free (void * mem)
-{
- if ( mem != 0 ) {
- uint32 * size_ptr = ((uint32*)mem) - 1;
- FreeMem(size_ptr, *size_ptr);
- }
-}
-
-
-int memcmp (const void * a, const void * b, size_t len)
-{
- size_t i;
- int diff;
-
- for ( i = 0; i < len; ++i ) {
- diff = *((uint8 *)a++) - *((uint8 *)b++);
- if ( diff ) {
- return diff;
- }
- }
-
- return 0;
-}
-
-
-void * memcpy (void * t, const void * a, size_t len)
-{
- CopyMem((APTR)a, t, len);
- return t;
-}
-
-
-void * memmove (void * t1, const void * t2, size_t len)
-{
- MoveMem((APTR)t2, t1, len);
- return t1;
-}
-
-
-void * memset (void * t, int c, size_t len)
-{
- return SetMem(t, c, len);
-}