diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-03-24 14:51:41 +0100 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-03-24 14:51:41 +0100 |
commit | aecf6c450fc4ad9b1b3ee0ce4450b9dac5ce2967 (patch) | |
tree | 12ffe9aa7f6b4a6ac4c2273aa8e2063ce7b685b9 | |
parent | 2fd4198b78358cf2ba527296fafb5b1728e28ea8 (diff) |
fix compile issues for TRSM
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | include/base.h | 3 | ||||
-rw-r--r-- | include/classbase.h | 87 | ||||
-rw-r--r-- | include/exception.h | 3 | ||||
-rw-r--r-- | include/extension.h | 12 | ||||
-rw-r--r-- | include/iterator.h | 21 | ||||
-rw-r--r-- | include/namespace.h | 3 | ||||
-rw-r--r-- | include/parameters.h | 3 | ||||
-rw-r--r-- | phpcpp.h | 8 | ||||
-rw-r--r-- | src/base.cpp | 21 | ||||
-rw-r--r-- | src/classbase.cpp | 4 | ||||
-rw-r--r-- | src/exception.cpp | 2 |
12 files changed, 77 insertions, 94 deletions
@@ -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 @@ -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 |