+ if( !src_len ) {
+ // why?
+ }
+ // Quick and evil option - allocate temp buffer, udi_buf_read + udi_buf_write
+ void *tmp = malloc(src_len);
+ udi_buf_read(src_buf, src_off, src_len, tmp);
+
+ void tmp_callback(udi_cb_t *gcb, udi_buf_t *new_buf) {
+ dst_buf = new_buf;
+ }
+
+ udi_buf_write(tmp_callback, NULL, tmp, src_len, dst_buf, dst_off, dst_len, path_handle);
+ free(tmp);
+
+ if( callback ) {
+ callback(gcb, dst_buf);
+ }