From f43b5de649cdf8a36f7d90a96932800cb0e34162 Mon Sep 17 00:00:00 2001 From: Hiroshi Inoue Date: Fri, 11 Jan 2002 02:50:01 +0000 Subject: Add a directory to save the changes until 7.3-tree is branched. --- src/interfaces/odbc/windev/lobj.c | 186 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 src/interfaces/odbc/windev/lobj.c (limited to 'src/interfaces/odbc/windev/lobj.c') diff --git a/src/interfaces/odbc/windev/lobj.c b/src/interfaces/odbc/windev/lobj.c new file mode 100644 index 00000000000..6b55b82d54e --- /dev/null +++ b/src/interfaces/odbc/windev/lobj.c @@ -0,0 +1,186 @@ +/*-------- + * Module: lobj.c + * + * Description: This module contains routines related to manipulating + * large objects. + * + * Classes: none + * + * API functions: none + * + * Comments: See "notice.txt" for copyright and license information. + *-------- + */ + +#include "lobj.h" + +#include "connection.h" + + +Oid +lo_creat(ConnectionClass *conn, int mode) +{ + LO_ARG argv[1]; + int retval, + result_len; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = mode; + + if (!CC_send_function(conn, LO_CREAT, &retval, &result_len, 1, argv, 1)) + return 0; /* invalid oid */ + else + return retval; +} + + +int +lo_open(ConnectionClass *conn, int lobjId, int mode) +{ + int fd; + int result_len; + LO_ARG argv[2]; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = lobjId; + + argv[1].isint = 1; + argv[1].len = 4; + argv[1].u.integer = mode; + + if (!CC_send_function(conn, LO_OPEN, &fd, &result_len, 1, argv, 2)) + return -1; + + if (fd >= 0 && lo_lseek(conn, fd, 0L, SEEK_SET) < 0) + return -1; + + return fd; +} + + +int +lo_close(ConnectionClass *conn, int fd) +{ + LO_ARG argv[1]; + int retval, + result_len; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = fd; + + if (!CC_send_function(conn, LO_CLOSE, &retval, &result_len, 1, argv, 1)) + return -1; + else + return retval; +} + + +int +lo_read(ConnectionClass *conn, int fd, char *buf, int len) +{ + LO_ARG argv[2]; + int result_len; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = fd; + + argv[1].isint = 1; + argv[1].len = 4; + argv[1].u.integer = len; + + if (!CC_send_function(conn, LO_READ, (int *) buf, &result_len, 0, argv, 2)) + return -1; + else + return result_len; +} + + +int +lo_write(ConnectionClass *conn, int fd, char *buf, int len) +{ + LO_ARG argv[2]; + int retval, + result_len; + + if (len <= 0) + return 0; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = fd; + + argv[1].isint = 0; + argv[1].len = len; + argv[1].u.ptr = (char *) buf; + + if (!CC_send_function(conn, LO_WRITE, &retval, &result_len, 1, argv, 2)) + return -1; + else + return retval; +} + + +int +lo_lseek(ConnectionClass *conn, int fd, int offset, int whence) +{ + LO_ARG argv[3]; + int retval, + result_len; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = fd; + + argv[1].isint = 1; + argv[1].len = 4; + argv[1].u.integer = offset; + + argv[2].isint = 1; + argv[2].len = 4; + argv[2].u.integer = whence; + + if (!CC_send_function(conn, LO_LSEEK, &retval, &result_len, 1, argv, 3)) + return -1; + else + return retval; +} + + +int +lo_tell(ConnectionClass *conn, int fd) +{ + LO_ARG argv[1]; + int retval, + result_len; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = fd; + + if (!CC_send_function(conn, LO_TELL, &retval, &result_len, 1, argv, 1)) + return -1; + else + return retval; +} + + +int +lo_unlink(ConnectionClass *conn, Oid lobjId) +{ + LO_ARG argv[1]; + int retval, + result_len; + + argv[0].isint = 1; + argv[0].len = 4; + argv[0].u.integer = lobjId; + + if (!CC_send_function(conn, LO_UNLINK, &retval, &result_len, 1, argv, 1)) + return -1; + else + return retval; +} -- cgit v1.2.3