size_t scan_tofrom_array(size_t (*func)(const char*,char*,size_t*), array* src,array* dest) { size_t scanned; size_t needed; char* x; array_cat0(src); if (array_failed(src) || array_failed(dest)) return 0; needed=array_bytes(src); x=((char*)array_start(dest))+array_bytes(dest); if (!array_allocate(dest,1,array_bytes(dest)+needed-1)) return 0; needed=func(array_start(src),x,&scanned); array_truncate(src,1,array_bytes(src)-1); return needed; }
static void http_senddata( const int64 sock, struct ot_workstruct *ws ) { struct http_data *cookie = io_getcookie( sock ); ssize_t written_size; if( !cookie ) { io_close(sock); return; } /* whoever sends data is not interested in its input-array */ if( ws->keep_alive && ws->header_size != ws->request_size ) { size_t rest = ws->request_size - ws->header_size; if( array_start(&cookie->request) ) { memmove( array_start(&cookie->request), ws->request + ws->header_size, rest ); array_truncate( &cookie->request, 1, rest ); } else array_catb(&cookie->request, ws->request + ws->header_size, rest ); } else array_reset( &cookie->request ); written_size = write( sock, ws->reply, ws->reply_size ); if( ( written_size < 0 ) || ( ( written_size == ws->reply_size ) && !ws->keep_alive ) ) { array_reset( &cookie->request ); free( cookie ); io_close( sock ); return; } if( written_size < ws->reply_size ) { char * outbuf; tai6464 t; if( !( outbuf = malloc( ws->reply_size - written_size ) ) ) { array_reset( &cookie->request ); free(cookie); io_close( sock ); return; } memcpy( outbuf, ws->reply + written_size, ws->reply_size - written_size ); iob_addbuf_free( &cookie->batch, outbuf, ws->reply_size - written_size ); /* writeable short data sockets just have a tcp timeout */ if( !ws->keep_alive ) { taia_uint( &t, 0 ); io_timeout( sock, t ); io_dontwantread( sock ); } io_wantwrite( sock ); } }
DLLEXPORT void percentile_disc_clear(UDF_INIT* initid, char* is_null, char *error) { struct Buffer *data = (struct Buffer *) initid->ptr; array_truncate(&data->values); }