@ Made the length argument (argument 2) to pg_loread() optional,

@ if not specified data will be read in 1kb chunks. (Sterling)

@ Added a third argument to pg_lowrite() which is the length of
@ the data to write. (Sterling)
This commit is contained in:
Sterling Hughes 2001-05-27 01:10:36 +00:00
parent d4b3b6d536
commit 04908b1415

View File

@ -1613,69 +1613,70 @@ PHP_FUNCTION(pg_loclose)
}
/* }}} */
/* {{{ proto string pg_loread(int fd, int len)
/* {{{ proto string pg_loread(int fd[, int len])
Read a large object */
PHP_FUNCTION(pg_loread)
{
zval **pgsql_id, **len;
int buf_len, nbytes;
int buf_len = 1024, nbytes;
char *buf;
pgLofp *pgsql;
switch(ZEND_NUM_ARGS()) {
case 2:
if (zend_get_parameters_ex(2, &pgsql_id, &len)==FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(len);
buf_len = Z_LVAL_PP(len);
break;
default:
WRONG_PARAM_COUNT;
break;
if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
zend_get_parameters_ex(ZEND_NUM_ARGS(), &pgsql_id, &len) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
if (ZEND_NUM_ARGS() > 1) {
convert_to_long_ex(len);
buf_len = Z_LVAL_PP(len);
}
buf = (char *) emalloc(sizeof(char)*(buf_len+1));
if ((nbytes = lo_read((PGconn *)pgsql->conn, pgsql->lofd, buf, buf_len))<0) {
efree(buf);
RETURN_FALSE;
}
return_value->value.str.val = buf;
return_value->value.str.len = nbytes;
return_value->value.str.val[nbytes] = 0;
return_value->type = IS_STRING;
buf[nbytes] = 0;
RETURN_STRINGL(buf, nbytes, 0);
}
/* }}} */
/* {{{ proto int pg_lowrite(int fd, string buf)
/* {{{ proto int pg_lowrite(int fd, string buf[, int len])
Write a large object */
PHP_FUNCTION(pg_lowrite)
{
zval **pgsql_id, **str;
zval **pgsql_id, **str, **z_len;
int nbytes;
int len;
pgLofp *pgsql;
int argc = ZEND_NUM_ARGS();
switch(ZEND_NUM_ARGS()) {
case 2:
if (zend_get_parameters_ex(2, &pgsql_id, &str)==FAILURE) {
RETURN_FALSE;
}
convert_to_string_ex(str);
break;
default:
WRONG_PARAM_COUNT;
break;
if (argc < 2 || argc > 3 ||
zend_get_parameters_ex(argc, &pgsql_id, &str, &z_len) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(str);
if (argc > 2) {
convert_to_long_ex(z_len);
len = Z_LVAL_PP(z_len);
}
else {
len = Z_STRLEN_PP(str);
}
ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
if ((nbytes = lo_write((PGconn *)pgsql->conn, pgsql->lofd, Z_STRVAL_PP(str), Z_STRLEN_PP(str))) == -1) {
if ((nbytes = lo_write((PGconn *)pgsql->conn, pgsql->lofd, Z_STRVAL_PP(str), len)) == -1) {
RETURN_FALSE;
}
return_value->value.lval = nbytes;
return_value->type = IS_LONG;
RETURN_LONG(nbytes);
}
/* }}} */