diff options
author | Zeev Suraski <zeev@php.net> | 2001-09-26 21:44:48 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2001-09-26 21:44:48 +0000 |
commit | dd01c11ee3a6045dc04cdb16ca8d5fa4022a8c37 (patch) | |
tree | 0cf6d1f814ca8838af5509e6e43542cca004197a | |
parent | 51e2a6b84e05a49ad328cb83e3e0051749808171 (diff) | |
download | php-git-dd01c11ee3a6045dc04cdb16ca8d5fa4022a8c37.tar.gz |
Fix pg_last_notice()
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/pgsql/pgsql.c | 22 | ||||
-rw-r--r-- | ext/pgsql/php_pgsql.h | 1 |
3 files changed, 13 insertions, 11 deletions
@@ -24,6 +24,7 @@ PHP 4.0 NEWS - Improved support for autoconf-2.50+/libtool 1.4b+. (Jan Kneschke, Sascha) ?? ??? 200?, Version 4.0.7 +- Fixed pg_last_notice() (Zeev) - Fixed DOM-XML's error reporting, so E_WARNING errors are given instead of E_ERROR error's, this allows you to trap errors thrown by DOMXML functions. (Sterling) diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 5c7626ac67..495a98f4e2 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -160,25 +160,22 @@ static void _close_pgsql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC) PQfinish(link); PGG(num_persistent)--; PGG(num_links)--; - if(PGG(last_notice) != NULL) { - efree(PGG(last_notice)); - } } /* }}} */ /* {{{ _notice_handler */ -static void -_notice_handler(void *arg, const char *message) +static void _notice_handler(void *arg, const char *message) { TSRMLS_FETCH(); if (! PGG(ignore_notices)) { php_log_err((char *) message TSRMLS_CC); - if (PGG(last_notice) != NULL) { + if (PGG(last_notice)) { efree(PGG(last_notice)); } - PGG(last_notice) = estrdup(message); + PGG(last_notice_len) = strlen(message); + PGG(last_notice) = estrndup(message, PGG(last_notice_len)); } } /* }}} */ @@ -237,7 +234,6 @@ static void php_pgsql_init_globals(php_pgsql_globals *pgsql_globals_p TSRMLS_DC) { PGG(num_persistent) = 0; PGG(ignore_notices) = 0; - PGG(last_notice) = NULL; } /* }}} */ @@ -283,6 +279,7 @@ PHP_RINIT_FUNCTION(pgsql) { PGG(default_link)=-1; PGG(num_links) = PGG(num_persistent); + PGG(last_notice) = NULL; return SUCCESS; } /* }}} */ @@ -291,6 +288,9 @@ PHP_RINIT_FUNCTION(pgsql) */ PHP_RSHUTDOWN_FUNCTION(pgsql) { + if (PGG(last_notice)) { + efree(PGG(last_notice)); + } zend_hash_apply(&EG(persistent_list), (apply_func_t) _rollback_transactions TSRMLS_CC); return SUCCESS; } @@ -923,10 +923,10 @@ PHP_FUNCTION(pg_cmdtuples) Returns the last notice set by the backend */ PHP_FUNCTION(pg_last_notice) { - if (PGG(last_notice) == NULL) { - RETURN_FALSE; + if (PGG(last_notice)) { + RETURN_STRINGL(PGG(last_notice), PGG(last_notice_len), 0); } else { - RETURN_STRING(PGG(last_notice),0); + RETURN_FALSE; } } /* }}} */ diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h index 4dc190f3c9..f9295ac991 100644 --- a/ext/pgsql/php_pgsql.h +++ b/ext/pgsql/php_pgsql.h @@ -123,6 +123,7 @@ typedef struct { int le_lofp,le_string; int ignore_notices; char *last_notice; + uint last_notice_len; } php_pgsql_globals; |