From e8282edd458d59aa20d48db57ec0025f0db34079 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Tue, 10 Oct 2000 23:01:31 +0000 Subject: [PATCH] More work toward 2.2.5, integrated a number of patches - configure.in Makefile.am win32config.h.in: trying to cleanup make distcheck .... huh ... - include/Makefile.am include/win32config.h: new directory for includes - win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp updated teh makefiles and instructions for WIN32 - xpath.c: small fixes - test/XPath/ results/XPath: updated the testcases and results - HTMLparser.c nanohttp.c testXPath.c: incorporated provided or suggested patches - valid.c: fixed an ID bug Daniel --- ChangeLog | 15 + HTMLparser.c | 3 +- Makefile.am | 31 +- configure.in | 26 +- include/Makefile.am | 28 ++ win32config.h.in => include/win32config.h | 4 - nanohttp.c | 96 +++++-- result/XPath/tests/chaptersbase | 72 ++--- result/XPath/tests/chaptersprefol | 72 ++--- result/XPath/tests/idsimple | 36 +-- result/XPath/tests/simpleabbr | 46 +-- result/XPath/tests/simplebase | 48 ++-- result/XPath/tests/usr1check | 14 +- test/XPath/docs/chapters | 10 +- test/XPath/tests/chaptersprefol | 9 +- testXPath.c | 12 +- valid.c | 4 +- win32/Makefile.mingw | 95 ++++++ win32/README.MSDev | 35 +-- win32/libxml2/libxml2.dsp | 335 +++++++++++----------- 20 files changed, 571 insertions(+), 420 deletions(-) create mode 100644 include/Makefile.am rename win32config.h.in => include/win32config.h (96%) create mode 100644 win32/Makefile.mingw diff --git a/ChangeLog b/ChangeLog index b0b1fbeb..bac9e398 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard + + * More work toward 2.2.5, integrated a number of patches + * configure.in Makefile.am win32config.h.in: trying to cleanup + make distcheck .... huh ... + * include/Makefile.am include/win32config.h: new directory + for includes + * win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp + updated teh makefiles and instructions for WIN32 + * xpath.c: small fixes + * test/XPath/ results/XPath: updated the testcases and results + * HTMLparser.c nanohttp.c testXPath.c: incorporated provided or + suggested patches + * valid.c: fixed an ID bug + Mon Oct 9 14:28:56 CEST 2000 Daniel Veillard * moved xml-error.h to xmlerror.h: seems this allowed to bypass diff --git a/HTMLparser.c b/HTMLparser.c index 9de8bdc3..40a15a46 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -14,7 +14,6 @@ #include #ifdef LIBXML_HTML_ENABLED - #include #include #ifdef HAVE_CTYPE_H @@ -1786,7 +1785,7 @@ htmlParseHTMLName(htmlParserCtxtPtr ctxt) { while ((i < HTML_PARSER_BUFFER_SIZE) && ((IS_LETTER(CUR)) || (IS_DIGIT(CUR)) || - (CUR == ':') || (CUR == '_'))) { + (CUR == ':') || (CUR == '-') || (CUR == '_'))) { if ((CUR >= 'A') && (CUR <= 'Z')) loc[i] = CUR + 0x20; else loc[i] = CUR; i++; diff --git a/Makefile.am b/Makefile.am index 5c98db04..e0ae8607 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,8 +1,8 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = doc +SUBDIRS = include doc -INCLUDES = -I@srcdir@/include @Z_CFLAGS@ @CORBA_CFLAGS@ +INCLUDES = -I@srcdir@/include -I./include @Z_CFLAGS@ @CORBA_CFLAGS@ noinst_PROGRAMS=testSAX testHTML testXPath testURI @@ -35,29 +35,6 @@ libxml_la_SOURCES = \ nanohttp.c \ nanoftp.c -xmlincdir = $(includedir)/libxml - -xmlinc_HEADERS = \ - include/libxml/SAX.h \ - include/libxml/entities.h \ - include/libxml/encoding.h \ - include/libxml/parser.h \ - include/libxml/parserInternals.h \ - include/libxml/xmlerror.h \ - include/libxml/HTMLparser.h \ - include/libxml/HTMLtree.h \ - include/libxml/debugXML.h \ - include/libxml/tree.h \ - include/libxml/xpath.h \ - include/libxml/xmlIO.h \ - include/libxml/xmlmemory.h \ - include/libxml/nanohttp.h \ - include/libxml/nanoftp.h \ - include/libxml/uri.h \ - include/libxml/valid.h \ - include/libxml/xlink.h \ - include/libxml/xmlversion.h - DEPS = $(top_builddir)/libxml.la LDADDS = $(top_builddir)/libxml.la @Z_LIBS@ @M_LIBS@ @@ -357,8 +334,8 @@ confexecdir=$(libdir) confexec_DATA = xmlConf.sh EXTRA_DIST = xmlConf.sh.in libxml.spec.in libxml.spec libxml.m4 \ example/Makefile.am example/gjobread.c example/gjobs.xml \ - $(man_MANS) libxml-2.0.pc.in include/libxml/*.h.in \ - win32/README.MSDev win32/libxml2/libxml2.dsp + $(man_MANS) libxml-2.0.pc.in include/libxml/*.h xmlversion.h.in \ + win32/README.MSDev win32/Makefile.mingw win32/libxml2/libxml2.dsp pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libxml-2.0.pc diff --git a/configure.in b/configure.in index 22e98d97..df7bc37f 100644 --- a/configure.in +++ b/configure.in @@ -116,7 +116,7 @@ AC_CHECK_FUNC(isinf, , AC_CHECK_LIB(m, isinf, [M_LIBS="-lm"; AC_DEFINE(HAVE_ISINF)])) XML_LIBDIR='-L${libdir}' -XML_INCLUDEDIR='-I${srcdir}/include -I${includedir}/libxml -I${includedir}' +XML_INCLUDEDIR='-I${includedir}/libxml -I${includedir}' XML_LIBS="-lxml $Z_LIBS $M_LIBS $LIBS" dnl @@ -299,18 +299,26 @@ dnl create the libxml and include links needed to get dependencies right dnl if test ! -d $srcdir/include/libxml then - rm -f $srcdir/include + rm -rf $srcdir/include rm -f $srcdir/libxml - (cd $srcdir ; ln -s . include) - (cd $srcdir ; ln -s . libxml) + mkdir $srcdir/include + (cd $srcdir/include ; ln -s .. libxml) +fi +if test ! -e $srcdir/libxml +then + (cd $srcdir ; ln -s include/libxml libxml) fi if test ! -e include/libxml then - rm -f include - rm -f libxml - (ln -s $srcdir/include include) - (ln -s $srcdir/include/libxml libxml) + rm -rf include + mkdir include + (cd include ; ln -s ../libxml libxml) +fi +if test ! -e libxml +then + rm -rf libxml + ln -s $srcdir/include/libxml libxml fi -AC_OUTPUT(libxml.spec Makefile doc/Makefile example/Makefile include/libxml/xmlversion.h xml-config include/libxml/win32config.h libxml-2.0.pc) +AC_OUTPUT(libxml.spec Makefile include/Makefile doc/Makefile example/Makefile libxml/xmlversion.h xml-config libxml-2.0.pc) diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 00000000..eea4e9cb --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,28 @@ +## Process this file with automake to produce Makefile.in + +xmlincdir = $(includedir) + +xmlinc_HEADERS = \ + libxml/xmlversion.h.in \ + libxml/SAX.h \ + libxml/entities.h \ + libxml/encoding.h \ + libxml/parser.h \ + libxml/parserInternals.h \ + libxml/xmlerror.h \ + libxml/HTMLparser.h \ + libxml/HTMLtree.h \ + libxml/debugXML.h \ + libxml/tree.h \ + libxml/xpath.h \ + libxml/xmlIO.h \ + libxml/xmlmemory.h \ + libxml/nanohttp.h \ + libxml/nanoftp.h \ + libxml/uri.h \ + libxml/valid.h \ + libxml/xlink.h + +install-exec-hook: + $(mkinstalldirs) $(xmlincdir) $(xmlincdir)/libxml + diff --git a/win32config.h.in b/include/win32config.h similarity index 96% rename from win32config.h.in rename to include/win32config.h index 0bb3a4f0..f09c8409 100644 --- a/win32config.h.in +++ b/include/win32config.h @@ -4,10 +4,6 @@ #define HAVE_TIME_H #define HAVE_FCNTL_H -#define LIBXML_VERSION @LIBXML_VERSION_NUMBER@ -#define LIBXML_VERSION_STRING "@LIBXML_VERSION@" - - #include #ifdef INCLUDE_WINSOCK diff --git a/nanohttp.c b/nanohttp.c index 88db9fc3..df717cba 100644 --- a/nanohttp.c +++ b/nanohttp.c @@ -104,6 +104,27 @@ static int initialized = 0; static char *proxy = NULL; /* the proxy name if any */ static int proxyPort; /* the proxy port if any */ +/** + * A bit of portability macros and functions + */ +#ifdef _WINSOCKAPI_ + +WSADATA wsaData; + +#else + +#define closesocket(s) close(s) + +#endif + +int socket_errno(void) { +#ifdef _WINSOCKAPI_ + return(WSAGetLastError()); +#else + return(errno); +#endif +} + /** * xmlNanoHTTPInit: * @@ -118,6 +139,11 @@ xmlNanoHTTPInit(void) { if (initialized) return; +#ifdef _WINSOCKAPI_ + if (WSAStartup(0x0101, &wsaData) != 0) + WSACleanup(); +#endif + if (proxy == NULL) { proxyPort = 80; env = getenv("no_proxy"); @@ -149,6 +175,9 @@ xmlNanoHTTPCleanup(void) { if (proxy != NULL) xmlFree(proxy); initialized = 0; +#ifdef _WINSOCKAPI_ + WSACleanup(); +#endif return; } @@ -344,7 +373,7 @@ xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) { if (ctxt->contentType != NULL) xmlFree(ctxt->contentType); if (ctxt->location != NULL) xmlFree(ctxt->location); ctxt->state = XML_NANO_HTTP_NONE; - if (ctxt->fd >= 0) close(ctxt->fd); + if (ctxt->fd >= 0) closesocket(ctxt->fd); ctxt->fd = -1; xmlFree(ctxt); } @@ -359,7 +388,7 @@ xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) { static void xmlNanoHTTPSend(xmlNanoHTTPCtxtPtr ctxt) { if (ctxt->state & XML_NANO_HTTP_WRITE) - ctxt->last = write(ctxt->fd, ctxt->outptr, strlen(ctxt->outptr)); + ctxt->last = send(ctxt->fd, ctxt->outptr, strlen(ctxt->outptr), 0); } /** @@ -412,7 +441,7 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) { ctxt->content = ctxt->in + d_content; ctxt->inrptr = ctxt->in + d_inrptr; } - ctxt->last = read(ctxt->fd, ctxt->inptr, XML_NANO_HTTP_CHUNK); + ctxt->last = recv(ctxt->fd, ctxt->inptr, XML_NANO_HTTP_CHUNK, 0); if (ctxt->last > 0) { ctxt->inptr += ctxt->last; return(ctxt->last); @@ -420,17 +449,25 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) { if (ctxt->last == 0) { return(0); } -#ifdef EWOULDBLOCK - if ((ctxt->last == -1) && (errno != EWOULDBLOCK)) { - return(0); - } + if (ctxt->last == -1) { + switch (socket_errno()) { + case EINPROGRESS: + case EWOULDBLOCK: +#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK + case EAGAIN: #endif - tv.tv_sec=10; - tv.tv_usec=0; + break; + default: + return(0); + } + } + + tv.tv_sec = 10; + tv.tv_usec = 0; FD_ZERO(&rfd); FD_SET(ctxt->fd, &rfd); - if(select(ctxt->fd+1, &rfd, NULL, NULL, &tv)<1) + if (select(ctxt->fd+1, &rfd, NULL, NULL, &tv)<1) return(0); } return(0); @@ -450,10 +487,10 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) { static char * xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) { char buf[4096]; - char *bp=buf; + char *bp = buf; - while(bp - buf < 4095) { - if(ctxt->inrptr == ctxt->inptr) { + while (bp - buf < 4095) { + if (ctxt->inrptr == ctxt->inptr) { if (xmlNanoHTTPRecv(ctxt) == 0) { if (bp == buf) return(NULL); @@ -463,11 +500,11 @@ xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) { } } *bp = *ctxt->inrptr++; - if(*bp == '\n') { + if (*bp == '\n') { *bp = 0; return(xmlMemStrdup(buf)); } - if(*bp != '\r') + if (*bp != '\r') bp++; } buf[4095] = 0; @@ -567,7 +604,7 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) struct timeval tv; int status; - if(s==-1) { + if (s==-1) { #ifdef DEBUG_HTTP perror("socket"); #endif @@ -576,9 +613,6 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) #ifdef _WINSOCKAPI_ { - long levents = FD_READ | FD_WRITE | FD_ACCEPT | - FD_CONNECT | FD_CLOSE ; - int rv = 0 ; u_long one = 1; status = ioctlsocket(s, FIONBIO, &one) == SOCKET_ERROR ? -1 : 0; @@ -590,7 +624,7 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) status = IOCTL(s, FIONBIO, &enable); } #else /* VMS */ - if((status = fcntl(s, F_GETFL, 0)) != -1) { + if ((status = fcntl(s, F_GETFL, 0)) != -1) { #ifdef O_NONBLOCK status |= O_NONBLOCK; #else /* O_NONBLOCK */ @@ -600,11 +634,11 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) #endif /* !O_NONBLOCK */ status = fcntl(s, F_SETFL, status); } - if(status < 0) { + if (status < 0) { #ifdef DEBUG_HTTP perror("nonblocking"); #endif - close(s); + closesocket(s); return(-1); } #endif /* !VMS */ @@ -615,10 +649,10 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) sin.sin_addr = ia; sin.sin_port = htons(port); - if((connect(s, (struct sockaddr *)&sin, sizeof(sin))==-1) && - (errno != EINPROGRESS)) { + if ((connect(s, (struct sockaddr *)&sin, sizeof(sin))==-1) && + (socket_errno() != EINPROGRESS) && (socket_errno() != EWOULDBLOCK)) { perror("connect"); - close(s); + closesocket(s); return(-1); } @@ -632,14 +666,14 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) { case 0: /* Time out */ - close(s); + closesocket(s); return(-1); case -1: /* Ermm.. ?? */ #ifdef DEBUG_HTTP perror("select"); #endif - close(s); + closesocket(s); return(-1); } @@ -655,7 +689,7 @@ xmlNanoHTTPConnectAttempt(struct in_addr ia, int port) return (-1); } if ( status ) { - close (s); + closesocket(s); errno = status; return (-1); } @@ -686,7 +720,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) int s; h=gethostbyname(host); - if(h==NULL) + if (h==NULL) { #ifdef DEBUG_HTTP fprintf(stderr,"unable to resolve '%s'.\n", host); @@ -699,7 +733,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) struct in_addr ia; memcpy(&ia, h->h_addr_list[i],4); s = xmlNanoHTTPConnectAttempt(ia, port); - if(s != -1) + if (s != -1) return(s); } @@ -839,7 +873,7 @@ retry: } xmlNanoHTTPFreeCtxt(ctxt); #ifdef DEBUG_HTTP - printf("Too many redirrects, aborting ...\n"); + printf("Too many redirects, aborting ...\n"); #endif return(NULL); diff --git a/result/XPath/tests/chaptersbase b/result/XPath/tests/chaptersbase index 4b5b9cc6..b004efe3 100644 --- a/result/XPath/tests/chaptersbase +++ b/result/XPath/tests/chaptersbase @@ -3,79 +3,79 @@ Expression: /child::EXAMPLE Object is a Node Set : Set contains 1 nodes: -1 ELEMENT EXAMPLE - ATTRIBUTE prop1 - TEXT - content=gnome is great - ATTRIBUTE prop2 - TEXT - content=& linux too +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too ======================== Expression: /child::* Object is a Node Set : Set contains 1 nodes: -1 ELEMENT EXAMPLE - ATTRIBUTE prop1 - TEXT - content=gnome is great - ATTRIBUTE prop2 - TEXT - content=& linux too +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too ======================== Expression: /child::EXAMPLE/child::head Object is a Node Set : Set contains 1 nodes: -1 ELEMENT head +1 ELEMENT head ======================== Expression: /child::EXAMPLE/child::* Object is a Node Set : Set contains 6 nodes: -1 ELEMENT head -2 ELEMENT chapter -3 ELEMENT chapter -4 ELEMENT chapter -5 ELEMENT chapter -6 ELEMENT chapter +1 ELEMENT head +2 ELEMENT chapter +3 ELEMENT chapter +4 ELEMENT chapter +5 ELEMENT chapter +6 ELEMENT chapter ======================== Expression: /child::EXAMPLE/child::head/child::title Object is a Node Set : Set contains 1 nodes: -1 ELEMENT title +1 ELEMENT title ======================== Expression: /child::EXAMPLE/child::head/child::title/child::text() Object is a Node Set : Set contains 1 nodes: -1 TEXT - content=Welcome to Gnome +1 TEXT + content=Welcome to Gnome ======================== Expression: /child::EXAMPLE/child::head/node() Object is a Node Set : Set contains 1 nodes: -1 ELEMENT title +1 ELEMENT title ======================== Expression: /descendant::title Object is a Node Set : Set contains 6 nodes: -1 ELEMENT title -2 ELEMENT title -3 ELEMENT title -4 ELEMENT title -5 ELEMENT title -6 ELEMENT title +1 ELEMENT title +2 ELEMENT title +3 ELEMENT title +4 ELEMENT title +5 ELEMENT title +6 ELEMENT title ======================== Expression: /descendant::p/ancestor::chapter Object is a Node Set : Set contains 5 nodes: -1 ELEMENT chapter -2 ELEMENT chapter -3 ELEMENT chapter -4 ELEMENT chapter -5 ELEMENT chapter +1 ELEMENT chapter +2 ELEMENT chapter +3 ELEMENT chapter +4 ELEMENT chapter +5 ELEMENT chapter diff --git a/result/XPath/tests/chaptersprefol b/result/XPath/tests/chaptersprefol index 5c33f2dd..930bb7ab 100644 --- a/result/XPath/tests/chaptersprefol +++ b/result/XPath/tests/chaptersprefol @@ -23,54 +23,54 @@ Set contains 0 nodes: Expression: /child::EXAMPLE/child::chapter[3]/preceding::* Object is a Node Set : Set contains 10 nodes: -1 ELEMENT p -2 ELEMENT title -3 ELEMENT chapter -4 ELEMENT p -5 ELEMENT image - ATTRIBUTE href - TEXT - content=linus.gif -6 ELEMENT p -7 ELEMENT title -8 ELEMENT chapter -9 ELEMENT title -10 ELEMENT head +1 ELEMENT p +2 ELEMENT title +3 ELEMENT chapter +4 ELEMENT p +5 ELEMENT image + ATTRIBUTE href + TEXT + content=linus.gif +6 ELEMENT p +7 ELEMENT title +8 ELEMENT chapter +9 ELEMENT title +10 ELEMENT head ======================== Expression: /child::EXAMPLE/child::chapter[3]/following::* Object is a Node Set : Set contains 6 nodes: -1 ELEMENT chapter -2 ELEMENT title -3 ELEMENT p -4 ELEMENT chapter -5 ELEMENT title -6 ELEMENT p +1 ELEMENT chapter +2 ELEMENT title +3 ELEMENT p +4 ELEMENT chapter +5 ELEMENT title +6 ELEMENT p ======================== Expression: /child::EXAMPLE/child::chapter[1]/image/preceding::* Object is a Node Set : Set contains 4 nodes: -1 ELEMENT p -2 ELEMENT title -3 ELEMENT title -4 ELEMENT head +1 ELEMENT p +2 ELEMENT title +3 ELEMENT title +4 ELEMENT head ======================== Expression: /child::EXAMPLE/child::chapter[1]/image/following::* Object is a Node Set : Set contains 13 nodes: -1 ELEMENT p -2 ELEMENT chapter -3 ELEMENT title -4 ELEMENT p -5 ELEMENT chapter -6 ELEMENT title -7 ELEMENT p -8 ELEMENT chapter -9 ELEMENT title -10 ELEMENT p -11 ELEMENT chapter -12 ELEMENT title -13 ELEMENT p +1 ELEMENT p +2 ELEMENT chapter +3 ELEMENT title +4 ELEMENT p +5 ELEMENT chapter +6 ELEMENT title +7 ELEMENT p +8 ELEMENT chapter +9 ELEMENT title +10 ELEMENT p +11 ELEMENT chapter +12 ELEMENT title +13 ELEMENT p diff --git a/result/XPath/tests/idsimple b/result/XPath/tests/idsimple index 3d158413..891b52e5 100644 --- a/result/XPath/tests/idsimple +++ b/result/XPath/tests/idsimple @@ -3,31 +3,31 @@ Expression: //*[@id="root"] Object is a Node Set : Set contains 1 nodes: -1 ELEMENT EXAMPLE - ATTRIBUTE id - TEXT - content=root - ATTRIBUTE prop1 - TEXT - content=gnome is great - ATTRIBUTE prop2 - TEXT - content=& linux too +1 ELEMENT EXAMPLE + ATTRIBUTE id + TEXT + content=root + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too ======================== Expression: //*[@id="chapter2"] Object is a Node Set : Set contains 1 nodes: -1 ELEMENT chapter - ATTRIBUTE id - TEXT - content=chapter2 +1 ELEMENT chapter + ATTRIBUTE id + TEXT + content=chapter2 ======================== Expression: //*[@id="chapter5"] Object is a Node Set : Set contains 1 nodes: -1 ELEMENT chapter - ATTRIBUTE id - TEXT - content=chapter5 +1 ELEMENT chapter + ATTRIBUTE id + TEXT + content=chapter5 diff --git a/result/XPath/tests/simpleabbr b/result/XPath/tests/simpleabbr index 188a719a..e8d5d97c 100644 --- a/result/XPath/tests/simpleabbr +++ b/result/XPath/tests/simpleabbr @@ -3,61 +3,61 @@ Expression: /EXAMPLE Object is a Node Set : Set contains 1 nodes: -1 ELEMENT EXAMPLE - ATTRIBUTE prop1 - TEXT - content=gnome is great - ATTRIBUTE prop2 - TEXT - content=& linux too +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too ======================== Expression: /EXAMPLE/head Object is a Node Set : Set contains 1 nodes: -1 ELEMENT head +1 ELEMENT head ======================== Expression: /EXAMPLE/chapter[1] Object is a Node Set : Set contains 1 nodes: -1 ELEMENT chapter +1 ELEMENT chapter ======================== Expression: //p Object is a Node Set : Set contains 2 nodes: -1 ELEMENT p -2 ELEMENT p +1 ELEMENT p +2 ELEMENT p ======================== Expression: //chapter/image Object is a Node Set : Set contains 1 nodes: -1 ELEMENT image - ATTRIBUTE href - TEXT - content=linus.gif +1 ELEMENT image + ATTRIBUTE href + TEXT + content=linus.gif ======================== Expression: //p/text() Object is a Node Set : Set contains 2 nodes: -1 TEXT - content=bla bla bla ... -2 TEXT - content=... +1 TEXT + content=bla bla bla ... +2 TEXT + content=... ======================== Expression: //p/text()[position()=1] Object is a Node Set : Set contains 1 nodes: -1 TEXT - content=bla bla bla ... +1 TEXT + content=bla bla bla ... ======================== Expression: //p/text()[position()=last()] Object is a Node Set : Set contains 1 nodes: -1 TEXT - content=... +1 TEXT + content=... diff --git a/result/XPath/tests/simplebase b/result/XPath/tests/simplebase index 2e9687c8..2ee65cb1 100644 --- a/result/XPath/tests/simplebase +++ b/result/XPath/tests/simplebase @@ -3,67 +3,67 @@ Expression: /child::* Object is a Node Set : Set contains 1 nodes: -1 ELEMENT EXAMPLE - ATTRIBUTE prop1 - TEXT - content=gnome is great - ATTRIBUTE prop2 - TEXT - content=& linux too +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too ======================== Expression: /child::EXAMPLE Object is a Node Set : Set contains 1 nodes: -1 ELEMENT EXAMPLE - ATTRIBUTE prop1 - TEXT - content=gnome is great - ATTRIBUTE prop2 - TEXT - content=& linux too +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too ======================== Expression: /child::EXAMPLE/child::head Object is a Node Set : Set contains 1 nodes: -1 ELEMENT head +1 ELEMENT head ======================== Expression: /child::EXAMPLE/child::* Object is a Node Set : Set contains 2 nodes: -1 ELEMENT head -2 ELEMENT chapter +1 ELEMENT head +2 ELEMENT chapter ======================== Expression: /child::EXAMPLE/child::head/child::title Object is a Node Set : Set contains 1 nodes: -1 ELEMENT title +1 ELEMENT title ======================== Expression: /child::EXAMPLE/child::head/child::title/child::text() Object is a Node Set : Set contains 1 nodes: -1 TEXT - content=Welcome to Gnome +1 TEXT + content=Welcome to Gnome ======================== Expression: /child::EXAMPLE/child::head/node() Object is a Node Set : Set contains 1 nodes: -1 ELEMENT title +1 ELEMENT title ======================== Expression: /descendant::title Object is a Node Set : Set contains 2 nodes: -1 ELEMENT title -2 ELEMENT title +1 ELEMENT title +2 ELEMENT title ======================== Expression: /descendant::p/ancestor::chapter Object is a Node Set : Set contains 1 nodes: -1 ELEMENT chapter +1 ELEMENT chapter diff --git a/result/XPath/tests/usr1check b/result/XPath/tests/usr1check index f1f2faae..03089916 100644 --- a/result/XPath/tests/usr1check +++ b/result/XPath/tests/usr1check @@ -3,10 +3,10 @@ Expression: //ITEM[1] Object is a Node Set : Set contains 1 nodes: -1 ELEMENT ITEM - ATTRIBUTE monto - TEXT - content=50.12 - ATTRIBUTE divisa - TEXT - content=DOL +1 ELEMENT ITEM + ATTRIBUTE monto + TEXT + content=50.12 + ATTRIBUTE divisa + TEXT + content=DOL diff --git a/test/XPath/docs/chapters b/test/XPath/docs/chapters index bf402d15..c48f65e5 100644 --- a/test/XPath/docs/chapters +++ b/test/XPath/docs/chapters @@ -3,25 +3,25 @@ Welcome to Gnome - + The Linux adventure

