You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by se...@apache.org on 2008/03/18 11:01:34 UTC

svn commit: r638296 - /webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c

Author: senaka
Date: Tue Mar 18 03:01:30 2008
New Revision: 638296

URL: http://svn.apache.org/viewvc?rev=638296&view=rev
Log:
Axis2/C Hackathon: Fixing AXIOM 

Modified:
    webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c

Modified: webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c?rev=638296&r1=638295&r2=638296&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c (original)
+++ webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c Tue Mar 18 03:01:30 2008
@@ -1,4 +1,3 @@
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -26,25 +25,25 @@
     axis2_char_t *file_name;
     axis2_byte_t *buffer;
     int buffer_len;
-    int data_handler_type;
+    axiom_data_handler_type_t data_handler_type;
 };
 
 AXIS2_EXTERN axiom_data_handler_t *AXIS2_CALL
 axiom_data_handler_create(
-    const axutil_env_t * env,
-    const axis2_char_t * file_name,
-    const axis2_char_t * mime_type)
+    const axutil_env_t *env,
+    const axis2_char_t *file_name,
+    const axis2_char_t *mime_type)
 {
     axiom_data_handler_t *data_handler = NULL;
 
     AXIS2_ENV_CHECK(env, NULL);
-    data_handler =
-        (axiom_data_handler_t *) AXIS2_MALLOC(env->allocator,
-                                              sizeof(axiom_data_handler_t));
+    data_handler = (axiom_data_handler_t *) AXIS2_MALLOC(env->allocator,
+        sizeof(axiom_data_handler_t));
 
     if (!data_handler)
     {
         AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory");
         return NULL;
     }
 
@@ -52,6 +51,8 @@
     data_handler->file_name = NULL;
     data_handler->buffer = NULL;
     data_handler->buffer_len = 0;
+    /* By default, a Data Handler is of type Buffer */
+    data_handler->data_handler_type = AXIOM_DATA_HANDLER_TYPE_BUFFER;
 
     if (mime_type)
     {
@@ -60,6 +61,7 @@
         {
             axiom_data_handler_free(data_handler, env);
             AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory");
             return NULL;
         }
     }
@@ -70,14 +72,11 @@
         {
             axiom_data_handler_free(data_handler, env);
             AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory");
             return NULL;
         }
         data_handler->data_handler_type = AXIOM_DATA_HANDLER_TYPE_FILE;
     }
-    else
-    {
-        data_handler->data_handler_type = AXIOM_DATA_HANDLER_TYPE_BUFFER;
-    }
 
     return data_handler;
 }
@@ -87,8 +86,6 @@
     axiom_data_handler_t * data_handler,
     const axutil_env_t * env)
 {
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-
     if (data_handler->file_name)
     {
         AXIS2_FREE(env->allocator, data_handler->file_name);
@@ -125,7 +122,7 @@
     axiom_data_handler_t * data_handler,
     const axutil_env_t * env)
 {
-    return (axis2_byte_t *) data_handler->buffer;
+    return data_handler->buffer;
 }
 
 AXIS2_EXTERN int AXIS2_CALL
@@ -143,7 +140,6 @@
     axis2_byte_t ** output_stream,
     int *output_stream_size)
 {
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     if (data_handler->data_handler_type == AXIOM_DATA_HANDLER_TYPE_BUFFER)
     {
         *output_stream = data_handler->buffer;
@@ -160,18 +156,18 @@
         int temp_byte_stream_size = 0;
         int read_stream_size = 0;
         int count = 0;
-		struct stat stat_p;
+        struct stat stat_p;
 
         f = fopen(data_handler->file_name, "rb");
         if (!f)
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                            " error opening file %s for reading ",
-                            data_handler->file_name);
+                "Error opening file %s for reading",
+                data_handler->file_name);
             return AXIS2_FAILURE;
         }
 
