You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2006/09/08 11:33:43 UTC
svn commit: r441454 - in /webservices/axis2/trunk/c/guththila: ./ include/
samples/ src/
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 <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "guththila_buffer.h"
-/* #include "guththila_environment.h" */
#include "guththila_defines.h"
#include <axis2_env.h>
#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 <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "guththila_buffer.h"
#include <axis2_env.h>
#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 ("</");
- /* printf ("\n %s \n", guththila_xml_pull_parser_get_encoding (environment, parser)); */
p = guththila_xml_pull_parser_get_prefix (environment,
parser);
if (p)
@@ -164,9 +174,6 @@
break;
};
}
- guththila_char_t *charq;
- charq = guththila_xml_pull_parser_get_encoding (environment, parser);
- printf ("encoding method is %s", charq);
guththila_reader_free (environment, red);
guththila_xml_pull_parser_free (environment, parser);
axis2_allocator_free (allocator);
Modified: webservices/axis2/trunk/c/guththila/samples/guththila_writer_main.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/samples/guththila_writer_main.c?view=diff&rev=441454&r1=441453&r2=441454
==============================================================================
--- webservices/axis2/trunk/c/guththila/samples/guththila_writer_main.c (original)
+++ webservices/axis2/trunk/c/guththila/samples/guththila_writer_main.c Fri Sep 8 02:33:42 2006
@@ -1,13 +1,28 @@
#include <stdio.h>
#include <guththila_buffer.h>
#include <guththila_reader.h>
+#include <guththila_writer.h>
#include <guththila_xml_pull_parser.h>
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 = "<Template><Application1 xmlns:xplt=\"http://www.xxxx.com/\" xmlns:xpl=\"http://www.xxxx.com/\">first</Application1><Application2 xmlns:xplt=\"http://www.xxxx.com/\" xmlns:xpl=\"http://www.xxxx.com/\"> second</Application2> </Template>"; */
+
+/* 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 <string.h>
#include "guththila_buffer.h"
#include <axis2_env.h>
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 <guththila_xml_pull_parser.h>
-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 = "<?xml version = \"1.0\" encoding = \"utf-8\" ?>";
- guththila_xml_pull_parser_write_to_buffer (env, p, sd);
+ char *sd = NULL;
+ guththila_xml_pull_parser_check_xml_stream_writer (env, p);
+ sd = "<?xml version = \"1.0\" encoding = \"utf-8\" ?>";
+ 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_write_to_buffer (env, p, 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_write_to_buffer (env, p, 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,"<!--");
- guththila_xml_pull_parser_write_to_buffer (env, p,buff);
- 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,"<!--");
+ guththila_xml_pull_parser_write_to_buffer (env, p,buff);
+ 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