Merge branch 'master' into phpng
authorMichael Wallner <mike@php.net>
Tue, 21 Jul 2015 09:20:38 +0000 (11:20 +0200)
committerMichael Wallner <mike@php.net>
Tue, 21 Jul 2015 09:20:38 +0000 (11:20 +0200)
1  2 
php_raphf.h

diff --combined php_raphf.h
index c5e4f355f4bbcffe3ce6b5f65cf35f2d4b82c083,4ca7b87de8ef29434acb7a50bb46dc4b0db97707..00b47a90ac57289017958fa652421106a6638834
@@@ -18,7 -18,7 +18,7 @@@
  extern zend_module_entry raphf_module_entry;
  #define phpext_raphf_ptr &raphf_module_entry
  
 -#define PHP_RAPHF_VERSION "1.1.0"
 +#define PHP_RAPHF_VERSION "2.0.0dev"
  
  #ifdef PHP_WIN32
  #     define PHP_RAPHF_API __declspec(dllexport)
@@@ -41,7 -41,8 +41,7 @@@
   * @param init_arg is the \a init_arg from php_resource_factory_init()
   * @return the created (persistent) handle
   */
 -typedef void *(*php_resource_factory_handle_ctor_t)(void *opaque,
 -              void *init_arg TSRMLS_DC);
 +typedef void *(*php_resource_factory_handle_ctor_t)(void *opaque, void *init_arg);
  
  /**
   * The copy constructor of a resource.
@@@ -49,7 -50,8 +49,7 @@@
   * @param opaque the factory's data
   * @param handle the (persistent) handle to copy
   */
 -typedef void *(*php_resource_factory_handle_copy_t)(void *opaque,
 -              void *handle TSRMLS_DC);
 +typedef void *(*php_resource_factory_handle_copy_t)(void *opaque, void *handle);
  
  /**
   * The destructor of a resource.
@@@ -57,7 -59,8 +57,7 @@@
   * @param opaque the factory's data
   * @param handle the handle to destroy
   */
 -typedef void (*php_resource_factory_handle_dtor_t)(void *opaque,
 -              void *handle TSRMLS_DC);
 +typedef void (*php_resource_factory_handle_dtor_t)(void *opaque, void *handle);
  
  /**
   * The resource ops consisting of a ctor, a copy ctor and a dtor.
@@@ -126,7 -129,7 +126,7 @@@ PHP_RAPHF_API void php_resource_factory
  /**
   * Destroy and free the resource factory.
   *
 - * Calls php_resource_factory_dtor() and frees \æ f if the factory's refcount
 + * Calls php_resource_factory_dtor() and frees \a f if the factory's refcount
   * reached 0.
   *
   * @param f the resource factory
@@@ -141,7 -144,7 +141,7 @@@ PHP_RAPHF_API void php_resource_factory
   * @return the new resource
   */
  PHP_RAPHF_API void *php_resource_factory_handle_ctor(php_resource_factory_t *f,
 -              void *init_arg TSRMLS_DC);
 +              void *init_arg);
  
  /**
   * Create a copy of the resource \a handle
   * @return the copy
   */
  PHP_RAPHF_API void *php_resource_factory_handle_copy(php_resource_factory_t *f,
 -              void *handle TSRMLS_DC);
 +              void *handle);
  
  /**
   * Destroy (and free) the resource
   * @param handle the resource to destroy
   */
  PHP_RAPHF_API void php_resource_factory_handle_dtor(php_resource_factory_t *f,
 -              void *handle TSRMLS_DC);
 +              void *handle);
  
  /**
   * Persistent handles storage
@@@ -197,18 -200,18 +197,18 @@@ typedef struct php_persistent_handle_fa
   * Wakeup the persistent handle on re-acquisition.
   */
  typedef void (*php_persistent_handle_wakeup_t)(
 -              php_persistent_handle_factory_t *f, void **handle TSRMLS_DC);
 +              php_persistent_handle_factory_t *f, void **handle);
  /**
   * Retire the persistent handle on release.
   */
  typedef void (*php_persistent_handle_retire_t)(
 -              php_persistent_handle_factory_t *f, void **handle TSRMLS_DC);
 +              php_persistent_handle_factory_t *f, void **handle);
  
  /**
   * Definition of a persistent handle factory.
   *
   * php_persistent_handle_concede() will return a pointer to a
 - * php_persistent_handle_factory if a provider for the \a name_str has
 + * php_persistent_handle_factory if a provider for the \a name has
   * been registered with php_persistent_handle_provide().
   */
  struct php_persistent_handle_factory {
        php_persistent_handle_retire_t retire;
  
        /** The ident for which this factory manages resources */
 -      struct {
 -              /** ident string */
 -              char *str;
 -              /** ident length */
 -              size_t len;
 -      } ident;
 +      zend_string *ident;
  
        /** Whether it has to be free'd on php_persistent_handle_abandon() */
        unsigned free_on_abandon:1;
   * A php_persistent_handle_factory can then be retrieved by
   * php_persistent_handle_concede() at runtime.
   *
 - * @param name_str the provider name, e.g. "http\Client\Curl"
 - * @param name_len the provider name length, e.g. strlen("http\Client\Curl")
 + * @param name the provider name, e.g. "http\Client\Curl"
   * @param fops the resource factory ops
   * @param data opaque user data
   * @param dtor \a data destructor
   * @return SUCCESS/FAILURE
   */
 -PHP_RAPHF_API int /* SUCCESS|FAILURE */ php_persistent_handle_provide(
 -              const char *name_str, size_t name_len, php_resource_factory_ops_t *fops,
 -              void *data, void (*dtor)(void *) TSRMLS_DC);
 +PHP_RAPHF_API ZEND_RESULT_CODE php_persistent_handle_provide(
 +              zend_string *name, php_resource_factory_ops_t *fops,
 +              void *data, void (*dtor)(void *));
  
  /**
   * Retrieve a persistent handle factory at runtime.
   *
 - * If a persistent handle provider has been registered for \a name_str, a new
 - * php_persistent_handle_factory creating resources in the \a ident_str
 + * If a persistent handle provider has been registered for \a name, a new
 + * php_persistent_handle_factory creating resources in the \a ident
   * namespace will be constructed.
   *
   * The wakeup routine \a wakeup and the retire routine \a retire will be
   * assigned to the new php_persistent_handle_factory.
   *
   * @param a pointer to a factory; allocated on the heap if NULL
 - * @param name_str the provider name, e.g. "http\Client\Curl"
 - * @param name_len the provider name length, e.g. strlen("http\Client\Curl")
 - * @param ident_str the subsidiary namespace, e.g. "php.net:80"
 - * @param ident_len the subsidiary namespace lenght, e.g. strlen("php.net:80")
 + * @param name the provider name, e.g. "http\Client\Curl"
 + * @param ident the subsidiary namespace, e.g. "php.net:80"
   * @param wakeup any persistent handle wakeup routine
   * @param retire any persistent handle retire routine
   * @return \a a or an allocated persistent handle factory
   */
  PHP_RAPHF_API php_persistent_handle_factory_t *php_persistent_handle_concede(
 -              php_persistent_handle_factory_t *a, const char *name_str,
 -              size_t name_len, const char *ident_str, size_t ident_len,
 +              php_persistent_handle_factory_t *a,
 +              zend_string *name, zend_string *ident,
                php_persistent_handle_wakeup_t wakeup,
 -              php_persistent_handle_retire_t retire TSRMLS_DC);
 +              php_persistent_handle_retire_t retire);
  
  /**
   * Abandon the persistent handle factory.
@@@ -298,7 -309,7 +298,7 @@@ PHP_RAPHF_API void php_persistent_handl
   * @return the acquired resource
   */
  PHP_RAPHF_API void *php_persistent_handle_acquire(
 -              php_persistent_handle_factory_t *a, void *init_arg TSRMLS_DC);
 +              php_persistent_handle_factory_t *a, void *init_arg);
  
  /**
   * Release a persistent handle.
   * @param handle the handle to release
   */
  PHP_RAPHF_API void php_persistent_handle_release(
 -              php_persistent_handle_factory_t *a, void *handle TSRMLS_DC);
 +              php_persistent_handle_factory_t *a, void *handle);
  
  /**
   * Copy a persistent handle.
   * @param handle the resource to accrete
   */
  PHP_RAPHF_API void *php_persistent_handle_accrete(
 -              php_persistent_handle_factory_t *a, void *handle TSRMLS_DC);
 +              php_persistent_handle_factory_t *a, void *handle);
  
  /**
   * Retrieve persistent handle resource factory ops.
   *
   * Example:
   * ~~~~~~~~~~~~~~~{.c}
 - * php_resource_factory_t *create_my_rf(const char *persistent_id_str,
 - *                                      size_t persistent_id_len TSRMLS_DC)
 + * php_resource_factory_t *create_my_rf(zend_string *persistent_id)
   * {
   *     php_resource_factory_t *rf;
   *
 - *     if (persistent_id_str) {
 + *     if (persistent_id) {
   *         php_persistent_handle_factory_t *pf;
   *         php_resource_factory_ops_t *ops;
 + *         zend_string *ns = zend_string_init("my", 2, 1);
   *
   *         ops = php_persistent_handle_get_resource_factory_ops();
 - *
 - *         pf = php_persistent_handle_concede(NULL, "my", 2,
 - *             persistent_id_str, persistent_id_len, NULL, NULL TSRMLS_CC);
 - *
 + *         pf = php_persistent_handle_concede(NULL, ns, persistent_id, NULL, NULL);
-  *         rf = php_resource_factory_init(NULL, ops, pf, php_persistent_handle_abandon);
+  *         rf = php_persistent_handle_resource_factory_init(NULL, pf);
 + *         zend_string_release(ns);
   *     } else {
   *         rf = php_resource_factory_init(NULL, &myops, NULL, NULL);
   *     }
  PHP_RAPHF_API php_resource_factory_ops_t *
  php_persistent_handle_get_resource_factory_ops(void);
  
+ /**
+  * Create a resource factory for persistent handles.
+  *
+  * This will create a resource factory with persistent handle ops, which wraps
+  * the provided reource factory \a pf.
+  *
+  * @param a the persistent handle resource factory to initialize
+  * @param pf the resource factory to wrap
+  */
  PHP_RAPHF_API php_resource_factory_t *
  php_persistent_handle_resource_factory_init(php_resource_factory_t *a,
                php_persistent_handle_factory_t *pf);
  
