'{',
' msg->%s_length++;' % name,
' if (msg->%s_length >= msg->%s_num_allocated) { ' % (name, name),
- ' if (!msg->%s_num_allocated) ' % name,
- ' msg->%s_num_allocated = 1; ' % name,
+ ' struct %s** new_data = NULL; ' % self._refname,
+ ' int tobe_allocated = msg->%s_num_allocated; ' % name,
+ ' if (!tobe_allocated) ',
+ ' tobe_allocated = 1; ',
' else ',
- ' msg->%s_num_allocated <<= 1; ' % name,
- ' msg->%s_data = (struct %s**)realloc(msg->%s_data, '
- ' msg->%s_num_allocated * sizeof(struct %s*));' % (
- name, self._refname, name, name, self._refname ),
+ ' tobe_allocated <<= 1; ',
+ ' new_data = (struct %s**)realloc(msg->%s_data, '
+ 'tobe_allocated * sizeof(struct %s*));' % (
+ self._refname, name, self._refname ),
+ ' if (new_data == NULL) {',
+ ' --msg->%s_length;' % name,
+ ' return (NULL);',
+ ' }',
+ ' msg->%s_data = new_data;' % name,
+ ' msg->%s_num_allocated = tobe_allocated;' % name,
' }',
- ' if (msg->%s_data == NULL)' % name,
- ' return (NULL);',
' msg->%s_data[msg->%s_length - 1] = %s_new();' % (
name, name, self._refname),
' if (msg->%s_data[msg->%s_length - 1] == NULL) {' % (name, name),
- ' msg->%s_length--; ' % name,
+ ' --msg->%s_length; ' % name,
' return (NULL);',
' }',
' msg->%s_set = 1;' % name,