prepare v2.2.3
[m6w6/ext-pq] / src / php_pqlob.c
index 01c0ec2717f273f40240b690d97969704b3cf915..a419390119d1f7aa23b0e63f38f305b517b54da6 100644 (file)
@@ -61,14 +61,14 @@ static zend_object *php_pqlob_create_object(zend_class_entry *class_type)
        return &php_pqlob_create_object_ex(class_type, NULL)->zo;
 }
 
-static void php_pqlob_object_read_transaction(zval *object, void *o, zval *return_value)
+static void php_pqlob_object_read_transaction(void *o, zval *return_value)
 {
        php_pqlob_object_t *obj = o;
 
        php_pq_object_to_zval(obj->intern->txn, return_value);
 }
 
-static void php_pqlob_object_gc_transaction(zval *object, void *o, zval *return_value)
+static void php_pqlob_object_gc_transaction(void *o, zval *return_value)
 {
        php_pqlob_object_t *obj = o;
        zval ztxn;
@@ -77,22 +77,22 @@ static void php_pqlob_object_gc_transaction(zval *object, void *o, zval *return_
        add_next_index_zval(return_value, &ztxn);
 }
 
-static void php_pqlob_object_read_oid(zval *object, void *o, zval *return_value)
+static void php_pqlob_object_read_oid(void *o, zval *return_value)
 {
        php_pqlob_object_t *obj = o;
 
        RETVAL_LONG(obj->intern->loid);
 }
 
-static void php_pqlob_object_update_stream(zval *this_ptr, php_pqlob_object_t *obj, zval *zstream);
+static void php_pqlob_object_update_stream(php_pqlob_object_t *obj, zval *zstream);
 
-static void php_pqlob_object_read_stream(zval *object, void *o, zval *return_value)
+static void php_pqlob_object_read_stream(void *o, zval *return_value)
 {
        php_pqlob_object_t *obj = o;
        zval zstream;
 
        if (!obj->intern->stream) {
-               php_pqlob_object_update_stream(object, obj, &zstream);
+               php_pqlob_object_update_stream(obj, &zstream);
        } else {
                php_stream_to_zval(obj->intern->stream, &zstream);
        }
@@ -100,28 +100,40 @@ static void php_pqlob_object_read_stream(zval *object, void *o, zval *return_val
        RETVAL_ZVAL(&zstream, 1, 0);
 }
 
-static size_t php_pqlob_stream_write(php_stream *stream, const char *buffer, size_t length TSRMLS_DC)
+#if PHP_VERSION_ID < 70400
+static size_t php_pqlob_stream_write(php_stream *stream, const char *buffer, size_t length)
+#else
+static ssize_t php_pqlob_stream_write(php_stream *stream, const char *buffer, size_t length)
+#endif
 {
        php_pqlob_object_t *obj = stream->abstract;
-       int written = 0;
+       ssize_t written = 0;
 
        if (obj) {
                written = lo_write(obj->intern->txn->intern->conn->intern->conn, obj->intern->lofd, buffer, length);
 
                if (written < 0) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write to LOB with oid=%u (%s)", obj->intern->loid, PHP_PQerrorMessage(obj->intern->txn->intern->conn->intern->conn));
+                       php_error_docref(NULL, E_WARNING, "Failed to write to LOB with oid=%u (%s)", obj->intern->loid, PHP_PQerrorMessage(obj->intern->txn->intern->conn->intern->conn));
                }
 
-               php_pqconn_notify_listeners(obj->intern->txn->intern->conn TSRMLS_CC);
+               php_pqconn_notify_listeners(obj->intern->txn->intern->conn);
        }
 
+#if PHP_VERSION_ID < 70400
+       return (written < 0 ? 0 : written);
+#else
        return written;
+#endif
 }
 
-static size_t php_pqlob_stream_read(php_stream *stream, char *buffer, size_t length TSRMLS_DC)
+#if PHP_VERSION_ID < 70400
+static size_t php_pqlob_stream_read(php_stream *stream, char *buffer, size_t length)
+#else
+static ssize_t php_pqlob_stream_read(php_stream *stream, char *buffer, size_t length)
+#endif
 {
        php_pqlob_object_t *obj = stream->abstract;
-       int read = 0;
+       ssize_t read = 0;
 
        if (obj) {
 
@@ -133,27 +145,31 @@ static size_t php_pqlob_stream_read(php_stream *stream, char *buffer, size_t len
                        read = lo_read(obj->intern->txn->intern->conn->intern->conn, obj->intern->lofd, buffer, length);
 
                        if (read < 0) {
-                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to read from LOB with oid=%d (%s)", obj->intern->loid, PHP_PQerrorMessage(obj->intern->txn->intern->conn->intern->conn));
+                               php_error_docref(NULL, E_WARNING, "Failed to read from LOB with oid=%d (%s)", obj->intern->loid, PHP_PQerrorMessage(obj->intern->txn->intern->conn->intern->conn));
                        }
                }
 
-               php_pqconn_notify_listeners(obj->intern->txn->intern->conn TSRMLS_CC);
+               php_pqconn_notify_listeners(obj->intern->txn->intern->conn);
        }
 
+#if PHP_VERSION_ID < 70400
+       return (read < 0 ? 0 : read);
+#else
        return read;
+#endif
 }
 
-static ZEND_RESULT_CODE php_pqlob_stream_close(php_stream *stream, int close_handle TSRMLS_DC)
+static ZEND_RESULT_CODE php_pqlob_stream_close(php_stream *stream, int close_handle)
 {
        return SUCCESS;
 }
 
-static int php_pqlob_stream_flush(php_stream *stream TSRMLS_DC)
+static int php_pqlob_stream_flush(php_stream *stream)
 {
        return SUCCESS;
 }
 
-static ZEND_RESULT_CODE php_pqlob_stream_seek(php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC)
+static ZEND_RESULT_CODE php_pqlob_stream_seek(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset)
 {
        ZEND_RESULT_CODE rv = FAILURE;
        php_pqlob_object_t *obj = stream->abstract;
@@ -162,14 +178,14 @@ static ZEND_RESULT_CODE php_pqlob_stream_seek(php_stream *stream, off_t offset,
                int position = lo_lseek(obj->intern->txn->intern->conn->intern->conn, obj->intern->lofd, offset, whence);
 
                if (position < 0) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to seek offset in LOB with oid=%d (%s)", obj->intern->loid, PHP_PQerrorMessage(obj->intern->txn->intern->conn->intern->conn));
+                       php_error_docref(NULL, E_WARNING, "Failed to seek offset in LOB with oid=%d (%s)", obj->intern->loid, PHP_PQerrorMessage(obj->intern->txn->intern->conn->intern->conn));
                        rv = FAILURE;
                } else {
                        *newoffset = position;
                        rv = SUCCESS;
                }
 
-               php_pqconn_notify_listeners(obj->intern->txn->intern->conn TSRMLS_CC);
+               php_pqconn_notify_listeners(obj->intern->txn->intern->conn);
        }
 
        return rv;
@@ -191,20 +207,22 @@ static php_stream_ops php_pqlob_stream_ops = {
        NULL, /* set_option */
 };
 
-static void php_pqlob_object_update_stream(zval *zpqlob, php_pqlob_object_t *obj, zval *zstream)
+static void php_pqlob_object_update_stream(php_pqlob_object_t *obj, zval *zstream)
 {
-       zval zmember;
+       zval zobj, zmember;
 
        ZVAL_STRINGL(&zmember, "stream", sizeof("stream")-1);
 
-       if (!obj) {
-               obj = PHP_PQ_OBJ(zpqlob, NULL);
-       }
        obj->intern->stream = php_stream_alloc(&php_pqlob_stream_ops, obj, NULL, "r+b");
        obj->intern->stream->flags |= PHP_STREAM_FLAG_NO_FCLOSE;
        php_stream_to_zval(obj->intern->stream, zstream);
 
-       zend_get_std_object_handlers()->write_property(zpqlob, &zmember, zstream, NULL);
+#if PHP_VERSION_ID >= 80000
+       zend_std_write_property(&obj->zo, Z_STR(zmember), zstream, NULL);
+#else
+       ZVAL_OBJ(&zobj, &obj->zo);
+       zend_std_write_property(&zobj, &zmember, zstream, NULL);
+#endif
        zval_ptr_dtor(&zmember);
 }
 
@@ -423,7 +441,7 @@ static PHP_METHOD(pqlob, truncate) {
 }
 
 static zend_function_entry php_pqlob_methods[] = {
-       PHP_ME(pqlob, __construct, ai_pqlob_construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
+       PHP_ME(pqlob, __construct, ai_pqlob_construct, ZEND_ACC_PUBLIC)
        PHP_ME(pqlob, write, ai_pqlob_write, ZEND_ACC_PUBLIC)
        PHP_ME(pqlob, read, ai_pqlob_read, ZEND_ACC_PUBLIC)
        PHP_ME(pqlob, seek, ai_pqlob_seek, ZEND_ACC_PUBLIC)
@@ -453,7 +471,7 @@ PHP_MINIT_FUNCTION(pqlob)
        php_pqlob_object_handlers.read_property = php_pq_object_read_prop;
        php_pqlob_object_handlers.write_property = php_pq_object_write_prop;
        php_pqlob_object_handlers.clone_obj = NULL;
-       php_pqlob_object_handlers.get_property_ptr_ptr = NULL;
+       php_pqlob_object_handlers.get_property_ptr_ptr = php_pq_object_get_prop_ptr_null;
        php_pqlob_object_handlers.get_gc = php_pq_object_get_gc;
        php_pqlob_object_handlers.get_properties = php_pq_object_properties;
        php_pqlob_object_handlers.get_debug_info = php_pq_object_debug_info;