summaryrefslogtreecommitdiff
path: root/ext/pgsql/pgsql.c
diff options
context:
space:
mode:
authorYasuo Ohgaki <yohgaki@php.net>2002-04-20 03:37:01 +0000
committerYasuo Ohgaki <yohgaki@php.net>2002-04-20 03:37:01 +0000
commitd845ba2077b99801b120ffdbe245dde79489bb7c (patch)
tree07d304febc7005b6ba0ebc29b7ec82cca4929884 /ext/pgsql/pgsql.c
parent07125ea9f48b1510f78fd7bf82db15e52f9ed1ae (diff)
downloadphp-git-d845ba2077b99801b120ffdbe245dde79489bb7c.tar.gz
Some cleanup.
More OID range related fixes. # Need a little more work for OID
Diffstat (limited to 'ext/pgsql/pgsql.c')
-rw-r--r--ext/pgsql/pgsql.c48
1 files changed, 23 insertions, 25 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 201f04eed4..91037c34ca 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -1480,7 +1480,7 @@ PHP_FUNCTION(pg_last_oid)
zval **result;
PGresult *pgsql_result;
pgsql_result_handle *pg_result;
- uint oid;
+ Oid oid;
char *oid_str;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
@@ -1496,20 +1496,15 @@ PHP_FUNCTION(pg_last_oid)
} else if (oid > LONG_MAX) {
oid_str = (char *)emalloc(PGSQL_MAX_LENGTH_OF_LONG+1);
sprintf(oid_str, "%l", oid);
- RETVAL_STRING(oid_str, 0);
- }
- else {
- RETVAL_LONG((long)oid);
+ RETURN_STRING(oid_str, 0);
}
+ RETURN_LONG((long)oid);
#else
Z_STRVAL_P(return_value) = (char *) PQoidStatus(pgsql_result);
- Z_TYPE_P(return_value) = IS_STRING;
if (Z_STRVAL_P(return_value)) {
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
- } else {
- Z_STRVAL_P(return_value) = empty_string;
+ RETURN_STRING((Z_STRVAL_P(return_value), 1);
}
+ RETURN_STRING(empty_string, 0);
#endif
}
/* }}} */
@@ -1608,6 +1603,7 @@ PHP_FUNCTION(pg_lo_create)
zval **pgsql_link = NULL;
PGconn *pgsql;
Oid pgsql_oid;
+ char *oid_str;
int id = -1;
switch(ZEND_NUM_ARGS()) {
@@ -1635,14 +1631,17 @@ PHP_FUNCTION(pg_lo_create)
the object, probably (?) overrides this. (Jouni)
*/
- if ((pgsql_oid = lo_creat(pgsql, INV_READ|INV_WRITE))==0) {
+ if ((pgsql_oid = lo_creat(pgsql, INV_READ|INV_WRITE)) == InvalidOid) {
php_error(E_WARNING, "%s() unable to create PostgreSQL large object",
get_active_function_name(TSRMLS_C));
RETURN_FALSE;
}
-
- Z_LVAL_P(return_value) = pgsql_oid;
- Z_TYPE_P(return_value) = IS_LONG;
+ if (pgsql_oid > LONG_MAX) {
+ oid_str = (char *)emalloc(PGSQL_MAX_LENGTH_OF_LONG+1);
+ sprintf(oid_str, "%l", pgsql_oid);
+ RETURN_STRING(oid_str, 0);
+ }
+ RETURN_LONG((long)pgsql_oid);
}
/* }}} */
@@ -1747,7 +1746,6 @@ PHP_FUNCTION(pg_lo_open)
}
}
-
pgsql_lofp = (pgLofp *) emalloc(sizeof(pgLofp));
if ((pgsql_lofd = lo_open(pgsql, pgsql_oid, pgsql_mode)) == -1) {
@@ -1786,10 +1784,6 @@ PHP_FUNCTION(pg_lo_open)
pgsql_lofp->conn = pgsql;
pgsql_lofp->lofd = pgsql_lofd;
ZEND_REGISTER_RESOURCE(return_value, pgsql_lofp, le_lofp);
- /*
- Z_LVAL_P(return_value) = zend_list_insert(pgsql_lofp, le_lofp);
- Z_TYPE_P(return_value) = IS_LONG;
- */
}
}
/* }}} */
@@ -1822,7 +1816,7 @@ PHP_FUNCTION(pg_lo_close)
RETVAL_TRUE;
}
- zend_list_delete(Z_LVAL_PP(pgsql_lofp));
+ zend_list_delete(Z_RESVAL_PP(pgsql_lofp));
return;
}
/* }}} */
@@ -1854,7 +1848,7 @@ PHP_FUNCTION(pg_lo_read)
RETURN_FALSE;
}
- buf[nbytes] = 0;
+ buf[nbytes] = '\0';
RETURN_STRINGL(buf, nbytes, 0);
}
/* }}} */
@@ -1934,7 +1928,7 @@ PHP_FUNCTION(pg_lo_read_all)
PHP_FUNCTION(pg_lo_import)
{
zval *pgsql_link = NULL;
- char *file_in;
+ char *file_in, *oid_str;
int id = -1, name_len;
int argc = ZEND_NUM_ARGS();
PGconn *pgsql;
@@ -1965,11 +1959,15 @@ PHP_FUNCTION(pg_lo_import)
oid = lo_import(pgsql, file_in);
- if (oid > 0) {
- RETURN_LONG((int)oid);
- } else {
+ if (oid == InvalidOid) {
RETURN_FALSE;
+ }
+ if (oid > LONG_MAX) {
+ oid_str = (char *)emalloc(PGSQL_MAX_LENGTH_OF_LONG+1);
+ sprintf(oid_str, "%l", oid);
+ RETURN_STRING(oid_str, 0);
}
+ RETURN_LONG((long)oid);
}
/* }}} */