/*
 * 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;
}