| 75 | } |
| 76 | |
| 77 | static void |
| 78 | pickout(PGconn *conn, Oid lobjId, pg_int64 start, int len) |
| 79 | { |
| 80 | int lobj_fd; |
| 81 | char *buf; |
| 82 | int nbytes; |
| 83 | int nread; |
| 84 | |
| 85 | lobj_fd = lo_open(conn, lobjId, INV_READ); |
| 86 | if (lobj_fd < 0) |
| 87 | fprintf(stderr, "cannot open large object %u", lobjId); |
| 88 | |
| 89 | if (lo_lseek64(conn, lobj_fd, start, SEEK_SET) < 0) |
| 90 | fprintf(stderr, "error in lo_lseek64: %s", PQerrorMessage(conn)); |
| 91 | |
| 92 | if (lo_tell64(conn, lobj_fd) != start) |
| 93 | fprintf(stderr, "error in lo_tell64: %s", PQerrorMessage(conn)); |
| 94 | |
| 95 | buf = malloc(len + 1); |
| 96 | |
| 97 | nread = 0; |
| 98 | while (len - nread > 0) |
| 99 | { |
| 100 | nbytes = lo_read(conn, lobj_fd, buf, len - nread); |
| 101 | buf[nbytes] = '\0'; |
| 102 | fprintf(stderr, ">>> %s", buf); |
| 103 | nread += nbytes; |
| 104 | if (nbytes <= 0) |
| 105 | break; /* no more data? */ |
| 106 | } |
| 107 | free(buf); |
| 108 | fprintf(stderr, "\n"); |
| 109 | lo_close(conn, lobj_fd); |
| 110 | } |
| 111 | |
| 112 | static void |
| 113 | overwrite(PGconn *conn, Oid lobjId, pg_int64 start, int len) |
no test coverage detected