summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--include/base.h3
-rw-r--r--include/classbase.h87
-rw-r--r--include/exception.h3
-rw-r--r--include/extension.h12
-rw-r--r--include/iterator.h21
-rw-r--r--include/namespace.h3
-rw-r--r--include/parameters.h3
-rw-r--r--phpcpp.h8
-rw-r--r--src/base.cpp21
-rw-r--r--src/classbase.cpp4
-rw-r--r--src/exception.cpp2
12 files changed, 77 insertions, 94 deletions
diff --git a/Makefile b/Makefile
index 021a26c..c4823d8 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@
# will find sub-directories named TSRM, Zend, ext and main.
#
-PHP_DIR = /home/emiel/Downloads/php-5.3.24
+PHP_DIR = /usr/include/php5
#
@@ -27,7 +27,7 @@ PHP_DIR = /home/emiel/Downloads/php-5.3.24
# You can see the command "whereis php"
#
-PHP_BIN = /home/emiel/Downloads/php-5.3.24/sapi/cli
+PHP_BIN = /usr/bin/php
#
diff --git a/include/base.h b/include/base.h
index c26549f..8bc1c31 100644
--- a/include/base.h
+++ b/include/base.h
@@ -249,8 +249,7 @@ private:
* @param tsrm_ls
* @return MixedObject
*/
- MixedObject *store(struct _zend_class_entry *entry);
- MixedObject *store(struct _zend_class_entry *entry, void ***tsrm_ls);
+ MixedObject *store(struct _zend_class_entry *entry TSRMLS_DC);
/**
* Retrieve the handle
diff --git a/include/classbase.h b/include/classbase.h
index f8cfd21..d0c67fa 100644
--- a/include/classbase.h
+++ b/include/classbase.h
@@ -134,8 +134,7 @@ public:
* @param ns Namespace name
* @param tsrm_ls
*/
-// void initialize(const std::string &ns);
- void initialize(const std::string &ns, void ***tsrm_ls);
+ void initialize(const std::string &ns TSRMLS_DC);
protected:
/**
@@ -323,14 +322,10 @@ private:
* @param tsrm_ls
* @return zend_object_value Object info
*/
-// static struct _zend_object_value createObject(struct _zend_class_entry *entry);
- static struct _zend_object_value createObject(struct _zend_class_entry *entry, void ***tsrm_ls);
-// static struct _zend_object_value cloneObject(struct _zval_struct *val);
- static struct _zend_object_value cloneObject(struct _zval_struct *val, void ***tsrm_ls);
-// static void destructObject(struct _zend_object *object, unsigned int handle);
- static void destructObject(struct _zend_object *object, unsigned int handle, void ***tsrm_ls);
-// static void freeObject(struct _zend_object *object);
- static void freeObject(struct _zend_object *object, void ***tsrm_ls);
+ static struct _zend_object_value createObject(struct _zend_class_entry *entry TSRMLS_DC);
+ static struct _zend_object_value cloneObject(struct _zval_struct *val TSRMLS_DC);
+ static void destructObject(struct _zend_object *object, unsigned int handle TSRMLS_DC);
+ static void freeObject(struct _zend_object *object TSRMLS_DC);
/**
* Static member function that get called when a method or object is called
@@ -341,10 +336,8 @@ private:
* @param return_value_used Is the return value used or not?
* @param tsrm_ls
*/
-// static void callMethod(int ht, struct _zval_struct *return_value, struct _zval_struct **return_value_ptr, struct _zval_struct *this_ptr, int return_value_used);
- static void callMethod(int ht, struct _zval_struct *return_value, struct _zval_struct **return_value_ptr, struct _zval_struct *this_ptr, int return_value_used, void ***tsrm_ls);
-// static void callInvoke(int ht, struct _zval_struct *return_value, struct _zval_struct **return_value_ptr, struct _zval_struct *this_ptr, int return_value_used);
- static void callInvoke(int ht, struct _zval_struct *return_value, struct _zval_struct **return_value_ptr, struct _zval_struct *this_ptr, int return_value_used, void ***tsrm_ls);
+ static void callMethod(int ht, struct _zval_struct *return_value, struct _zval_struct **return_value_ptr, struct _zval_struct *this_ptr, int return_value_used TSRMLS_DC);
+ static void callInvoke(int ht, struct _zval_struct *return_value, struct _zval_struct **return_value_ptr, struct _zval_struct *this_ptr, int return_value_used TSRMLS_DC);
/**
* Function that is used to count the number of elements in the object
@@ -355,8 +348,7 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int countElements(struct _zval_struct *object, long *count);
- static int countElements(struct _zval_struct *object, long *count, void ***tsrm_ls);
+ static int countElements(struct _zval_struct *object, long *count TSRMLS_DC);
/**
* Function that is called when the object is used as an array in PHP
@@ -367,14 +359,10 @@ private:
* @param check_empty ????
* @return zval
*/
-// static struct _zval_struct *readDimension(struct _zval_struct *object, struct _zval_struct *offset, int type);
- static struct _zval_struct *readDimension(struct _zval_struct *object, struct _zval_struct *offset, int type, void ***tsrm_ls);
-// static void writeDimension(struct _zval_struct *object, struct _zval_struct *offset, struct _zval_struct *value);
- static void writeDimension(struct _zval_struct *object, struct _zval_struct *offset, struct _zval_struct *value, void ***tsrm_ls);
-// static int hasDimension(struct _zval_struct *object, struct _zval_struct *offset, int check_empty);
- static int hasDimension(struct _zval_struct *object, struct _zval_struct *offset, int check_empty, void ***tsrm_ls);
-// static void unsetDimension(struct _zval_struct *object, struct _zval_struct *offset);
- static void unsetDimension(struct _zval_struct *object, struct _zval_struct *offset, void ***tsrm_ls);
+ static struct _zval_struct *readDimension(struct _zval_struct *object, struct _zval_struct *offset, int type TSRMLS_DC);
+ static void writeDimension(struct _zval_struct *object, struct _zval_struct *offset, struct _zval_struct *value TSRMLS_DC);
+ static int hasDimension(struct _zval_struct *object, struct _zval_struct *offset, int check_empty TSRMLS_DC);
+ static void unsetDimension(struct _zval_struct *object, struct _zval_struct *offset TSRMLS_DC);
/**
* Retrieve pointer to our own object handlers
@@ -390,8 +378,7 @@ private:
* @param tsrm_ls
* @return zend_object_iterator* Pointer to the iterator
*/
-// static struct _zend_object_iterator *getIterator(struct _zend_class_entry *entry, struct _zval_struct *object, int by_ref);
- static struct _zend_object_iterator *getIterator(struct _zend_class_entry *entry, struct _zval_struct *object, int by_ref, void ***tsrm_ls);
+ static struct _zend_object_iterator *getIterator(struct _zend_class_entry *entry, struct _zval_struct *object, int by_ref TSRMLS_DC);
/**
* Function that is called when a property is being read
@@ -402,10 +389,8 @@ private:
* @param tsrm_ls
* @return zval
*/
-// static struct _zval_struct *readProperty(struct _zval_struct *object, struct _zval_struct *name, int type, const struct _zend_literal *key);
- static struct _zval_struct *readProperty(struct _zval_struct *object, struct _zval_struct *name, int type, const struct _zend_literal *key, void ***tsrm_ls);
-// static struct _zval_struct *readProperty(struct _zval_struct *object, struct _zval_struct *name, int type);
- static struct _zval_struct *readProperty(struct _zval_struct *object, struct _zval_struct *name, int type, void ***tsrm_ls);
+ static struct _zval_struct *readProperty(struct _zval_struct *object, struct _zval_struct *name, int type, const struct _zend_literal *key TSRMLS_DC);
+ static struct _zval_struct *readProperty(struct _zval_struct *object, struct _zval_struct *name, int type TSRMLS_DC);
/**
* Function that is called when a property is set / updated
@@ -416,10 +401,8 @@ private:
* @param tsrm_ls
* @return zval
*/
-// static void writeProperty(struct _zval_struct *object, struct _zval_struct *name, struct _zval_struct *value, const struct _zend_literal *key);
- static void writeProperty(struct _zval_struct *object, struct _zval_struct *name, struct _zval_struct *value, const struct _zend_literal *key, void ***tsrm_ls);
-// static void writeProperty(struct _zval_struct *object, struct _zval_struct *name, struct _zval_struct *value);
- static void writeProperty(struct _zval_struct *object, struct _zval_struct *name, struct _zval_struct *value, void ***tsrm_ls);
+ static void writeProperty(struct _zval_struct *object, struct _zval_struct *name, struct _zval_struct *value, const struct _zend_literal *key TSRMLS_DC);
+ static void writeProperty(struct _zval_struct *object, struct _zval_struct *name, struct _zval_struct *value TSRMLS_DC);
/**
* Function that is called to check whether a certain property is set
@@ -429,10 +412,8 @@ private:
* @param tsrm_ls
* @return bool
*/
-// static int hasProperty(struct _zval_struct *object, struct _zval_struct *name, int has_set_exists, const struct _zend_literal *key);
- static int hasProperty(struct _zval_struct *object, struct _zval_struct *name, int has_set_exists, const struct _zend_literal *key, void ***tsrm_ls);
-// static int hasProperty(struct _zval_struct *object, struct _zval_struct *name, int has_set_exists);
- static int hasProperty(struct _zval_struct *object, struct _zval_struct *name, int has_set_exists, void ***tsrm_ls);
+ static int hasProperty(struct _zval_struct *object, struct _zval_struct *name, int has_set_exists, const struct _zend_literal *key TSRMLS_DC);
+ static int hasProperty(struct _zval_struct *object, struct _zval_struct *name, int has_set_exists TSRMLS_DC);
/**
* Function that is called when a property is removed from the project
@@ -440,10 +421,8 @@ private:
* @param member The member to remove
* @param tsrm_ls
*/
-// static void unsetProperty(struct _zval_struct *object, struct _zval_struct *member, const struct _zend_literal *key);
- static void unsetProperty(struct _zval_struct *object, struct _zval_struct *member, const struct _zend_literal *key, void ***tsrm_ls);
-// static void unsetProperty(struct _zval_struct *object, struct _zval_struct *member);
- static void unsetProperty(struct _zval_struct *object, struct _zval_struct *member, void ***tsrm_ls);
+ static void unsetProperty(struct _zval_struct *object, struct _zval_struct *member, const struct _zend_literal *key TSRMLS_DC);
+ static void unsetProperty(struct _zval_struct *object, struct _zval_struct *member TSRMLS_DC);
/**
* Method that returns information about the function signature of a undefined method
@@ -454,10 +433,8 @@ private:
* @param tsrm_ls
* @return zend_function
*/
-// static union _zend_function *getMethod(struct _zval_struct **object_ptr, char *method, int method_len, const struct _zend_literal *key);
- static union _zend_function *getMethod(struct _zval_struct **object_ptr, char *method, int method_len);
-// static union _zend_function *getMethod(struct _zval_struct **object_ptr, char *method, int method_len, const struct _zend_literal *key, void ***tsrm_ls);
- static union _zend_function *getMethod(struct _zval_struct **object_ptr, char *method, int method_len, void ***tsrm_ls);
+ static union _zend_function *getMethod(struct _zval_struct **object_ptr, char *method, int method_len TSRMLS_DC);
+ static union _zend_function *getMethod(struct _zval_struct **object_ptr, char *method, int method_len, const struct _zend_literal *key TSRMLS_DC);
/**
* Method that returns information about the function signature of an undefined static method
@@ -468,8 +445,7 @@ private:
* @param tsrm_ls
* @return zend_function
*/
-// static union _zend_function *getStaticMethod(struct _zend_class_entry *entry, char* method, int method_len);
- static union _zend_function *getStaticMethod(struct _zend_class_entry *entry, char* method, int method_len, void ***tsrm_ls);
+ static union _zend_function *getStaticMethod(struct _zend_class_entry *entry, char* method, int method_len TSRMLS_DC);
/**
* Method that returns information about the __invoke() method
@@ -480,8 +456,7 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int getClosure(struct _zval_struct *object, struct _zend_class_entry **entry, union _zend_function **func, struct _zval_struct **object_ptr);
- static int getClosure(struct _zval_struct *object, struct _zend_class_entry **entry, union _zend_function **func, struct _zval_struct **object_ptr, void ***tsrm_ls);
+ static int getClosure(struct _zval_struct *object, struct _zend_class_entry **entry, union _zend_function **func, struct _zval_struct **object_ptr TSRMLS_DC);
/**
* Function to cast the object to a different type
@@ -491,8 +466,7 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int cast(struct _zval_struct *object, struct _zval_struct *retval, int type);
- static int cast(struct _zval_struct *object, struct _zval_struct *retval, int type, void ***tsrm_ls);
+ static int cast(struct _zval_struct *object, struct _zval_struct *retval, int type TSRMLS_DC);
/**
* Function to compare two objects
@@ -501,8 +475,7 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int compare(struct _zval_struct *object1, struct _zval_struct *object2);
- static int compare(struct _zval_struct *object1, struct _zval_struct *object2, void ***tsrm_ls);
+ static int compare(struct _zval_struct *object1, struct _zval_struct *object2 TSRMLS_DC);
/**
* Methods that are called to serialize/unserialize an object
@@ -514,10 +487,8 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int serialize(struct _zval_struct *object, unsigned char **buffer, unsigned int *buf_len, struct _zend_serialize_data *data);
- static int serialize(struct _zval_struct *object, unsigned char **buffer, unsigned int *buf_len, struct _zend_serialize_data *data, void ***tsrm_ls);
-// static int unserialize(struct _zval_struct **object, struct _zend_class_entry *entry, const unsigned char *buffer, unsigned int buf_len, struct _zend_unserialize_data *data);
- static int unserialize(struct _zval_struct **object, struct _zend_class_entry *entry, const unsigned char *buffer, unsigned int buf_len, struct _zend_unserialize_data *data, void ***tsrm_ls);
+ static int serialize(struct _zval_struct *object, unsigned char **buffer, unsigned int *buf_len, struct _zend_serialize_data *data TSRMLS_DC);
+ static int unserialize(struct _zval_struct **object, struct _zend_class_entry *entry, const unsigned char *buffer, unsigned int buf_len, struct _zend_unserialize_data *data TSRMLS_DC);
/**
* Name of the class
diff --git a/include/exception.h b/include/exception.h
index 7722424..dd38035 100644
--- a/include/exception.h
+++ b/include/exception.h
@@ -65,8 +65,7 @@ public:
*
* @internal
*/
-// virtual void process();
- virtual void process(void ***tsrm_ls);
+ virtual void process(TSRMLS_D);
};
/**
diff --git a/include/extension.h b/include/extension.h
index 9634ae6..f9361b3 100644
--- a/include/extension.h
+++ b/include/extension.h
@@ -184,8 +184,7 @@ private:
* @param tsrm_ls
* @return int 0 on success
*/
-// static int onStartup(int type, int module_number);
- static int onStartup(int type, int module_number, void ***tsrm_ls);
+ static int onStartup(int type, int module_number TSRMLS_DC);
/**
* Function that is called when the extension is about to be stopped
@@ -194,8 +193,7 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int onShutdown(int type, int module_number);
- static int onShutdown(int type, int module_number, void ***tsrm_ls);
+ static int onShutdown(int type, int module_number TSRMLS_DC);
/**
* Function that is called when a request starts
@@ -204,8 +202,7 @@ private:
* @param tsrm_ls
* @return int 0 on success
*/
-// static int onRequest(int type, int module_number);
- static int onRequest(int type, int module_number, void ***tsrm_ls);
+ static int onRequest(int type, int module_number TSRMLS_DC);
/**
* Function that is called when a request is ended
@@ -214,8 +211,7 @@ private:
* @param tsrm_ls
* @return int 0 on success
*/
-// static int onIdle(int type, int module_number);
- static int onIdle(int type, int module_number, void ***tsrm_ls);
+ static int onIdle(int type, int module_number TSRMLS_DC);
};
/**
diff --git a/include/iterator.h b/include/iterator.h
index d5f30c7..a7d4283 100644
--- a/include/iterator.h
+++ b/include/iterator.h
@@ -94,8 +94,7 @@ private:
* @param iter
* @param tsrm_ls
*/
-// static void destructor(struct _zend_object_iterator *iter);
- static void destructor(struct _zend_object_iterator *iter, void ***tsrm_ls);
+ static void destructor(struct _zend_object_iterator *iter TSRMLS_DC);
/**
* Iterator valid function
@@ -104,8 +103,7 @@ private:
* @param tsrm_ls
* @return int
*/
-// static int valid(struct _zend_object_iterator *iter);
- static int valid(struct _zend_object_iterator *iter, void ***tsrm_ls);
+ static int valid(struct _zend_object_iterator *iter TSRMLS_DC);
/**
* Fetch the current item
@@ -113,8 +111,7 @@ private:
* @param data
* @param tsrm_ls
*/
-// static void current(struct _zend_object_iterator *iter, struct _zval_struct ***data);
- static void current(struct _zend_object_iterator *iter, struct _zval_struct ***data, void ***tsrm_ls);
+ static void current(struct _zend_object_iterator *iter, struct _zval_struct ***data TSRMLS_DC);
/**
* Fetch the key for the current element (optional, may be NULL). The key
@@ -125,8 +122,7 @@ private:
* @param data
* @param tsrm_ls
*/
-// static void key(struct _zend_object_iterator *iter, struct _zval_struct *data);
- static void key(struct _zend_object_iterator *iter, struct _zval_struct *data, void ***tsrm_ls);
+ static void key(struct _zend_object_iterator *iter, struct _zval_struct *data TSRMLS_DC);
/**
* Function to retrieve the current key, php 5.3 style
@@ -137,24 +133,21 @@ private:
* @param tsrm_ls
* @return HASH_KEY_IS_STRING or HASH_KEY_IS_LONG
*/
-// static int key(struct _zend_object_iterator *iter, char **str_key, unsigned int *str_key_len, unsigned long *int_key);
- static int key(struct _zend_object_iterator *iter, char **str_key, unsigned int *str_key_len, unsigned long *int_key, void ***tsrm_ls);
+ static int key(struct _zend_object_iterator *iter, char **str_key, unsigned int *str_key_len, unsigned long *int_key TSRMLS_DC);
/**
* Step forwards to the next element
* @param iter
* @param tsrm_ls
*/
-// static void next(struct _zend_object_iterator *iter);
- static void next(struct _zend_object_iterator *iter, void ***tsrm_ls);
+ static void next(struct _zend_object_iterator *iter TSRMLS_DC);
/**
* Rewind the iterator back to the start
* @param iter
* @param tsrm_ls
*/
-// static void rewind(struct _zend_object_iterator *iter);
- static void rewind(struct _zend_object_iterator *iter, void ***tsrm_ls);
+ static void rewind(struct _zend_object_iterator *iter TSRMLS_DC);
/**
* Get access to all iterator functions
diff --git a/include/namespace.h b/include/namespace.h
index 55fea05..1319976 100644
--- a/include/namespace.h
+++ b/include/namespace.h
@@ -201,8 +201,7 @@ protected:
* @param parent Parent namespace
* @param tsrm_ls
*/
-// void initialize(const std::string &parent);
- void initialize(const std::string &parent, void ***tsrm_ls);
+ void initialize(const std::string &parent TSRMLS_DC);
};
/**
diff --git a/include/parameters.h b/include/parameters.h
index 91fab5a..fa53004 100644
--- a/include/parameters.h
+++ b/include/parameters.h
@@ -29,8 +29,7 @@ public:
* @param argc Number of arguments
* @param tsrm_ls
*/
-// Parameters(struct _zval_struct *this_ptr, int argc);
- Parameters(struct _zval_struct *this_ptr, int argc, void ***tsrm_ls);
+ Parameters(struct _zval_struct *this_ptr, int argc TSRMLS_DC);
/**
* Destructor
diff --git a/phpcpp.h b/phpcpp.h
index a2dca1d..17778f4 100644
--- a/phpcpp.h
+++ b/phpcpp.h
@@ -23,6 +23,14 @@
#include <map>
/**
+ * Disable TSRM for now
+ */
+#define TSRMLS_C
+#define TSRMLS_CC
+#define TSRMLS_D
+#define TSRMLS_DC
+
+/**
* Include all headers files that are related to this library
*/
#include <phpcpp/exception.h>
diff --git a/src/base.cpp b/src/base.cpp
index cefffd8..75363af 100644
--- a/src/base.cpp
+++ b/src/base.cpp
@@ -47,9 +47,28 @@ MixedObject *Base::store(zend_class_entry *entry TSRMLS_DC)
#endif
+#if ZTS
+
+ // when in thread safety mode, the destruct method and free method have
+ // an extra parameter holding thread information
+ using DestructType = void(zend_object*,unsigned int,void***);
+ using FreeType = void(zend_object*,void***);
+
+#else
+
+ // not in thread mode: no special parameter for the tsrm_ls variable
+ using DestructType = void(zend_object*,unsigned int);
+ using FreeType = void(zend_object*);
+
+#endif
+
+ // store the two destruct methods in temporary vars
+ DestructType *destructMethod = &ClassBase::destructObject;
+ FreeType *freeMethod = &ClassBase::freeObject;
+
// the destructor and clone handlers are set to NULL. I dont know why, but they do not
// seem to be necessary...
- _handle = zend_objects_store_put(result, (zend_objects_store_dtor_t)ClassBase::destructObject, (zend_objects_free_object_storage_t)ClassBase::freeObject, NULL TSRMLS_CC);
+ _handle = zend_objects_store_put(result, (zend_objects_store_dtor_t)destructMethod, (zend_objects_free_object_storage_t)freeMethod, NULL TSRMLS_CC);
// done
return result;
diff --git a/src/classbase.cpp b/src/classbase.cpp
index 21d33ba..eadc4c6 100644
--- a/src/classbase.cpp
+++ b/src/classbase.cpp
@@ -1015,9 +1015,9 @@ void ClassBase::writeProperty(zval *object, zval *name, zval *value, const struc
* @return bool
*/
#if PHP_VERSION_ID < 50399
-int ClassBase::hasProperty(zval *object, zval *name, int has_set_exists, void ***tsrm_ls)
+int ClassBase::hasProperty(zval *object, zval *name, int has_set_exists TSRMLS_DC)
#else
-int ClassBase::hasProperty(zval *object, zval *name, int has_set_exists, const struct _zend_literal *key, void ***tsrm_ls)
+int ClassBase::hasProperty(zval *object, zval *name, int has_set_exists, const struct _zend_literal *key TSRMLS_DC)
#endif
{
// the default implementation throws an exception, if we catch that
diff --git a/src/exception.cpp b/src/exception.cpp
index d409e1a..810a73c 100644
--- a/src/exception.cpp
+++ b/src/exception.cpp
@@ -16,7 +16,7 @@ namespace Php {
/**
* Process the exception
*
- * This method is called only from withing the PHP-CPP library,
+ * This method is called only from within the PHP-CPP library,
* and will turn the exception into a PHP exception
*
* @param tsrm_ls