]> granicus.if.org Git - php/commitdiff
Fix pg_last_notice()
authorZeev Suraski <zeev@php.net>
Wed, 26 Sep 2001 21:44:48 +0000 (21:44 +0000)
committerZeev Suraski <zeev@php.net>
Wed, 26 Sep 2001 21:44:48 +0000 (21:44 +0000)
NEWS
ext/pgsql/pgsql.c
ext/pgsql/php_pgsql.h

diff --git a/NEWS b/NEWS
index 097aa4a1eb2ea92e983d6cbc0464889b8d58fe6b..fca0893778aa2f4d586febb78f7cd88b372adc7e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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)
index 5c7626ac678b1662d0d6de04f2dc9aef8f9e95bb..495a98f4e21c1ec98c973328577c1d07db098343 100644 (file)
@@ -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;
        }
 }
 /* }}} */
index 4dc190f3c9cc04bc3bdc3cbd75db69aff7ff9856..f9295ac99195f8a689a0dad462783addb2d54ed3 100644 (file)
@@ -123,6 +123,7 @@ typedef struct {
        int le_lofp,le_string;
        int ignore_notices;
        char *last_notice;
+       uint last_notice_len;
 } php_pgsql_globals;