Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 87502 invoked from network); 8 Sep 2006 09:34:09 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 8 Sep 2006 09:34:09 -0000 Received: (qmail 49850 invoked by uid 500); 8 Sep 2006 09:34:07 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 49756 invoked by uid 500); 8 Sep 2006 09:34:06 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 49745 invoked by uid 500); 8 Sep 2006 09:34:06 -0000 Delivered-To: apmail-ws-axis2-cvs@ws.apache.org Received: (qmail 49742 invoked by uid 99); 8 Sep 2006 09:34:06 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Sep 2006 02:34:06 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Sep 2006 02:34:04 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id EA3101A981A; Fri, 8 Sep 2006 02:33:43 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r441454 - in /webservices/axis2/trunk/c/guththila: ./ include/ samples/ src/ Date: Fri, 08 Sep 2006 09:33:43 -0000 To: axis2-cvs@ws.apache.org From: dinesh@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20060908093343.EA3101A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: dinesh Date: Fri Sep 8 02:33:42 2006 New Revision: 441454 URL: http://svn.apache.org/viewvc?view=rev&rev=441454 Log: reader and writer modified to deal with memory buffer, memory reader and writer is added Modified: webservices/axis2/trunk/c/guththila/Makefile.am webservices/axis2/trunk/c/guththila/configure.ac webservices/axis2/trunk/c/guththila/include/guththila_buffer.h webservices/axis2/trunk/c/guththila/include/guththila_error.h webservices/axis2/trunk/c/guththila/include/guththila_reader.h webservices/axis2/trunk/c/guththila/include/guththila_writer.h webservices/axis2/trunk/c/guththila/include/guththila_xml_pull_parser.h webservices/axis2/trunk/c/guththila/samples/guththila_main.c webservices/axis2/trunk/c/guththila/samples/guththila_writer_main.c webservices/axis2/trunk/c/guththila/src/Makefile.am webservices/axis2/trunk/c/guththila/src/guththila_buffer.c webservices/axis2/trunk/c/guththila/src/guththila_reader.c webservices/axis2/trunk/c/guththila/src/guththila_writer.c webservices/axis2/trunk/c/guththila/src/guththila_xml_pull_parser.c webservices/axis2/trunk/c/guththila/src/guththila_xml_writer.c Modified: webservices/axis2/trunk/c/guththila/Makefile.am URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/Makefile.am?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/Makefile.am (original) +++ webservices/axis2/trunk/c/guththila/Makefile.am Fri Sep 8 02:33:42 2006 @@ -1,6 +1,6 @@ #datadir=$(prefix) SUBDIRS = src -#include_HEADERS=$(top_builddir)/include/*.h +include_HEADERS=$(top_builddir)/include/*.h data_DATA= INSTALL README AUTHORS NEWS LICENSE COPYING #EXTRA_DIST = build.sh autogen.sh CREDITS LICENSE dist-hook: Modified: webservices/axis2/trunk/c/guththila/configure.ac URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/configure.ac?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/configure.ac (original) +++ webservices/axis2/trunk/c/guththila/configure.ac Fri Sep 8 02:33:42 2006 @@ -22,7 +22,7 @@ CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE" if test "$GCC" = "yes"; then - CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration" + CFLAGS="$CFLAGS -ansi -ggdb3 -Wall -Wno-implicit-function-declaration -Werror" fi LDFLAGS="-lpthread" Modified: webservices/axis2/trunk/c/guththila/include/guththila_buffer.h URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/include/guththila_buffer.h?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/include/guththila_buffer.h (original) +++ webservices/axis2/trunk/c/guththila/include/guththila_buffer.h Fri Sep 8 02:33:42 2006 @@ -27,16 +27,20 @@ typedef struct guththila_buffer_s { - int size; - int next; - int last; - int offset; - guththila_char_t *buff; + int size; + int next; + int last; + int offset; + int is_memory; + guththila_char_t *buff; } guththila_buffer_t; AXIS2_EXTERN guththila_buffer_t * guththila_buffer_create (axis2_env_t * environment, int size); + +AXIS2_EXTERN guththila_buffer_t * +guththila_buffer_create_for_buffer (axis2_env_t * environment, char *buffer, int size); AXIS2_EXTERN void guththila_buffer_free (axis2_env_t * environment, Modified: webservices/axis2/trunk/c/guththila/include/guththila_error.h URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/include/guththila_error.h?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/include/guththila_error.h (original) +++ webservices/axis2/trunk/c/guththila/include/guththila_error.h Fri Sep 8 02:33:42 2006 @@ -91,7 +91,8 @@ GUTHTHILA_WRITER_ERROR_XML_STRING_IN_NAME, GUTHTHILA_WRITER_ERROR_EXCESS_HYPENS_IN_COMMENT, GUTHTHILA_WRITER_ERROR_INVALID_CHAR_IN_ATTRIBUTE, - GUTHTHILA_WRITER_ERROR_NON_EXSISTING_URI + GUTHTHILA_WRITER_ERROR_NON_EXSISTING_URI, + GUTHTHILA_WRITER_ERROR_SAME_ATTRIBUTE_REPEAT } guththila_error_codes_t; Modified: webservices/axis2/trunk/c/guththila/include/guththila_reader.h URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/include/guththila_reader.h?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/include/guththila_reader.h (original) +++ webservices/axis2/trunk/c/guththila/include/guththila_reader.h Fri Sep 8 02:33:42 2006 @@ -22,8 +22,8 @@ #include #include +#include #include "guththila_buffer.h" -/* #include "guththila_environment.h" */ #include "guththila_defines.h" #include #include "guththila_error.h" @@ -31,7 +31,8 @@ typedef enum guththila_reader_types { GUTHTHILA_FILE_READER = 1, - GUTHTHILA_IN_MEMORY_READER + GUTHTHILA_IO_READER, + GUTHTHILA_MEMORY_READER } guththila_reader_types_t; typedef struct guththila_reader_s @@ -41,15 +42,32 @@ } guththila_reader_t; + +typedef struct guththila_reader_impl_t +{ + guththila_reader_t reader; + int buffer_size; + FILE *fp; + char *buffer; + int (*input_read_callback)(char *buffer,int size, void *ctx); + void* context; +}guththila_reader_impl_t; + + AXIS2_EXTERN guththila_reader_t * guththila_reader_create_for_file (axis2_env_t * environment, char* filename); AXIS2_EXTERN guththila_reader_t * -guththila_reader_create_for_memory(axis2_env_t *environment, +guththila_reader_create_for_io(axis2_env_t *environment, int (*input_read_callback) (char *buffer,int size,void* ctx),void *ctx); - + +AXIS2_EXTERN guththila_reader_t * +guththila_reader_create_for_memory(axis2_env_t *environment, + void *buffer, + int size, + void *ctx); AXIS2_EXTERN int guththila_reader_read (axis2_env_t * environment, guththila_char_t * buffer, int offset, int length, Modified: webservices/axis2/trunk/c/guththila/include/guththila_writer.h URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/include/guththila_writer.h?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/include/guththila_writer.h (original) +++ webservices/axis2/trunk/c/guththila/include/guththila_writer.h Fri Sep 8 02:33:42 2006 @@ -20,6 +20,7 @@ #define GUTHTHILA_WRITER_H #include #include +#include #include "guththila_buffer.h" #include #include "guththila_defines.h" @@ -27,8 +28,8 @@ typedef enum guththila_writer_types { - GUTHTHILA_WRITER_CREATE_FOR_FILE = 1, - GUTHTHILA_WRITER_CREATE_FOR_MEMORY + GUTHTHILA_WRITER_FILE = 1, + GUTHTHILA_WRITER_MEMORY }guththila_writer_types_t; typedef struct guththila_writer_s @@ -40,24 +41,30 @@ { guththila_writer_t writer; FILE *outputstream; + guththila_buffer_t *buffer; }guththila_writer_impl_t; AXIS2_EXTERN guththila_writer_t* AXIS2_CALL guththila_writer_create_for_file(axis2_env_t *env, char *fp); +AXIS2_EXTERN guththila_writer_t* AXIS2_CALL +guththila_writer_create_for_memory (axis2_env_t *env); + AXIS2_EXTERN int AXIS2_CALL guththila_writer_write(axis2_env_t *env, - char *buffer, - int offset, - int length, - guththila_writer_t *wt); + char *buffer, + int offset, + int length, + guththila_writer_t *wt); AXIS2_EXTERN void -guththila_writer_free -(axis2_env_t *env, - guththila_writer_t *wt); +guththila_writer_free (axis2_env_t *env, + guththila_writer_t *wt); +AXIS2_EXTERN char * +guththila_writer_get_buffer (axis2_env_t *env, + guththila_writer_t *wt); #endif /* GUTHTHILA_WRITE_H */ Modified: webservices/axis2/trunk/c/guththila/include/guththila_xml_pull_parser.h URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/include/guththila_xml_pull_parser.h?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/include/guththila_xml_pull_parser.h (original) +++ webservices/axis2/trunk/c/guththila/include/guththila_xml_pull_parser.h Fri Sep 8 02:33:42 2006 @@ -89,6 +89,7 @@ int offset; int last; int unicode_state; + int reader_type; enum guththila_status status; enum guththila_event_types guththila_event; } guththila_xml_pull_parser_t; @@ -204,8 +205,8 @@ int c); -int AXIS2_CALL -guththila_xml_pull_parser_is_space (axis2_env_t *environment, int c); +/* int AXIS2_CALL */ +/* guththila_xml_pull_parser_is_space (axis2_env_t *environment, int c); */ void AXIS2_CALL @@ -365,6 +366,9 @@ guththila_xml_pull_parser_t *p, char *fp); +AXIS2_EXTERN void AXIS2_CALL +guththila_xml_pull_parser_create_xml_stream_writer_for_memory (axis2_env_t *environment, + guththila_xml_pull_parser_t *p); AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_to_buffer (axis2_env_t *env, @@ -609,6 +613,10 @@ guththila_xml_pull_parser_t *p, char *element_name, char *characters); + +AXIS2_EXTERN char * AXIS2_CALL +guththila_xml_pull_parser_get_memory_buffer (axis2_env_t *environemnt, + guththila_xml_pull_parser_t *p); AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_xml_writer_free (axis2_env_t *environment, Modified: webservices/axis2/trunk/c/guththila/samples/guththila_main.c URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/samples/guththila_main.c?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/samples/guththila_main.c (original) +++ webservices/axis2/trunk/c/guththila/samples/guththila_main.c Fri Sep 8 02:33:42 2006 @@ -19,7 +19,7 @@ #include "guththila_xml_pull_parser.h" #include "guththila_defines.h" -/* #include "guththila_environment.h" */ +#include "buffer.h" int main (int argc, char *argv[]) @@ -32,7 +32,19 @@ allocator = axis2_allocator_init (NULL); environment = axis2_env_create (allocator); - red = guththila_reader_create_for_file (environment, argv[1]); + + if (argc > 1) + red = guththila_reader_create_for_file (environment, argv[1]); + else + { + if (xml_buffer) + { + int size = 0; + size = strlen (xml_buffer); + red = guththila_reader_create_for_memory (environment, (void *)xml_buffer, size, NULL); + } + } + parser = guththila_xml_pull_parser_create (environment, red); guththila_xml_pull_parser_read (environment, parser); @@ -62,7 +74,7 @@ printf ("%s\" ", p); AXIS2_FREE (allocator, p); } - printf ("?>"); + printf ("?>\n"); } break; case GUTHTHILA_START_ELEMENT: @@ -74,7 +86,6 @@ guththila_depth_t *depth; printf ("<"); - /* printf ("\n %s \n", guththila_xml_pull_parser_get_encoding (environment, parser)); */ p = guththila_xml_pull_parser_get_prefix (environment, parser); if (p) @@ -138,7 +149,6 @@ { char *p; printf (" #include #include +#include #include int main () { axis2_allocator_t *allocator = axis2_allocator_init (NULL); axis2_env_t *env = axis2_env_create (allocator); guththila_xml_pull_parser_t *parser = guththila_xml_pull_parser_create (env, NULL); - guththila_xml_pull_parser_create_xml_stream_writer (env, parser, "w.xml"); + guththila_writer_t *writer = guththila_writer_create_for_memory (env); +/* int c = 0; */ +/* c = guththila_writer_write (env, "test", 0, 5, writer); */ +/* char *file = ""; */ + +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* guththila_writer_write (env, file, 0, strlen (file), writer); */ +/* char *t = guththila_writer_get_buffer (env, writer); */ +/* printf ("print \t %s \n", t); */ + guththila_xml_pull_parser_create_xml_stream_writer_for_memory (env, parser); guththila_xml_pull_parser_write_start_document (env, parser); guththila_xml_pull_parser_write_start_element (env, parser, "person"); guththila_xml_pull_parser_write_start_element (env, parser, "name"); @@ -25,6 +40,8 @@ guththila_xml_pull_parser_write_start_element_with_prefix (env, parser, "a", "two"); guththila_xml_pull_parser_write_characters (env, parser, "it works !"); guththila_xml_pull_parser_write_end_document (env, parser); + char *t = guththila_writer_get_buffer (env, parser->xsw->writer); + printf ("%s \n", t); guththila_xml_pull_parser_xml_writer_free (env, parser); guththila_xml_pull_parser_free (env, parser); axis2_allocator_free (allocator); Modified: webservices/axis2/trunk/c/guththila/src/Makefile.am URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/Makefile.am?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/src/Makefile.am (original) +++ webservices/axis2/trunk/c/guththila/src/Makefile.am Fri Sep 8 02:33:42 2006 @@ -1,14 +1,14 @@ -lib_LTLIBRARIES = libaxis2_guththila.la +lib_LTLIBRARIES = libguththila.la -libaxis2_guththila_la_SOURCES = guththila_buffer.c \ - guththila_token.c \ - guththila_writer.c \ - guththila_xml_pull_parser.c \ - guththila_reader.c \ - guththila_unicode.c \ - guththila_xml_writer.c +libguththila_la_SOURCES = guththila_buffer.c \ + guththila_token.c \ + guththila_reader.c \ + guththila_writer.c \ + guththila_xml_pull_parser.c \ + guththila_unicode.c \ + guththila_xml_writer.c -libaxis2_guththila_la_LIBADD = -laxis2_util +libguththila_la_LIBADD = -laxis2_util INCLUDES = -I$(top_builddir)/include \ @UTILINC@ Modified: webservices/axis2/trunk/c/guththila/src/guththila_buffer.c URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/guththila_buffer.c?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/src/guththila_buffer.c (original) +++ webservices/axis2/trunk/c/guththila/src/guththila_buffer.c Fri Sep 8 02:33:42 2006 @@ -18,25 +18,52 @@ /* #include "guththila_environment.h" */ +#include #include "guththila_buffer.h" #include AXIS2_EXTERN guththila_buffer_t * guththila_buffer_create (axis2_env_t * environment, int size) { - guththila_buffer_t *name = AXIS2_MALLOC (environment->allocator, + guththila_buffer_t *name; + name = NULL; + name = AXIS2_MALLOC (environment->allocator, sizeof (guththila_buffer_t)); - name->size = size; - name->offset = 0; - name->last = 0; - name->next = 0; - name->buff = NULL; - if (size != 0) - name->buff = (guththila_char_t *) AXIS2_MALLOC ( - environment->allocator, size); - return name; + if (name) + { + name->size = size; + name->offset = 0; + name->last = 0; + name->next = 0; + name->is_memory = 0; + name->buff = NULL; + if (size != 0) + name->buff = (guththila_char_t *) AXIS2_MALLOC ( + environment->allocator, size); + } + return name; } +AXIS2_EXTERN guththila_buffer_t * +guththila_buffer_create_for_buffer (axis2_env_t * environment, char *buffer, int size) +{ + guththila_buffer_t *name; + name = NULL; + name = AXIS2_MALLOC (environment->allocator, + sizeof (guththila_buffer_t)); + if (name) + { + name->size = size; + name->offset = 0; + name->is_memory = 1; + name->last = size; + name->next = 0; + name->buff = NULL; + if (buffer) + name->buff = buffer; + } + return name; +} AXIS2_EXTERN void guththila_buffer_free (axis2_env_t * environment, @@ -44,7 +71,7 @@ { if (name) { - if (name->buff) + if (name->buff && !name->is_memory) { AXIS2_FREE (environment->allocator, name->buff); name->buff = NULL; Modified: webservices/axis2/trunk/c/guththila/src/guththila_reader.c URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/guththila_reader.c?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/src/guththila_reader.c (original) +++ webservices/axis2/trunk/c/guththila/src/guththila_reader.c Fri Sep 8 02:33:42 2006 @@ -21,15 +21,6 @@ #include "guththila_defines.h" -typedef struct guththila_reader_impl_t -{ - guththila_reader_t reader; - FILE *fp; - int (*input_read_callback)(char *buffer,int size, void *ctx); - void* context; -}guththila_reader_impl_t; - - @@ -61,10 +52,32 @@ AXIS2_EXTERN guththila_reader_t * -guththila_reader_create_for_memory( +guththila_reader_create_for_io( axis2_env_t *environment, int (*input_read_callback)(char *buffer,int size,void* ctx),void* ctx) { + guththila_reader_impl_t *io_reader = + (guththila_reader_impl_t *) AXIS2_MALLOC (environment->allocator, + sizeof (guththila_reader_impl_t)); + if(!io_reader) + { + return NULL; + } + + io_reader->input_read_callback = input_read_callback; + io_reader->context = ctx; + io_reader->reader.guththila_reader_type = GUTHTHILA_IO_READER; + + return &(io_reader->reader); +} + +AXIS2_EXTERN guththila_reader_t * +guththila_reader_create_for_memory( + axis2_env_t *environment, + void *buffer, + int size, + void* ctx) +{ guththila_reader_impl_t *memory_reader = (guththila_reader_impl_t *) AXIS2_MALLOC (environment->allocator, sizeof (guththila_reader_impl_t)); @@ -73,14 +86,17 @@ return NULL; } - memory_reader->input_read_callback = input_read_callback; + if (buffer) + { + memory_reader->buffer = (char *)buffer; + memory_reader->buffer_size = strlen ((const char *) buffer); + } memory_reader->context = ctx; - memory_reader->reader.guththila_reader_type = GUTHTHILA_IN_MEMORY_READER; + memory_reader->reader.guththila_reader_type = GUTHTHILA_MEMORY_READER; return &(memory_reader->reader); } - AXIS2_EXTERN void guththila_reader_free (axis2_env_t * environment, guththila_reader_t * r) @@ -111,9 +127,13 @@ { return (int)fread (buffer + offset, 1, length,((guththila_reader_impl_t*)r)->fp); } - else if(r->guththila_reader_type == GUTHTHILA_IN_MEMORY_READER) + else if(r->guththila_reader_type == GUTHTHILA_IO_READER) return ((guththila_reader_impl_t*)r)->input_read_callback((buffer + offset), length, ((guththila_reader_impl_t*)r)->context); + else if (r->guththila_reader_type == GUTHTHILA_MEMORY_READER) + { + return ((guththila_reader_impl_t *)r)->buffer_size; + } return GUTHTHILA_FAILURE; } Modified: webservices/axis2/trunk/c/guththila/src/guththila_writer.c URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/guththila_writer.c?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/src/guththila_writer.c (original) +++ webservices/axis2/trunk/c/guththila/src/guththila_writer.c Fri Sep 8 02:33:42 2006 @@ -29,16 +29,33 @@ wt->outputstream = fopen (fp, "w"); if (!wt->outputstream) return NULL; - wt->writer.guththila_writer_type = GUTHTHILA_WRITER_CREATE_FOR_FILE; + wt->writer.guththila_writer_type = GUTHTHILA_WRITER_FILE; return &(wt->writer); } +AXIS2_EXTERN guththila_writer_t * AXIS2_CALL +guththila_writer_create_for_memory (axis2_env_t *env) +{ + guththila_writer_impl_t *wt = NULL; + + wt = (guththila_writer_impl_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_writer_impl_t)); + wt->outputstream = NULL; + + wt->buffer = guththila_buffer_create (env, 1024); + memset ((void *)wt->buffer->buff, 0, 1024); + if (!wt->buffer) + return NULL; + + wt->writer.guththila_writer_type = GUTHTHILA_WRITER_MEMORY; + return &(wt->writer); +} + AXIS2_EXTERN void guththila_writer_free (axis2_env_t *env, guththila_writer_t *wt) { if (wt) { - if (wt->guththila_writer_type == GUTHTHILA_WRITER_CREATE_FOR_FILE) + if (wt->guththila_writer_type == GUTHTHILA_WRITER_FILE) { if (((guththila_writer_impl_t *)wt)->outputstream) fclose (((guththila_writer_impl_t *)wt)->outputstream); @@ -54,12 +71,40 @@ char *buffer, int offset, int length, guththila_writer_t *wt) { - if (wt->guththila_writer_type == GUTHTHILA_WRITER_CREATE_FOR_FILE) + int c = 0; + guththila_writer_impl_t *writer_impl = NULL; + if (wt->guththila_writer_type == GUTHTHILA_WRITER_FILE) { - int c; c = fwrite (buffer+offset, 1, length, ((guththila_writer_impl_t *)wt)->outputstream); - return c; } - else - return 0; + else if (wt->guththila_writer_type == GUTHTHILA_WRITER_MEMORY) + { + int size = 0; + writer_impl = (guththila_writer_impl_t *)wt; + + if (writer_impl->buffer->buff) + size = strlen ((const char *)writer_impl->buffer->buff); + + if ((size + length) > writer_impl->buffer->size) + { + writer_impl->buffer = guththila_buffer_grow (env, writer_impl->buffer); + } + strcat (writer_impl->buffer->buff, buffer); + c = length; + } + return c; +} + + +AXIS2_EXTERN char * AXIS2_CALL +guththila_writer_get_buffer (axis2_env_t *env, + guththila_writer_t *wt) +{ + guththila_writer_impl_t *writer_impl = NULL; + writer_impl = (guththila_writer_impl_t *)wt; + + if (writer_impl->buffer->buff) + return (char *)writer_impl->buffer->buff; + else + return (char *)NULL; } Modified: webservices/axis2/trunk/c/guththila/src/guththila_xml_pull_parser.c URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/guththila_xml_pull_parser.c?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/src/guththila_xml_pull_parser.c (original) +++ webservices/axis2/trunk/c/guththila/src/guththila_xml_pull_parser.c Fri Sep 8 02:33:42 2006 @@ -18,11 +18,11 @@ #include -static int AXIS2_CALL -guththila_is_space (int c) -{ - return (0x20 == c || 0x9 == c || 0xD == c || 0xA == c); -} +/* static int AXIS2_CALL */ +/* guththila_is_space (int c) */ +/* { */ +/* return (0x20 == c || 0x9 == c || 0xD == c || 0xA == c); */ +/* } */ AXIS2_EXTERN guththila_xml_pull_parser_t * AXIS2_CALL @@ -32,7 +32,22 @@ guththila_xml_pull_parser_t *parser = (guththila_xml_pull_parser_t *) AXIS2_MALLOC ( environment->allocator, sizeof (guththila_xml_pull_parser_t)); - parser->buffer = guththila_buffer_create (environment, 1024); + guththila_reader_impl_t *reader_impl = NULL; + if (r) + { + reader_impl = (guththila_reader_impl_t *)r; + parser->reader_type = reader_impl->reader.guththila_reader_type; + } + + if (reader_impl && reader_impl->reader.guththila_reader_type == GUTHTHILA_MEMORY_READER) + { + guththila_buffer_t *reader_buffer = NULL; + reader_buffer = guththila_buffer_create_for_buffer (environment, reader_impl->buffer, reader_impl->buffer_size); + parser->buffer = reader_buffer; + } + else + parser->buffer = guththila_buffer_create (environment, 1024); + parser->stack = axis2_stack_create (environment); parser->attrib = axis2_stack_create (environment); parser->namesp = axis2_stack_create (environment); @@ -56,8 +71,15 @@ guththila_xml_pull_parser_free (axis2_env_t * environment, guththila_xml_pull_parser_t * parser) { - if (parser->buffer) + /* if (parser->reader_type != GUTHTHILA_MEMORY_READER) */ + /* { */ + /* if (parser->buffer) */ + /* guththila_buffer_free (environment, (void *) parser->buffer); */ + /* } */ + + if (parser->buffer) guththila_buffer_free (environment, (void *) parser->buffer); + if (parser->stack) AXIS2_STACK_FREE (parser->stack, environment); if (parser->attrib) @@ -174,14 +196,21 @@ guththila_xml_pull_parser_t * parser, int eof) { - if (((parser->_next) > (parser->last)) - && guththila_xml_pull_parser_read (environment, parser)) + + if (parser->reader_type == GUTHTHILA_MEMORY_READER) + { + if (parser->_next > parser->last) + return -1; + } + else if (((parser->_next) > (parser->last)) + && guththila_xml_pull_parser_read (environment, parser)) { if (eof) return -1; else guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_ERROR_UNEXPECTED_EOF); } + if (parser->_next == 0) { guththila_UTF8_char iu = @@ -468,7 +497,11 @@ guththila_xml_pull_parser_next_char (environment, parser, 0)) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_ERROR_MISSING_GREATER_SIGN_IN_XML_DECLARATION); else - parser->guththila_event = GUTHTHILA_START_DOCUMENT; + { + while (guththila_xml_pull_parser_is_space (environment, guththila_xml_pull_parser_next_char (environment, parser, 0))); + parser->_next--; + parser->guththila_event = GUTHTHILA_START_DOCUMENT; + } } } else @@ -481,32 +514,32 @@ guththila_xml_pull_parser_reset (axis2_env_t * environment, guththila_xml_pull_parser_t * parser) { - int ii; - parser->offset = parser->_next; - parser->name = NULL; - parser->prefix = NULL; - parser->value = NULL; + int ii; + parser->offset = parser->_next; + parser->name = NULL; + parser->prefix = NULL; + parser->value = NULL; - ii = AXIS2_STACK_SIZE (parser->attrib, environment); - for (; ii > 0; ii--) + ii = AXIS2_STACK_SIZE (parser->attrib, environment); + for (; ii > 0; ii--) { - void *d; - d = AXIS2_STACK_POP (parser->attrib, environment); - AXIS2_FREE (environment->allocator, d); + void *d; + d = AXIS2_STACK_POP (parser->attrib, environment); + AXIS2_FREE (environment->allocator, d); } - ii = AXIS2_STACK_SIZE (parser->stack, environment); - for (; ii > 0; ii--) + ii = AXIS2_STACK_SIZE (parser->stack, environment); + for (; ii > 0; ii--) { - void *d; - d = AXIS2_STACK_POP (parser->stack, environment); - AXIS2_FREE (environment->allocator, d); + void *d; + d = AXIS2_STACK_POP (parser->stack, environment); + AXIS2_FREE (environment->allocator, d); } /* guththila_stack_clear (environment, parser->attrib); */ /* guththila_stack_clear (environment, parser->stack); */ if(parser->guththila_event == GUTHTHILA_END_ELEMENT - || parser->guththila_event == GUTHTHILA_EMPTY_ELEMENT) - guththila_xml_pull_parser_close_element (environment, parser); + || parser->guththila_event == GUTHTHILA_EMPTY_ELEMENT) + guththila_xml_pull_parser_close_element (environment, parser); } @@ -1207,7 +1240,7 @@ { /* int ix = parser->attrib->pointer; */ int ix = AXIS2_STACK_SIZE (parser->attrib, environment); - guththila_attribute_t *attribute; + guththila_attribute_t *attribute = NULL; if (i > ix) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_ERROR_REQUESTED_NUMBER_GREATER_THAN_STACK_SIZE); else @@ -1225,7 +1258,7 @@ { /* int ix = parser->attrib->pointer; */ int ix = AXIS2_STACK_SIZE (parser->attrib, environment); - guththila_attribute_t *attribute; + guththila_attribute_t *attribute = NULL; if (i > ix) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_ERROR_REQUESTED_NUMBER_GREATER_THAN_STACK_SIZE); else @@ -1244,7 +1277,7 @@ { /* int ix = parser->attrib->pointer; */ int ix = AXIS2_STACK_SIZE (parser->attrib, environment); - guththila_attribute_t *attribute; + guththila_attribute_t *attribute = NULL; if (i > ix) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_ERROR_REQUESTED_NUMBER_GREATER_THAN_STACK_SIZE); else @@ -1354,7 +1387,7 @@ { /* int ix = parser->namesp->pointer; */ int ix = AXIS2_STACK_SIZE (parser->namesp, environment); - guththila_namespace_t *ns; + guththila_namespace_t *ns = NULL; if (i > ix) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_ERROR_REQUESTED_NUMBER_GREATER_THAN_STACK_SIZE); else Modified: webservices/axis2/trunk/c/guththila/src/guththila_xml_writer.c URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/guththila_xml_writer.c?view=diff&rev=441454&r1=441453&r2=441454 ============================================================================== --- webservices/axis2/trunk/c/guththila/src/guththila_xml_writer.c (original) +++ webservices/axis2/trunk/c/guththila/src/guththila_xml_writer.c Fri Sep 8 02:33:42 2006 @@ -22,7 +22,7 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_create_xml_stream_writer (axis2_env_t *env, guththila_xml_pull_parser_t *p, char *file) { - if (p && file) + if (p || file) { p->xsw = (guththila_xml_writer_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_xml_writer_t)); p->xsw->writer = guththila_writer_create_for_file (env, file); @@ -44,17 +44,48 @@ AXIS2_EXTERN void AXIS2_CALL +guththila_xml_pull_parser_create_xml_stream_writer_for_memory (axis2_env_t *env, guththila_xml_pull_parser_t *p) +{ + if (p) + { + p->xsw = (guththila_xml_writer_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_xml_writer_t)); + p->xsw->writer = guththila_writer_create_for_memory (env); + p->xsw->writer_buffer = guththila_buffer_create (env, 1024); + p->xsw->writer_buffer->buff[0] = 0; + p->xsw->element = axis2_stack_create (env); + p->xsw->attribute = axis2_stack_create (env); + p->xsw->namespace = axis2_stack_create (env); + p->xsw->depth = axis2_stack_create (env); + p->xsw->next = 0; + p->xsw->offset = 0; + p->xsw->last = 1024; /* size of the buffer */ + p->xsw->start_element_open = -1; + p->xsw->empty_element_open = -1; + } + else + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS); +} + +AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_xml_writer_free(axis2_env_t *env, guththila_xml_pull_parser_t *p) { + int size; size = 0; - guththila_xml_pull_parser_check_xml_stream_writer (env, p); + guththila_xml_pull_parser_check_xml_stream_writer (env, p); +/* guththila_xml_pull_parser_flush (env, p); */ + guththila_xml_pull_parser_write_end_document (env, p); + if (p->xsw->writer_buffer) + { + guththila_buffer_free (env, p->xsw->writer_buffer); + p->xsw->writer_buffer = NULL; + } if (p->xsw->element) { - void *element; - size = 0; + void *element; + size = 0; size = AXIS2_STACK_SIZE (p->xsw->element, env); if (size) @@ -103,8 +134,8 @@ AXIS2_FREE (env->allocator, ns); ns = NULL; } - AXIS2_STACK_FREE (p->xsw->namespace, env); - p->xsw->namespace = NULL; + AXIS2_STACK_FREE (p->xsw->namespace, env); + p->xsw->namespace = NULL; } } @@ -122,8 +153,8 @@ AXIS2_FREE (env->allocator, depth); depth = NULL; } - AXIS2_STACK_FREE (p->xsw->depth, env); - p->xsw->depth = NULL; + AXIS2_STACK_FREE (p->xsw->depth, env); + p->xsw->depth = NULL; } } @@ -133,11 +164,7 @@ p->xsw->writer = NULL; } - if (p->xsw->writer_buffer) - { - guththila_buffer_free (env, p->xsw->writer_buffer); - p->xsw->writer_buffer = NULL; - } + if (p->xsw) { AXIS2_FREE (env->allocator, p->xsw); @@ -159,37 +186,37 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_start_document(axis2_env_t *env, - guththila_xml_pull_parser_t *p) + guththila_xml_pull_parser_t *p) { - char *sd = NULL; - guththila_xml_pull_parser_check_xml_stream_writer (env, p); - sd = ""; - guththila_xml_pull_parser_write_to_buffer (env, p, sd); + char *sd = NULL; + guththila_xml_pull_parser_check_xml_stream_writer (env, p); + sd = ""; + guththila_xml_pull_parser_write_to_buffer (env, p, sd); } AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_end_element (axis2_env_t *env, guththila_xml_pull_parser_t *p) { - void *element = NULL; - guththila_xml_pull_parser_check_xml_stream_writer (env, p); - element = AXIS2_STACK_POP (p->xsw->element, env); - if(p->xsw->empty_element_open) + void *element = NULL; + guththila_xml_pull_parser_check_xml_stream_writer (env, p); + element = AXIS2_STACK_POP (p->xsw->element, env); + if(p->xsw->empty_element_open) { - guththila_xml_pull_parser_close_start_element (env, p); + guththila_xml_pull_parser_close_start_element (env, p); } - else + else { - guththila_xml_pull_parser_close_start_element (env, p); - if (element) - { - guththila_xml_pull_parser_write_to_buffer (env, p, ""); - guththila_xml_pull_parser_close_depth_element (env, p); - } - else - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS); + guththila_xml_pull_parser_close_start_element (env, p); + if (element) + { + guththila_xml_pull_parser_write_to_buffer (env, p, ""); + guththila_xml_pull_parser_close_depth_element (env, p); + } + else + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS); } } @@ -197,10 +224,10 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_flush (axis2_env_t *env, guththila_xml_pull_parser_t *p) { - int c; - int ii = 0; - guththila_xml_pull_parser_check_xml_stream_writer (env, p); - if(p->xsw->writer_buffer->buff) + int c; + int ii = 0; + guththila_xml_pull_parser_check_xml_stream_writer (env, p); + if(p->xsw->writer_buffer->buff) { ii = strlen (p->xsw->writer_buffer->buff); c = guththila_writer_write (env, p->xsw->writer_buffer->buff, 0, ii, p->xsw->writer); @@ -223,13 +250,16 @@ { guththila_xml_pull_parser_check_xml_stream_writer (env, p); guththila_xml_pull_parser_close_start_element (env, p); + guththila_xml_pull_parser_open_depth_element (env, p); size = AXIS2_STACK_SIZE (p->xsw->element, env); - if (size) + + if (size) { element = AXIS2_STACK_GET_AT (p->xsw->element, env, 0); if (!strcmp ((char *)element, start_element)) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); } + guththila_xml_pull_parser_check_name_validity (env, p,start_element); p->xsw->start_element_open = 1; @@ -247,22 +277,21 @@ if (buff) { guththila_xml_pull_parser_check_xml_stream_writer (env, p); - if (p->xsw->next >= p->xsw->last) + int length = 0; + length = strlen (buff); + + if ((p->xsw->next + length) >= p->xsw->last) { guththila_xml_pull_parser_flush (env, p); p->xsw->next = 0; p->xsw->offset = 0; } - else + + if (p->xsw->writer_buffer->buff && p->xsw->next > -1) { - int length; - length = strlen (buff); - if (p->xsw->writer_buffer->buff && p->xsw->next > -1) - { - strcat ((p->xsw->writer_buffer->buff) + (p->xsw->next), buff); - p->xsw->offset = p->xsw->next; - p->xsw->next += length; - } + strcat ((p->xsw->writer_buffer->buff) + (p->xsw->next), buff); + p->xsw->offset = p->xsw->next; + p->xsw->next += length; } } } @@ -286,6 +315,7 @@ void AXIS2_CALL guththila_xml_pull_parser_close_start_element (axis2_env_t *env, guththila_xml_pull_parser_t *p) { + int stack_size = 0; if (p->xsw->start_element_open != -1 && p->xsw->empty_element_open != -1) { if (p->xsw->start_element_open && p->xsw->empty_element_open) @@ -302,6 +332,19 @@ guththila_xml_pull_parser_write_to_buffer (env, p,">"); /* Stack_clear (p->xsw->attribute); */ } + + stack_size = AXIS2_STACK_SIZE (p->xsw->attribute, env); + if (stack_size) + { + guththila_attribute_t* att = NULL; + for (;stack_size > 0; stack_size--) + { + att = (guththila_attribute_t *)AXIS2_STACK_POP (p->xsw->attribute, env); + AXIS2_FREE (env->allocator, att); + att = NULL; + } + } + } else { @@ -309,7 +352,7 @@ p->xsw->empty_element_open = 0; } - guththila_xml_pull_parser_open_depth_element (env, p); +/* guththila_xml_pull_parser_open_depth_element (env, p); */ } @@ -369,54 +412,54 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_comment (axis2_env_t *env, guththila_xml_pull_parser_t *p, const char *buff) { - char *s = NULL; - guththila_xml_pull_parser_check_xml_stream_writer (env, p); - guththila_xml_pull_parser_close_start_element (env, p); - s = strchr (buff, '-'); - if(s && s[1] == '-') - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EXCESS_HYPENS_IN_COMMENT); - guththila_xml_pull_parser_write_to_buffer (env, p,""); + char *s = NULL; + guththila_xml_pull_parser_check_xml_stream_writer (env, p); + guththila_xml_pull_parser_close_start_element (env, p); + s = strchr (buff, '-'); + if(s && s[1] == '-') + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EXCESS_HYPENS_IN_COMMENT); + guththila_xml_pull_parser_write_to_buffer (env, p,""); } AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_escape_character (axis2_env_t *env, guththila_xml_pull_parser_t *p, const char *buff) { - guththila_xml_pull_parser_close_start_element (env, p); - if(buff) + guththila_xml_pull_parser_close_start_element (env, p); + if(buff) { - switch (buff[0]) - { - case '>': - { - guththila_xml_pull_parser_write_to_buffer (env, p,">"); - } - break; - case '<': - { - guththila_xml_pull_parser_write_to_buffer (env, p,"<"); - } - break; - case '\'': - { - guththila_xml_pull_parser_write_to_buffer (env, p,"'"); - } - break; - case '"': - { - guththila_xml_pull_parser_write_to_buffer (env, p,"""); - } - break; - case '&': - { - guththila_xml_pull_parser_write_to_buffer (env, p,"&"); - } - break; - }; + switch (buff[0]) + { + case '>': + { + guththila_xml_pull_parser_write_to_buffer (env, p,">"); + } + break; + case '<': + { + guththila_xml_pull_parser_write_to_buffer (env, p,"<"); + } + break; + case '\'': + { + guththila_xml_pull_parser_write_to_buffer (env, p,"'"); + } + break; + case '"': + { + guththila_xml_pull_parser_write_to_buffer (env, p,"""); + } + break; + case '&': + { + guththila_xml_pull_parser_write_to_buffer (env, p,"&"); + } + break; + }; } - else + else guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_INVALID_BUFFER); } @@ -441,15 +484,15 @@ if (element) { attr = (guththila_attribute_t *)element; - if (!strcmp((char *)attr->name, local_name)) - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); - else + if (strcmp((char *)attr->name, local_name)) { guththila_xml_pull_parser_do_write_attribute (env, p,local_name, value); break; } - } - } + else + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_SAME_ATTRIBUTE_REPEAT); + } } + } else @@ -461,9 +504,9 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_do_write_attribute (axis2_env_t *env, - guththila_xml_pull_parser_t *p, - const char *local_name, - const char *value) + guththila_xml_pull_parser_t *p, + const char *local_name, + const char *value) { guththila_attribute_t *attr = (guththila_attribute_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_attribute_t)); @@ -480,14 +523,14 @@ if (strrchr (value, '&') || strrchr (value, '<') - || strrchr (value, '\'')) + || strrchr (value, '\"')) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_INVALID_CHAR_IN_ATTRIBUTE); guththila_xml_pull_parser_write_to_buffer (env, p," "); guththila_xml_pull_parser_write_to_buffer (env, p,local_name); - guththila_xml_pull_parser_write_to_buffer (env, p," = \'"); + guththila_xml_pull_parser_write_to_buffer (env, p," = \""); guththila_xml_pull_parser_write_to_buffer (env, p,value); - guththila_xml_pull_parser_write_to_buffer (env, p,"\'"); + guththila_xml_pull_parser_write_to_buffer (env, p,"\""); } @@ -570,16 +613,17 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_namespace (axis2_env_t *env, guththila_xml_pull_parser_t *p, char *prefix, char *uri) { - if (!prefix || !strcmp(prefix, "xmlns")) - guththila_xml_pull_parser_do_write_default_namespace (env, p,uri); - if (!p->xsw->start_element_open) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS); + + if (!prefix || !strcmp(prefix, "")) + guththila_xml_pull_parser_do_write_default_namespace (env, p,uri); else { if (guththila_xml_pull_parser_check_prefix_validity (env, p,prefix, uri)) guththila_xml_pull_parser_do_write_namespace (env, p,prefix, uri); } + } @@ -587,10 +631,10 @@ AXIS2_EXTERN int AXIS2_CALL guththila_xml_pull_parser_check_prefix_validity (axis2_env_t *env, guththila_xml_pull_parser_t *p, char *prefix, char *uri) { - int size; - int ii; - void *element; - guththila_namespace_t *ns; + int size = 0; + int ii = 0; + void *element = NULL; + guththila_namespace_t *ns = NULL; size = AXIS2_STACK_SIZE (p->xsw->namespace, env); if (size) { @@ -600,17 +644,18 @@ if (element) { ns = (guththila_namespace_t *)element; - if (ns->name) + if (ns->name && prefix) { if (!strcmp (ns->name, prefix)) - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); - } - if (uri) - { - if (ns->uri) { - if (!strcmp (ns->uri, uri)) - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); + if (ns->uri && uri) + { + if (strcmp (ns->uri, uri)) + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); + else + return 0; + } + } } } @@ -625,26 +670,26 @@ void AXIS2_CALL guththila_xml_pull_parser_do_write_namespace (axis2_env_t *env, guththila_xml_pull_parser_t *p, char *prefix, char *uri) { - guththila_namespace_t *ns = (guththila_namespace_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_namespace_t)); - ns->name = prefix; - ns->length = strlen (prefix); - ns->uri = uri; - ns->lengthuri = strlen (uri); - AXIS2_STACK_PUSH (p->xsw->namespace, env, ( void *)ns); +guththila_namespace_t *ns = (guththila_namespace_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_namespace_t)); +ns->name = prefix; +ns->length = strlen (prefix); +ns->uri = uri; +ns->lengthuri = strlen (uri); +AXIS2_STACK_PUSH (p->xsw->namespace, env, ( void *)ns); - guththila_xml_pull_parser_write_to_buffer (env, p," "); - guththila_xml_pull_parser_write_to_buffer (env, p,"xmlns:"); - guththila_xml_pull_parser_write_to_buffer (env, p,prefix); - guththila_xml_pull_parser_write_to_buffer (env, p," = \'"); - guththila_xml_pull_parser_write_to_buffer (env, p,uri); - guththila_xml_pull_parser_write_to_buffer (env, p,"\'"); +guththila_xml_pull_parser_write_to_buffer (env, p," "); +guththila_xml_pull_parser_write_to_buffer (env, p,"xmlns:"); +guththila_xml_pull_parser_write_to_buffer (env, p,prefix); +guththila_xml_pull_parser_write_to_buffer (env, p," = \'"); +guththila_xml_pull_parser_write_to_buffer (env, p,uri); +guththila_xml_pull_parser_write_to_buffer (env, p,"\'"); } AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_attribute_with_prefix_and_namespace (axis2_env_t *env, guththila_xml_pull_parser_t *p, - const char *prefix, const char *namespace, - const char *local_name, const char *value) + const char *prefix, const char *namespace, + const char *local_name, const char *value) { int size = 0; void *element; @@ -958,26 +1003,36 @@ { int size; void *element; - char *start_element = (char *) calloc ((strlen (prefix) + strlen (local_name) +2), 1); + char *start_element = NULL; + if (prefix && local_name) + start_element = (char *) calloc ((strlen (prefix) + strlen (local_name) +2), 1); + if (!p || !local_name) guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS); else { guththila_xml_pull_parser_check_xml_stream_writer (env, p); guththila_xml_pull_parser_close_start_element (env, p); + guththila_xml_pull_parser_open_depth_element (env, p); if (prefix) { strcat (start_element, prefix); strcat (start_element, ":"); strcat (start_element, local_name); - } + } + else + start_element = (char *)local_name; + size = AXIS2_STACK_SIZE (p->xsw->element, env); if (size) { element = AXIS2_STACK_GET_AT (p->xsw->element, env, size); - if (!strcmp ((char *)element, start_element)) - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); + if (start_element && element) + { + if (!strcmp ((char *)element, start_element)) + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); + } } guththila_xml_pull_parser_check_name_validity (env, p,start_element); @@ -1004,38 +1059,41 @@ guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_EMPTY_ARGUMENTS); else { - char *prefix = NULL; - guththila_xml_pull_parser_check_xml_stream_writer (env, p); - guththila_xml_pull_parser_close_start_element (env, p); - prefix = guththila_xml_pull_parser_get_prefix_for_namespace (env, p,namespace_uri); - if(prefix) - start_element = (char *) calloc ((strlen (prefix) + strlen (local_name) +2), 1); - else - start_element = (char *) calloc ((strlen (local_name) +2), 1); + char *prefix = NULL; + guththila_xml_pull_parser_check_xml_stream_writer (env, p); + guththila_xml_pull_parser_close_start_element (env, p); + prefix = guththila_xml_pull_parser_get_prefix_for_namespace (env, p,namespace_uri); + + if(prefix) + start_element = (char *) calloc ((strlen (prefix) + strlen (local_name) +2), 1); + else + start_element = (char *) calloc ((strlen (local_name) +2), 1); - if(prefix) + if(prefix) { - strcat (start_element, prefix); - strcat (start_element, ":"); - strcat (start_element, local_name); + strcat (start_element, prefix); + strcat (start_element, ":"); + strcat (start_element, local_name); } - else - strcat (start_element, local_name); - size = AXIS2_STACK_SIZE (p->xsw->element, env); - if(size) + else + strcat (start_element, local_name); + + size = AXIS2_STACK_SIZE (p->xsw->element, env); + + if(size) { - element = AXIS2_STACK_GET_AT (p->xsw->element, env, size); - if (!strcmp ((char *)element, start_element)) - guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); + element = AXIS2_STACK_GET_AT (p->xsw->element, env, size); + if (!strcmp ((char *)element, start_element)) + guththila_xml_pull_parser_exception (p_FILE, LINE, GUTHTHILA_WRITER_ERROR_NON_MATCHING_ELEMENTS); } - guththila_xml_pull_parser_check_name_validity (env, p,start_element); - p->xsw->start_element_open = 1; + guththila_xml_pull_parser_check_name_validity (env, p,start_element); + p->xsw->start_element_open = 1; - if (!p->xsw->empty_element_open) - AXIS2_STACK_PUSH (p->xsw->element, env, start_element); - guththila_xml_pull_parser_write_to_buffer (env, p,"<"); - guththila_xml_pull_parser_write_to_buffer (env, p,start_element); + if (!p->xsw->empty_element_open) + AXIS2_STACK_PUSH (p->xsw->element, env, start_element); + guththila_xml_pull_parser_write_to_buffer (env, p,"<"); + guththila_xml_pull_parser_write_to_buffer (env, p,start_element); } } else @@ -1057,7 +1115,8 @@ { guththila_xml_pull_parser_check_xml_stream_writer (env, p); guththila_xml_pull_parser_close_start_element (env, p); - + guththila_xml_pull_parser_open_depth_element (env, p); + if (prefix) { start_element = (char *) AXIS2_MALLOC (env->allocator, (strlen (prefix) + strlen (local_name) +2)); @@ -1132,23 +1191,23 @@ int size = AXIS2_STACK_SIZE (p->xsw->depth, env); guththila_depth_t *d = (guththila_depth_t *) AXIS2_MALLOC (env->allocator, sizeof (guththila_depth_t)); - if(size) + if(size) { - void *e = NULL; - guththila_depth_t *l = NULL; - e = AXIS2_STACK_GET (p->xsw->depth, env); - l = (guththila_depth_t *)e; - d->total = AXIS2_STACK_SIZE (p->xsw->namespace, env); - d->first = l->first + l->count; - d->count = d->total - l->total; - AXIS2_STACK_PUSH (p->xsw->depth, env, (void *)d); - } - else - { - d->first = 0; - d->total = AXIS2_STACK_SIZE (p->xsw->namespace, env); - d->count = d->total; - AXIS2_STACK_PUSH (p->xsw->depth, env, (void *)d); + void *e = NULL; + guththila_depth_t *l = NULL; + e = AXIS2_STACK_GET (p->xsw->depth, env); + l = (guththila_depth_t *)e; + d->total = AXIS2_STACK_SIZE (p->xsw->namespace, env); + d->first = l->first + l->count; + d->count = d->total - l->total; + AXIS2_STACK_PUSH (p->xsw->depth, env, (void *)d); + } + else + { + d->first = 0; + d->total = AXIS2_STACK_SIZE (p->xsw->namespace, env); + d->count = d->total; + AXIS2_STACK_PUSH (p->xsw->depth, env, (void *)d); } } @@ -1174,22 +1233,22 @@ AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_write_end_document (axis2_env_t *env, guththila_xml_pull_parser_t *p) { - int ii = 0; - if (p->xsw->start_element_open || p->xsw->empty_element_open) - guththila_xml_pull_parser_close_start_element (env, p); - ii = AXIS2_STACK_SIZE (p->xsw->element, env); - for (; ii > 0; ii --) - guththila_xml_pull_parser_write_end_element (env, p); - guththila_xml_pull_parser_flush (env, p); + int ii = 0; + if (p->xsw->start_element_open || p->xsw->empty_element_open) + guththila_xml_pull_parser_close_start_element (env, p); + ii = AXIS2_STACK_SIZE (p->xsw->element, env); + for (; ii > 0; ii --) + guththila_xml_pull_parser_write_end_element (env, p); + guththila_xml_pull_parser_flush (env, p); } AXIS2_EXTERN void AXIS2_CALL guththila_xml_pull_parser_close (axis2_env_t *env, - guththila_xml_pull_parser_t *p) + guththila_xml_pull_parser_t *p) { - guththila_xml_pull_parser_flush (env, p); - fclose (((guththila_writer_impl_t *)p->xsw->writer)->outputstream); + guththila_xml_pull_parser_flush (env, p); + fclose (((guththila_writer_impl_t *)p->xsw->writer)->outputstream); } @@ -1200,4 +1259,15 @@ guththila_xml_pull_parser_write_characters (env, p,characters); guththila_xml_pull_parser_write_end_element (env, p); guththila_xml_pull_parser_write_characters (env, p,"\n"); +} + +AXIS2_EXTERN char* AXIS2_CALL +guththila_xml_pull_parser_get_memory_buffer (axis2_env_t *env, guththila_xml_pull_parser_t *p) +{ + char *buffer = NULL; + guththila_xml_pull_parser_flush (env, p); + if (p->xsw) + buffer = guththila_writer_get_buffer (env, p->xsw->writer); + + return buffer; } --------------------------------------------------------------------- To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org For additional commands, e-mail: axis-cvs-help@ws.apache.org