gsoc:2009:api

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
gsoc:2009:api [2009/07/30 03:13] vpjgsoc:2009:api [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 16: Line 16:
 ==== Versioning ==== ==== Versioning ====
 Versions are in the format major.minor[.build[.revision]] in the string representation. These are stored in unsigned integers for ease of searching. The first 8 bits are used for the major, next 8 for the minor, next 8 for the build and the last 8 bits for the revision. It is possible to convert from the string representation to an unsigned integer using zend_eapi_toi and from an unsigned integer to the string format using zend_eapi_toa function. Versions are in the format major.minor[.build[.revision]] in the string representation. These are stored in unsigned integers for ease of searching. The first 8 bits are used for the major, next 8 for the minor, next 8 for the build and the last 8 bits for the revision. It is possible to convert from the string representation to an unsigned integer using zend_eapi_toi and from an unsigned integer to the string format using zend_eapi_toa function.
 +
 +==== Macros ====
 +
 +<code c>
 +EAPI_SET_CALLBACK(ext_name, version, callback) 
 +</code>
 +Sets a callback - with reference to a extension and a version - should be called during MINIT. The callback will be called after all extensions have been initialized. Callback will be called with a reference to the API of the specified extension. See zend_eapi_set_callback.
 +^ ''ext_name'' | Extension name |
 +^ ''version'' | Version - if a null value will is passed the callback will be called with the latest version |
 +^ ''callback'' | Function pointer to the callback function |
 +
 +<code c>
 +EAPI_SET_EMPTY_CALLBACK(callback) 
 +</code>
 +Sets an empty callback - should be called during MINIT. The callback will be called after all extensions have been initialized. See zend_eapi_set_empty_callback.
 +^ ''callback'' | Function pointer to the callback function |
 +
 +<code c>
 +EAPI_CALLBACK_FUNCTION(callback) 
 +</code>
 +Defines the callback function. The callback function will be called with the following parameters: type, module_number, api (pointer to the api), ext_name, version,
 +^ ''callback'' | Name of the callback function |
 +
 +<code c>
 +EAPI_EMPTY_CALLBACK_FUNCTION(callback) 
 +</code>
 +Defines the empty callback function. The callback function will be called with the following parameters: typei and module_number,
 +^ ''callback'' | Name of the callback function |
  
 ==== Functions ==== ==== Functions ====
Line 42: Line 70:
 ^ ''version_text'' | Version as a string | ^ ''version_text'' | Version as a string |
 ^ ''version_int'' | Version as a numerical value | ^ ''version_int'' | Version as a numerical value |
 +
 +<code c>
 +int zend_eapi_find_versions(char *ext_name, uint version, uint mask, uint *result, int *size, int buf_length)
 +</code>
 +Finds the set of versions available. Matches versions if ''(extension_version & mask) == (version & mask)''.
 +^ ''ext_name'' | Extension name |
 +^ ''version'' | Version to be searched for |
 +^ ''mask'' | A mask to specify which part of version should be matched |
 +^ ''result'' | Pointer to an array, which will be filled with matched versions |
 +^ ''size'' | Number of matches found |
 +^ ''buf_length'' | Capacity of the array results (memory allocated) |
  
 <code c> <code c>
Line 64: Line 103:
 ^ ''version'' | Version | ^ ''version'' | Version |
 ^ ''api'' | API will be loaded here if it is available | ^ ''api'' | API will be loaded here if it is available |
 +
 +<code c>
 +int zend_eapi_set_empty_callback(int type, int module_number, void (*callback)(EMPTY_CALLBACK_FUNC_ARGS))
 +</code>
 +Sets an empty callback - should be called during MINIT. The callback will be called after all extensions have been initialized. Use EAPI_SET_EMPTY_CALLBACK.
 +^ ''callback'' | Function pointer to the callback function |
 +
 +<code c>
 +int zend_eapi_set_callback(int type, int module_number, char *ext_name, char *version, void (*callback_func)(CALLBACK_FUNC_ARGS))
 +</code>
 +Sets a callback - with reference to a extension and a version - should be called during MINIT. The callback will be called after all extensions have been initialized. Callback will be called with a reference to the API of the specified extension. Use EAPI_SET_CALLBACK.
 +^ ''ext_name'' | Extension name |
 +^ ''version'' | Version - if a null value will is passed the callback will be called with the latest version |
 +^ ''callback'' | Function pointer to the callback function |
  
 ===== Timeline ===== ===== Timeline =====
Line 158: Line 211:
   * Name   * Name
     * eapi is used instead of ext_api     * eapi is used instead of ext_api
 +
 +== 20th July ==
 +  * Callbacks with no extension specified
 +  * Used dependency interface on mbstring/exif
 +
 +== 31st July ==
 +  * Setting callbacks accept module_number / type (through macros)
 +  * Callbacks are called with module_number / type. e.g. usage - INIs could be registered from the callback
 +  * Functions to search versions of an extension
 +  * Example usage of the dependency interface : [[http://www.xvpj.net/2009/06/26/how-to-use-php-extension-api-dependancy-interface/]]
 +  * How dependency interface is implemented on mbstring / exif : [[http://www.xvpj.net/2009/07/29/eapi2/]]
 +
 +== 16th August ==
 +  * Received some suggestions from the community (mailing list)
 +  * Fixed a problem with win32 build - included zend_eapi.c in config.w32
 +  * TSRMLS parameters are passed to callbacks to improve performance
 +  * Added support for extensions loaded through dl()
 +    * When a extension (say ext_dl) is loaded through dl() the callbacks of other extensions (already loaded) are called, if they require the ext_dl and the versions match
 +    * Callbacks of ext_dl are called if the required extensions are available
 +    * Did some testing with dl()
gsoc/2009/api.1248923610.txt.gz · Last modified: 2017/09/22 13:28 (external edit)