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
Last revisionBoth sides next revision
gsoc:2009:api [2009/06/27 09:05] – Update 27-Jun vpjgsoc:2009:api [2009/08/16 04:22] – Update 16-Aug vpj
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.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1