/* * call-seq: * conn.getline() * * Reads a line from the backend server into internal buffer. * Returns +nil+ for EOF, +0+ for success, +1+ for buffer overflowed. * You need to ensure single "." from backend to confirm transmission completion. * The sample program <tt>psql.rb</tt> (see source for postgres) treats this copy protocol right. */ static VALUE pgconn_getline(obj) VALUE obj; { PGconn *conn = get_pgconn(obj); VALUE str; long size = BUFSIZ; long bytes = 0; int ret; str = rb_tainted_str_new(0, size); for (;;) { ret = PQgetline(conn, RSTRING(str)->ptr + bytes, size - bytes); switch (ret) { case EOF: return Qnil; case 0: return str; case 1: break; } bytes += BUFSIZ; size += BUFSIZ; rb_str_resize(str, size); } return Qnil; }