/*
* call-seq:
* conn.lo_read( lo_desc, len ) -> String
*
* Attempts to read _len_ bytes from large object _lo_desc_,
* returns resulting data.
*/
static VALUE
pgconn_loread(VALUE self, VALUE in_lo_desc, VALUE in_len)
{
int ret;
PGconn *conn = get_pgconn(self);
int len = NUM2INT(in_len);
int lo_desc = NUM2INT(in_lo_desc);
VALUE str;
char *buffer;
buffer = ALLOC_N(char, len);
if(buffer == NULL)
rb_raise(rb_eNoMemError, "ALLOC failed!");
if (len < 0){
rb_raise(rb_ePGError,"nagative length %d given", len);
}
if((ret = lo_read(conn, lo_desc, buffer, len)) < 0)
rb_raise(rb_ePGError, "lo_read failed");
if(ret == 0) {
xfree(buffer);
return Qnil;
}
str = rb_tainted_str_new(buffer, len);
xfree(buffer);
return str;
}