-        if (-1 == stat(data_handler->file_name, &stat_p))
+        if (stat(data_handler->file_name, &stat_p) == -1)
         {
 	    fclose(f);
             return AXIS2_FAILURE;
@@ -188,12 +184,12 @@
         {
             read_stream_size = stat_p.st_size;
             read_stream = AXIS2_MALLOC(env->allocator,
-                                       (read_stream_size) *
-                                       sizeof(axis2_byte_t));
+                (read_stream_size) * sizeof(axis2_byte_t));
             if (!read_stream)
             {
                 AXIS2_ERROR_SET(env->error,
-                                AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+                    AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory");
                 if (byte_stream)
                 {
                     AXIS2_FREE(env->allocator, byte_stream);
@@ -202,11 +198,11 @@
                 return AXIS2_FAILURE;
             }
             count = (int)fread(read_stream, 1, read_stream_size, f);
-            /* We are sure that the difference lies within the int range */
-            if (ferror(f) != 0)
+            /* The count lies within the int range */
+            if (ferror(f))
             {
-                AXIS2_ERROR_SET(env->error,
-                                AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                    "Error in reading file %s", data_handler->file_name);
                 if (byte_stream)
                 {
                     AXIS2_FREE(env->allocator, byte_stream);
@@ -228,12 +224,13 @@
                     temp_byte_stream_size = byte_stream_size;
                     byte_stream_size = temp_byte_stream_size + count;
                     byte_stream = AXIS2_MALLOC(env->allocator,
-                                               (byte_stream_size) *
-                                               sizeof(axis2_byte_t));
+                        (byte_stream_size) * sizeof(axis2_byte_t));
                     if (!byte_stream)
                     {
                         AXIS2_ERROR_SET(env->error,
-                                        AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+                            AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+                        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                            "Not enough memory");
                         if (read_stream)
                         {
                             AXIS2_FREE(env->allocator, read_stream);
@@ -259,6 +256,7 @@
                     if (temp_byte_stream)
                     {
                         AXIS2_FREE(env->allocator, temp_byte_stream);
+                        temp_byte_stream = NULL;
                         temp_byte_stream_size = 0;
                     }
                 }
@@ -270,12 +268,9 @@
                     read_stream_size = 0;
                 }
             }
-            else
+            else if (read_stream)
             {
-                if (read_stream)
-                {
-                    AXIS2_FREE(env->allocator, read_stream);
-                }
+                AXIS2_FREE(env->allocator, read_stream);
             }
         }
         while (!feof(f));
@@ -286,6 +281,11 @@
         *output_stream = byte_stream;
         *output_stream_size = byte_stream_size;
     }
+    else
+    {
+        /* Data Handler File Name is missing */
+        return AXIS2_FAILURE;
+    }
 
     return AXIS2_SUCCESS;
 }
@@ -297,9 +297,6 @@
     axis2_byte_t * input_stream,
     int input_stream_len)
 {
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    data_handler = data_handler;
-
     data_handler->buffer = input_stream;
     data_handler->buffer_len = input_stream_len;
     return AXIS2_SUCCESS;
@@ -310,8 +307,6 @@
     axiom_data_handler_t * data_handler,
     const axutil_env_t * env)
 {
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-
     if (data_handler->file_name)
     {
         FILE *f = NULL;
@@ -321,16 +316,17 @@
         if (!f)
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                            " error opening file %s for writing ",
-                            data_handler->file_name);
+               "Error opening file %s for writing", data_handler->file_name);
             return AXIS2_FAILURE;
         }
 
-        count = (int)fwrite(data_handler->buffer, 1, data_handler->buffer_len, f);
-        /* We are sure that the difference lies within the int range */
+        count = (int)fwrite(data_handler->buffer, 1,
+            data_handler->buffer_len, f);
+        /* The count lies within the int range */
 
-        if (ferror(f) != 0)
+        if (ferror(f))
         {
+            fclose(f);
             return AXIS2_FAILURE;
         }
         fflush(f);
@@ -346,11 +342,10 @@
     const axutil_env_t * env,
     axis2_char_t * file_name)
 {
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-
     if (data_handler->file_name)
     {
         AXIS2_FREE(env->allocator, data_handler->file_name);
+        data_handler->file_name = NULL;
     }
 
     if (file_name)
@@ -358,8 +353,8 @@
         data_handler->file_name = axutil_strdup(env, file_name);
         if (!(data_handler->file_name))
         {
-            axiom_data_handler_free(data_handler, env);
             AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Not enough memory");
             return AXIS2_FAILURE;
         }
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org