static void impl_MateComponent_Canvas_Component_render (PortableServer_Servant servant, MateComponent_Canvas_Buf *buf, CORBA_Environment *ev) { Gcc *gcc = GCC (matecomponent_object_from_servant (servant)); MateCanvasItem *item = MATE_CANVAS_ITEM (gcc->priv->item); MateCanvasBuf canvas_buf; if (!(buf->flags & MateComponent_Canvas_IS_BUF)) { buf->rgb_buf._length = buf->row_stride * (buf->rect.y1 - buf->rect.y0); buf->rgb_buf._maximum = buf->rgb_buf._length; buf->rgb_buf._buffer = CORBA_sequence_CORBA_octet_allocbuf ( buf->rgb_buf._length); CORBA_sequence_set_release (&buf->rgb_buf, TRUE); if (buf->rgb_buf._buffer == NULL) { CORBA_exception_set_system ( ev, ex_CORBA_NO_MEMORY, CORBA_COMPLETED_NO); return; } } canvas_buf.buf = buf->rgb_buf._buffer; canvas_buf.buf_rowstride = buf->row_stride; canvas_buf.rect.x0 = buf->rect.x0; canvas_buf.rect.x1 = buf->rect.x1; canvas_buf.rect.y0 = buf->rect.y0; canvas_buf.rect.y1 = buf->rect.y1; canvas_buf.bg_color = buf->bg_color; if (buf->flags & MateComponent_Canvas_IS_BG) canvas_buf.is_bg = 1; else canvas_buf.is_bg = 0; if (buf->flags & MateComponent_Canvas_IS_BUF) canvas_buf.is_buf = 1; else canvas_buf.is_buf = 0; ICLASS (item)->render (item, &canvas_buf); /* return */ buf->flags = (canvas_buf.is_bg ? MateComponent_Canvas_IS_BG : 0) | (canvas_buf.is_buf ? MateComponent_Canvas_IS_BUF : 0); }
/* taken from Mico ORB */ static MateCORBA_ObjectKey* matecorba_url_decode (const char * ptr) { MateCORBA_ObjectKey *retval = NULL; guchar * buf = NULL; retval = CORBA_sequence_CORBA_octet__alloc (); retval->_length = 0; retval->_maximum = strlen (ptr)+1; retval->_buffer = CORBA_sequence_CORBA_octet_allocbuf (retval->_maximum); retval->_release = CORBA_TRUE; buf = retval->_buffer; while (*ptr) { if (*ptr == '%') { if (!isxdigit((unsigned char)ptr[1]) || !isxdigit((unsigned char)ptr[2])) { CORBA_free (retval); return NULL; } *buf = (matecorba_from_xdigit(ptr[1])<<4 | matecorba_from_xdigit(ptr[2])); ptr += 3; } else { *buf = *ptr++; } buf++; (retval->_length)++; } /* * Null-terminate the result so that it can be used as a * string. The null is deliberately not added to the length, * because it isn't part of the string. */ *buf = 0; return retval; }
static void mem_read (PortableServer_Servant servant, CORBA_long count, Bonobo_Stream_iobuf ** buffer, CORBA_Environment *ev) { BonoboStreamMem *smem = BONOBO_STREAM_MEM ( bonobo_object (servant)); if (smem->pos + count > smem->size) count = smem->size - smem->pos; *buffer = Bonobo_Stream_iobuf__alloc (); CORBA_sequence_set_release (*buffer, TRUE); (*buffer)->_buffer = CORBA_sequence_CORBA_octet_allocbuf (count); (*buffer)->_length = count; memcpy ((*buffer)->_buffer, smem->buffer + smem->pos, count); smem->pos += count; }
static void cache_read (PortableServer_Servant servant, CORBA_long count, MateComponent_Stream_iobuf **buffer, CORBA_Environment *ev) { MateComponentStreamCache *stream_cache = MATECOMPONENT_STREAM_CACHE ( matecomponent_object (servant)); CORBA_octet *data; if (count < 0) { matecomponent_exception_set (ev, ex_MateComponent_Stream_IOError); return; } *buffer = MateComponent_Stream_iobuf__alloc (); CORBA_sequence_set_release (*buffer, TRUE); data = CORBA_sequence_CORBA_octet_allocbuf (count); (*buffer)->_buffer = data; (*buffer)->_length = matecomponent_stream_cache_read (stream_cache, count, data, ev); }