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/06/27 09:05] – Update 27-Jun vpjgsoc:2009:api [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 15: Line 15:
  
 ==== 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_ext_api_toi and from an unsigned integer to the string format using zend_ext_api_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 21: Line 49:
  
 <code c> <code c>
-int zend_ext_api_register(char *ext_name, char * version_text, void *api, size_t size)+int zend_eapi_register(char *ext_name, char * version_text, void *api, size_t size)
 </code> </code>
 Registers an API Registers an API
Line 30: Line 58:
  
 <code c> <code c>
-int zend_ext_api_version_toi(char *version_text, uint *version_int)+int zend_eapi_version_toi(char *version_text, uint *version_int)
 </code> </code>
 Converts a version in text format to an integer. Converts a version in text format to an integer.
Line 37: Line 65:
  
 <code c> <code c>
-int zend_ext_api_version_toa(uint version, char * version_text)+int zend_eapi_version_toa(uint version, char * version_text)
 </code> </code>
 Converts a version in integer format to a string Converts a version in integer format to a string
Line 44: Line 72:
  
 <code c> <code c>
-int zend_ext_api_get_latest_version(char *ext_name, uint *version)+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> 
 +int zend_eapi_get_latest_version(char *ext_name, uint *version)
 </code> </code>
 Gives the latest version of the extension available Gives the latest version of the extension available
Line 51: Line 90:
  
 <code c> <code c>
-int zend_ext_api_exists(char *ext_name, char *version)+int zend_eapi_exists(char *ext_name, char *version)
 </code> </code>
 Checks if the API is available Checks if the API is available
Line 58: Line 97:
  
 <code c> <code c>
-int zend_ext_api_get(char *ext_name, char *version, void **api)+int zend_eapi_get(char *ext_name, char *version, void **api)
 </code> </code>
 Retrieves the API Retrieves the API
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 148: Line 201:
     * Update sample usage code     * Update sample usage code
  
 +== 10th July ==
 +
 +  * Callbacks
 +    * Module number is passed to the callback
 +    * Callbacks can be registered for the latest API version
 +  * Testing
 +    * Two extension with a set of standard unit test cases were added to the git repository
 +    * API interface was tested with the extensions mbstring and exif
 +  * Name
 +    * 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.1246093516.txt.gz · Last modified: 2017/09/22 13:28 (external edit)