+ /**
+  * Check whether a resource factory is a persistent handle resource factory.
+  *
+  * @param a the resource factory to check
+  */
  PHP_RAPHF_API zend_bool php_resource_factory_is_persistent(
                php_resource_factory_t *a);
  
  /**
   * Clean persistent handles up.
   *
 - * Destroy persistent handles of provider \a name_str and in subsidiary
 - * namespace \a ident_str.
 + * Destroy persistent handles of provider \a name and in subsidiary
 + * namespace \a ident.
   *
 - * If \a name_str is NULL, all persistent handles of all providers with a
 - * matching \a ident_str will be cleaned up.
 + * If \a name is NULL, all persistent handles of all providers with a
 + * matching \a ident will be cleaned up.
   *
 - * If \a ident_str is NULL all persistent handles of the provider will be
 + * If \a identr is NULL all persistent handles of the provider will be
   * cleaned up.
   *
 - * Ergo, if both, \a name_str and \a ident_str are NULL, then all
 + * Ergo, if both, \a name and \a ident are NULL, then all
   * persistent handles will be cleaned up.
   *
   * You must call this in MSHUTDOWN, if your resource factory ops hold a
   * registered php_resource_factory::dtor, else the dtor will point to
   * memory not any more available if the extension has already been unloaded.
   *
 - * @param name_str the provider name; may be NULL
 - * @param name_len the provider name length
 - * @param ident_str the subsidiary namespace name; may be NULL
 - * @param ident_len the subsidiary namespace name length
 + * @param name the provider name; may be NULL
 + * @param ident the subsidiary namespace name; may be NULL
   */
 -PHP_RAPHF_API void php_persistent_handle_cleanup(const char *name_str,
 -              size_t name_len, const char *ident_str, size_t ident_len TSRMLS_DC);
 +PHP_RAPHF_API void php_persistent_handle_cleanup(zend_string *name,
 +              zend_string *ident);
  
  /**
   * Retrieve statistics about the current process/thread's persistent handles.
   *     ]
   * ~~~~~~~~~~~~~~~
   */
 -PHP_RAPHF_API HashTable *php_persistent_handle_statall(HashTable *ht TSRMLS_DC);
 +PHP_RAPHF_API HashTable *php_persistent_handle_statall(HashTable *ht);
  
  #endif        /* PHP_RAPHF_H */