mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
@ 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:
parent
d4b3b6d536
commit
04908b1415
@ -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);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user