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 sh...@apache.org on 2009/09/10 13:43:31 UTC
svn commit: r813383 -
/webservices/axis2/trunk/c/guththila/src/guththila_xml_parser.c
Author: shankar
Date: Thu Sep 10 11:43:30 2009
New Revision: 813383
URL: http://svn.apache.org/viewvc?rev=813383&view=rev
Log:
fixing issue AXIS2C-1356
Modified:
webservices/axis2/trunk/c/guththila/src/guththila_xml_parser.c
Modified: webservices/axis2/trunk/c/guththila/src/guththila_xml_parser.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/guththila/src/guththila_xml_parser.c?rev=813383&r1=813382&r2=813383&view=diff
==============================================================================
--- webservices/axis2/trunk/c/guththila/src/guththila_xml_parser.c (original)
+++ webservices/axis2/trunk/c/guththila/src/guththila_xml_parser.c Thu Sep 10 11:43:30 2009
@@ -1628,53 +1628,57 @@
else if(m->buffer.cur_buff != -1 && m->next >= GUTHTHILA_BUFFER_PRE_DATA_SIZE(m->buffer)
+ GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer))
{
- /* We are sure that the difference lies within the int range */
- if(m->buffer.cur_buff == (int)m->buffer.no_buffers - 1)
+ /* if we have don't have enough space in current buffer, have to create new buffer */
+ if(m->buffer.buffs_size[m->buffer.cur_buff] <
+ GUTHTHILA_BUFFER_CURRENT_DATA_SIZE(m->buffer) + GUTHTHILA_BUFFER_DEF_SIZE)
{
- /* we are out of allocated buffers. Need to allocate more buffers */
- temp = m->buffer.no_buffers * 2;
- temp1 = (guththila_char_t **)AXIS2_MALLOC(env->allocator,
- sizeof(guththila_char_t *) * temp);
- temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp);
- temp3 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp);
- if(!temp1 || !temp2 || !temp3)
- return (-1);
- for(i = 0; i < m->buffer.no_buffers; i++)
+ if(m->buffer.cur_buff == (int)m->buffer.no_buffers - 1)
{
- temp1[i] = m->buffer.buff[i];
- temp2[i] = m->buffer.buffs_size[i];
- temp3[i] = m->buffer.data_size[i];
+ /* we are out of allocated buffers. Need to allocate more buffers */
+ temp = m->buffer.no_buffers * 2;
+ temp1 = (guththila_char_t **)AXIS2_MALLOC(env->allocator,
+ sizeof(guththila_char_t *) * temp);
+ temp2 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp);
+ temp3 = (size_t *)AXIS2_MALLOC(env->allocator, sizeof(size_t) * temp);
+ if(!temp1 || !temp2 || !temp3)
+ return (-1);
+ for(i = 0; i < m->buffer.no_buffers; i++)
+ {
+ temp1[i] = m->buffer.buff[i];
+ temp2[i] = m->buffer.buffs_size[i];
+ temp3[i] = m->buffer.data_size[i];
+ }
+ AXIS2_FREE(env->allocator, m->buffer.buff);
+ AXIS2_FREE(env->allocator, m->buffer.data_size);
+ AXIS2_FREE(env->allocator, m->buffer.buffs_size);
+ m->buffer.buff = temp1;
+ m->buffer.buffs_size = temp2;
+ m->buffer.data_size = temp3;
+ m->buffer.no_buffers *= 2;
}
- AXIS2_FREE(env->allocator, m->buffer.buff);
- AXIS2_FREE(env->allocator, m->buffer.data_size);
- AXIS2_FREE(env->allocator, m->buffer.buffs_size);
- m->buffer.buff = temp1;
- m->buffer.buffs_size = temp2;
- m->buffer.data_size = temp3;
- m->buffer.no_buffers *= 2;
- }
- m->buffer.buff[m->buffer.cur_buff + 1] = (guththila_char_t *)AXIS2_MALLOC(
- env->allocator, sizeof(guththila_char_t) * m->buffer.buffs_size[m->buffer.cur_buff]
- * 2);
- if(!m->buffer.buff[m->buffer.cur_buff + 1])
- return -1;
- m->buffer.cur_buff++;
- m->buffer.buffs_size[m->buffer.cur_buff] = m->buffer.buffs_size[m->buffer.cur_buff - 1]
- * 2;
- m->buffer.data_size[m->buffer.cur_buff] = 0;
- /* We need to have the content for one token in a single buffer.
- * So if the space is not sufficient we have to move first part
- * of the token to the next buffer */
- if(m->last_start != -1)
- {
- data_move = m->buffer.data_size[m->buffer.cur_buff - 1] - (m->last_start
- - m->buffer.pre_tot_data);
- memcpy(m->buffer.buff[m->buffer.cur_buff], m->buffer.buff[m->buffer.cur_buff - 1]
- + m->buffer.data_size[m->buffer.cur_buff - 1] - data_move, data_move);
- m->buffer.data_size[m->buffer.cur_buff - 1] -= data_move;
- m->buffer.data_size[m->buffer.cur_buff] += data_move;
+ m->buffer.buff[m->buffer.cur_buff + 1] = (guththila_char_t *)AXIS2_MALLOC(
+ env->allocator,
+ sizeof(guththila_char_t) * m->buffer.buffs_size[m->buffer.cur_buff] * 2);
+ if(!m->buffer.buff[m->buffer.cur_buff + 1])
+ return -1;
+ m->buffer.cur_buff++;
+ m->buffer.buffs_size[m->buffer.cur_buff] =
+ m->buffer.buffs_size[m->buffer.cur_buff - 1] * 2;
+ m->buffer.data_size[m->buffer.cur_buff] = 0;
+ /* We need to have the content for one token in a single buffer.
+ * So if the space is not sufficient we have to move first part
+ * of the token to the next buffer */
+ if(m->last_start != -1)
+ {
+ data_move = m->buffer.data_size[m->buffer.cur_buff - 1] -
+ (m->last_start - m->buffer.pre_tot_data);
+ memcpy(m->buffer.buff[m->buffer.cur_buff], m->buffer.buff[m->buffer.cur_buff - 1]
+ + m->buffer.data_size[m->buffer.cur_buff - 1] - data_move, data_move);
+ m->buffer.data_size[m->buffer.cur_buff - 1] -= data_move;
+ m->buffer.data_size[m->buffer.cur_buff] += data_move;
+ }
+ m->buffer.pre_tot_data += m->buffer.data_size[m->buffer.cur_buff - 1];
}
- m->buffer.pre_tot_data += m->buffer.data_size[m->buffer.cur_buff - 1];
temp = guththila_reader_read(m->reader, GUTHTHILA_BUFFER_CURRENT_BUFF(m->buffer), 0,
(int)GUTHTHILA_BUFFER_CURRENT_BUFF_SIZE(m->buffer), env);
if(temp > 0)