* lo_truncate64 * truncates an existing large object to the given size * * returns 0 upon success * returns -1 upon failure */
| 194 | * returns -1 upon failure |
| 195 | */ |
| 196 | int |
| 197 | lo_truncate64(PGconn *conn, int fd, pg_int64 len) |
| 198 | { |
| 199 | PQArgBlock argv[2]; |
| 200 | PGresult *res; |
| 201 | int retval; |
| 202 | int result_len; |
| 203 | |
| 204 | if (lo_initialize(conn) < 0) |
| 205 | return -1; |
| 206 | |
| 207 | if (conn->lobjfuncs->fn_lo_truncate64 == 0) |
| 208 | { |
| 209 | appendPQExpBuffer(&conn->errorMessage, |
| 210 | libpq_gettext("cannot determine OID of function %s\n"), |
| 211 | "lo_truncate64"); |
| 212 | return -1; |
| 213 | } |
| 214 | |
| 215 | argv[0].isint = 1; |
| 216 | argv[0].len = 4; |
| 217 | argv[0].u.integer = fd; |
| 218 | |
| 219 | len = lo_hton64(len); |
| 220 | argv[1].isint = 0; |
| 221 | argv[1].len = 8; |
| 222 | argv[1].u.ptr = (int *) &len; |
| 223 | |
| 224 | res = PQfn(conn, conn->lobjfuncs->fn_lo_truncate64, |
| 225 | &retval, &result_len, 1, argv, 2); |
| 226 | |
| 227 | if (PQresultStatus(res) == PGRES_COMMAND_OK) |
| 228 | { |
| 229 | PQclear(res); |
| 230 | return retval; |
| 231 | } |
| 232 | else |
| 233 | { |
| 234 | PQclear(res); |
| 235 | return -1; |
| 236 | } |
| 237 | } |
| 238 | |
| 239 | /* |
| 240 | * lo_read |