| 75 | } |
| 76 | |
| 77 | static void |
| 78 | pickout(PGconn *conn, Oid lobjId, int 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 | lo_lseek(conn, lobj_fd, start, SEEK_SET); |
| 90 | buf = malloc(len + 1); |
| 91 | |
| 92 | nread = 0; |
| 93 | while (len - nread > 0) |
| 94 | { |
| 95 | nbytes = lo_read(conn, lobj_fd, buf, len - nread); |
| 96 | buf[nbytes] = '\0'; |
| 97 | fprintf(stderr, ">>> %s", buf); |
| 98 | nread += nbytes; |
| 99 | if (nbytes <= 0) |
| 100 | break; /* no more data? */ |
| 101 | } |
| 102 | free(buf); |
| 103 | fprintf(stderr, "\n"); |
| 104 | lo_close(conn, lobj_fd); |
| 105 | } |
| 106 | |
| 107 | static void |
| 108 | overwrite(PGconn *conn, Oid lobjId, int start, int len) |