bla bla bla ...

...

- + Chapter 2

this is chapter 2 ...

- + Chapter 3

this is chapter 3 ...

- + Chapter 4

this is chapter 4 ...

- + Chapter 5

this is chapter 5 ...

diff --git a/test/XPath/tests/chaptersprefol b/test/XPath/tests/chaptersprefol index e95995b8..8f1e65b6 100644 --- a/test/XPath/tests/chaptersprefol +++ b/test/XPath/tests/chaptersprefol @@ -1 +1,8 @@ -/following::* /preceding::* /child::EXAMPLE/preceding::* /child::EXAMPLE/following::* /child::EXAMPLE/child::chapter[3]/preceding::* /child::EXAMPLE/child::chapter[3]/following::* /child::EXAMPLE/child::chapter[1]/image/preceding::* /child::EXAMPLE/child::chapter[1]/image/following::* +/following::* +/preceding::* +/child::EXAMPLE/preceding::* +/child::EXAMPLE/following::* +/child::EXAMPLE/child::chapter[3]/preceding::* +/child::EXAMPLE/child::chapter[3]/following::* +/child::EXAMPLE/child::chapter[1]/image/preceding::* +/child::EXAMPLE/child::chapter[1]/image/following::* diff --git a/testXPath.c b/testXPath.c index 65fc5451..1133d4cf 100644 --- a/testXPath.c +++ b/testXPath.c @@ -150,7 +150,7 @@ void xmlXPAthDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth for (i = 0;i < cur->locNr;i++) { fprintf(output, shift); - fprintf(output, "%d :\n", i + 1); + fprintf(output, "%d : ", i + 1); xmlXPAthDebugDumpObject(output, cur->locTab[i], depth + 1); } } @@ -197,16 +197,18 @@ void xmlXPAthDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) { fprintf(output, "\n"); break; case XPATH_RANGE: - fprintf(output, "Object is a range : from "); + fprintf(output, "Object is a range :\n"); + fprintf(output, shift); + fprintf(output, "From "); if (cur->index >= 0) fprintf(output, "index %d in ", cur->index); - fprintf(output, "node"); + fprintf(output, "node\n"); xmlXPAthDebugDumpNode(output, (xmlNodePtr) cur->user, depth + 1); fprintf(output, shift); - fprintf(output, " to "); + fprintf(output, "To "); if (cur->index2 >= 0) fprintf(output, "index %d in ", cur->index2); - fprintf(output, "node"); + fprintf(output, "node\n"); xmlXPAthDebugDumpNode(output, (xmlNodePtr) cur->user2, depth + 1); fprintf(output, "\n"); break; diff --git a/valid.c b/valid.c index 4b2f6205..f5b40e23 100644 --- a/valid.c +++ b/valid.c @@ -1823,9 +1823,7 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) { if (doc == NULL) return(0); if (attr == NULL) return(0); if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) { - if (((attr->name[0] == 'I') || (attr->name[0] == 'i')) && - ((attr->name[1] == 'D') || (attr->name[1] == 'd')) && - (attr->name[2] == 0)) return(1); + return(0); } else if (doc->type == XML_HTML_DOCUMENT_NODE) { if ((xmlStrEqual(BAD_CAST "id", attr->name)) || (xmlStrEqual(BAD_CAST "name", attr->name))) diff --git a/win32/Makefile.mingw b/win32/Makefile.mingw new file mode 100644 index 00000000..11ff7bcd --- /dev/null +++ b/win32/Makefile.mingw @@ -0,0 +1,95 @@ +# This Makefile will allow you to build the static library, a DLL, the +# DLL-import library, and the test executables using the "mingw" gcc +# compiler environment. This Makefile is based on Alfred Reibenschuh's +# version for 2.1.1, and was modified by Wayne Davison. + +# Set "PREFIX" to the root of the mingw installed files. + +PREFIX = /mingw + +CC=gcc +CFLAGS=-O -Iinclude -I$(PREFIX)/include -D_WINSOCKAPI_ -fnative-struct +LDFLAGS=-L. -L$(PREFIX)/lib +LIBS=-lwsock32 -lz + +AR=ar rc +DLLTOOL=dlltool +DLLWRAP=dllwrap + +LIBSRCS=HTMLparser.c \ + HTMLtree.c \ + SAX.c \ + debugXML.c \ + encoding.c \ + entities.c \ + error.c \ + nanoftp.c \ + nanohttp.c \ + parser.c \ + parserInternals.c \ + tree.c \ + valid.c \ + xlink.c \ + xmlIO.c \ + xmlmemory.c \ + xpath.c \ + uri.c + +LIBOBJS=$(LIBSRCS:.c=.o) + +OBJS=$(LIBOBJS) + +LIBBASE=xml +LIB=lib$(LIBBASE).a +DLL=$(LIB:.a=.dll) + +OBJ1=testHTML.o +OBJ2=testSAX.o +OBJ3=testURI.o +EXE1=$(OBJ1:.o=.exe) +EXE2=$(OBJ2:.o=.exe) +EXE3=$(OBJ3:.o=.exe) + +IMPBASE=$(LIBBASE)_dll +IMP=lib$(IMPBASE).a + +DEF=$(DLL:.dll=.def) + +all: $(LIB) $(DLL) $(DEF) $(IMP) $(EXE1) $(EXE2) $(EXE3) + +dll: $(DLL) + +lib: $(LIB) + +$(DLL): $(LIB) $(DEF) $(IMP) + $(DLLWRAP) --def $(DEF) --dllname $@ --output-lib $@ $(LIB) $(LDFLAGS) $(LIBS) -mwindows + +$(LIB): $(LIBOBJS) + $(AR) $@ $^ + +$(DEF): $(LIBOBJS) + $(DLLTOOL) --kill-at --export-all -D $(DLL) --output-def $@ $^ + +$(IMP): $(DEF) + $(DLLTOOL) -d $< -l $@ -D $(DLL) + +$(EXE1): $(OBJ1) $(LIBOBJS) $(DLL) + $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS) + strip $@ + +$(EXE2): $(OBJ2) $(LIBOBJS) $(DLL) + $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(IMPBASE) $(LIBS) + strip $@ + +$(EXE3): $(OBJ3) $(LIBOBJS) $(LIB) + $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) -l$(LIBBASE) $(LIBS) + strip $@ + +.c.o: + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm *.o *.a *.dll *.def + +test: all + ./$(EXE1) -c $(OBJS) | xxd | head -3 diff --git a/win32/README.MSDev b/win32/README.MSDev index 47b8dd8c..411a6071 100644 --- a/win32/README.MSDev +++ b/win32/README.MSDev @@ -1,41 +1,30 @@ -The configuration stuff (i.e. what should be enabled/disabled) is in xmlversion.h -I only tested it compiled fine with the current settings +If you're creating libxml2 with the "mingw" compiler, just copy the +Makefile.mingw to the root directory as "Makefile", edit the PREFIX +value, and run "make". + +If you're using MSVC, here are some instructions for how you can +proceed: + +The configuration stuff (i.e. what should be enabled/disabled) is in +xmlversion.h I only tested it compiled fine with the current settings (that is nearly everything disabled, I didn't need many features) ---------------------------- -How did I get everything in place so the MSDev project works from the original archive? +How did I get everything in place so the MSDev project works from the +original archive? from the cygwin prompt (http://sources.redhat.com/cygwin) : $ ./configure --disable-corba --without-ftp --without-http --without-html --wit hout-xpath --without-iconv --without-debug -created a libxml directory and copied the following headers in: -HTMLparser.h entities.h tree.h xmlIO.h -HTMLtree.h nanoftp.h uri.h xmlmemory.h -SAX.h nanohttp.h valid.h xmlversion.h -debugXML.h parser.h xlink.h xpath.h -encoding.h parserInternals.h xml-error.h - -modified win32config.h to comment out -#define LIBXML_VERSION 20204 -#define LIBXML_VERSION_STRING "2.2.4" -(is already in xmlversion.h) - built the project file for the static library ---------------------------- diff after doing the changes and cleaning up the generated stuff: -Only in libxml2-2.2.4: MSDev -Common subdirectories: libxml2-2.2.4/SAXresult and libxml2-2.2.4-reference/SAXresult -Common subdirectories: libxml2-2.2.4/doc and libxml2-2.2.4-reference/doc -Common subdirectories: libxml2-2.2.4/example and libxml2-2.2.4-reference/example -Only in libxml2-2.2.4: libxml -Common subdirectories: libxml2-2.2.4/result and libxml2-2.2.4-reference/result -Common subdirectories: libxml2-2.2.4/test and libxml2-2.2.4-reference/test -Only in libxml2-2.2.4: win32config.h +[Note: this is out of date] diff libxml2-2.2.4/xmlversion.h libxml2-2.2.4-reference/xmlversion.h 38c38 < #if 0 diff --git a/win32/libxml2/libxml2.dsp b/win32/libxml2/libxml2.dsp index 286b250a..52c24fdc 100644 --- a/win32/libxml2/libxml2.dsp +++ b/win32/libxml2/libxml2.dsp @@ -1,166 +1,169 @@ -# Microsoft Developer Studio Project File - Name="libxml2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=libxml2 - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "libxml2.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "libxml2.mak" CFG="libxml2 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "libxml2 - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "libxml2 - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "libxml2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -F90=df.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "libxml2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -F90=df.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "libxml2 - Win32 Release" -# Name "libxml2 - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\debugXML.c -# End Source File -# Begin Source File - -SOURCE=..\..\encoding.c -# End Source File -# Begin Source File - -SOURCE=..\..\entities.c -# End Source File -# Begin Source File - -SOURCE=..\..\error.c -# End Source File -# Begin Source File - -SOURCE=..\..\HTMLparser.c -# End Source File -# Begin Source File - -SOURCE=..\..\HTMLtree.c -# End Source File -# Begin Source File - -SOURCE=..\..\nanoftp.c -# End Source File -# Begin Source File - -SOURCE=..\..\nanohttp.c -# End Source File -# Begin Source File - -SOURCE=..\..\parser.c -# End Source File -# Begin Source File - -SOURCE=..\..\parserInternals.c -# End Source File -# Begin Source File - -SOURCE=..\..\SAX.c -# End Source File -# Begin Source File - -SOURCE=..\..\tree.c -# End Source File -# Begin Source File - -SOURCE=..\..\uri.c -# End Source File -# Begin Source File - -SOURCE=..\..\valid.c -# End Source File -# Begin Source File - -SOURCE=..\..\xlink.c -# End Source File -# Begin Source File - -SOURCE=..\..\xmlIO.c -# End Source File -# Begin Source File - -SOURCE=..\..\xmlmemory.c -# End Source File -# Begin Source File - -SOURCE=..\..\xpath.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="libxml2" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=libxml2 - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libxml2.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libxml2.mak" CFG="libxml2 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libxml2 - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "libxml2 - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +F90=df.exe +RSC=rc.exe + +!IF "$(CFG)" == "libxml2 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE F90 /include:"Release/" +# ADD F90 /include:"Release/" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "libxml2 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE F90 /include:"Debug/" +# ADD F90 /include:"Debug/" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "libxml2 - Win32 Release" +# Name "libxml2 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\debugXML.c +# End Source File +# Begin Source File + +SOURCE=..\..\encoding.c +# End Source File +# Begin Source File + +SOURCE=..\..\entities.c +# End Source File +# Begin Source File + +SOURCE=..\..\error.c +# End Source File +# Begin Source File + +SOURCE=..\..\HTMLparser.c +# End Source File +# Begin Source File + +SOURCE=..\..\HTMLtree.c +# End Source File +# Begin Source File + +SOURCE=..\..\nanoftp.c +# End Source File +# Begin Source File + +SOURCE=..\..\nanohttp.c +# End Source File +# Begin Source File + +SOURCE=..\..\parser.c +# End Source File +# Begin Source File + +SOURCE=..\..\parserInternals.c +# End Source File +# Begin Source File + +SOURCE=..\..\SAX.c +# End Source File +# Begin Source File + +SOURCE=..\..\tree.c +# End Source File +# Begin Source File + +SOURCE=..\..\uri.c +# End Source File +# Begin Source File + +SOURCE=..\..\valid.c +# End Source File +# Begin Source File + +SOURCE=..\..\xlink.c +# End Source File +# Begin Source File + +SOURCE=..\..\xmlIO.c +# End Source File +# Begin Source File + +SOURCE=..\..\xmlmemory.c +# End Source File +# Begin Source File + +SOURCE=..\..\xpath.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project