zend_modules.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Zend Engine |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 2.00 of the Zend license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.zend.com/license/2_00.txt. |
  11. | If you did not receive a copy of the Zend license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@zend.com so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | Authors: Andi Gutmans <andi@php.net> |
  16. | Zeev Suraski <zeev@php.net> |
  17. +----------------------------------------------------------------------+
  18. */
  19. #ifndef MODULES_H
  20. #define MODULES_H
  21. #include "zend.h"
  22. #include "zend_compile.h"
  23. #include "zend_build.h"
  24. #define INIT_FUNC_ARGS int type, int module_number
  25. #define INIT_FUNC_ARGS_PASSTHRU type, module_number
  26. #define SHUTDOWN_FUNC_ARGS int type, int module_number
  27. #define SHUTDOWN_FUNC_ARGS_PASSTHRU type, module_number
  28. #define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
  29. #define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module
  30. #define ZEND_MODULE_API_NO 20210902
  31. #ifdef ZTS
  32. #define USING_ZTS 1
  33. #else
  34. #define USING_ZTS 0
  35. #endif
  36. #define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS
  37. #define STANDARD_MODULE_HEADER \
  38. STANDARD_MODULE_HEADER_EX, NULL, NULL
  39. #define ZE2_STANDARD_MODULE_HEADER \
  40. STANDARD_MODULE_HEADER_EX, ini_entries, NULL
  41. #define ZEND_MODULE_BUILD_ID "API" ZEND_TOSTR(ZEND_MODULE_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA
  42. #define STANDARD_MODULE_PROPERTIES_EX 0, 0, NULL, 0, ZEND_MODULE_BUILD_ID
  43. #define NO_MODULE_GLOBALS 0, NULL, NULL, NULL
  44. #ifdef ZTS
  45. # define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals_id
  46. #else
  47. # define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals
  48. #endif
  49. #define STANDARD_MODULE_PROPERTIES \
  50. NO_MODULE_GLOBALS, NULL, STANDARD_MODULE_PROPERTIES_EX
  51. #define NO_VERSION_YET NULL
  52. #define MODULE_PERSISTENT 1
  53. #define MODULE_TEMPORARY 2
  54. struct _zend_ini_entry;
  55. typedef struct _zend_module_entry zend_module_entry;
  56. typedef struct _zend_module_dep zend_module_dep;
  57. struct _zend_module_entry {
  58. unsigned short size;
  59. unsigned int zend_api;
  60. unsigned char zend_debug;
  61. unsigned char zts;
  62. const struct _zend_ini_entry *ini_entry;
  63. const struct _zend_module_dep *deps;
  64. const char *name;
  65. const struct _zend_function_entry *functions;
  66. zend_result (*module_startup_func)(INIT_FUNC_ARGS);
  67. zend_result (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);
  68. zend_result (*request_startup_func)(INIT_FUNC_ARGS);
  69. zend_result (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
  70. void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
  71. const char *version;
  72. size_t globals_size;
  73. #ifdef ZTS
  74. ts_rsrc_id* globals_id_ptr;
  75. #else
  76. void* globals_ptr;
  77. #endif
  78. void (*globals_ctor)(void *global);
  79. void (*globals_dtor)(void *global);
  80. zend_result (*post_deactivate_func)(void);
  81. int module_started;
  82. unsigned char type;
  83. void *handle;
  84. int module_number;
  85. const char *build_id;
  86. };
  87. #define MODULE_DEP_REQUIRED 1
  88. #define MODULE_DEP_CONFLICTS 2
  89. #define MODULE_DEP_OPTIONAL 3
  90. #define ZEND_MOD_REQUIRED_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_REQUIRED },
  91. #define ZEND_MOD_CONFLICTS_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_CONFLICTS },
  92. #define ZEND_MOD_OPTIONAL_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_OPTIONAL },
  93. #define ZEND_MOD_REQUIRED(name) ZEND_MOD_REQUIRED_EX(name, NULL, NULL)
  94. #define ZEND_MOD_CONFLICTS(name) ZEND_MOD_CONFLICTS_EX(name, NULL, NULL)
  95. #define ZEND_MOD_OPTIONAL(name) ZEND_MOD_OPTIONAL_EX(name, NULL, NULL)
  96. #define ZEND_MOD_END { NULL, NULL, NULL, 0 }
  97. struct _zend_module_dep {
  98. const char *name; /* module name */
  99. const char *rel; /* version relationship: NULL (exists), lt|le|eq|ge|gt (to given version) */
  100. const char *version; /* version */
  101. unsigned char type; /* dependency type */
  102. };
  103. BEGIN_EXTERN_C()
  104. extern ZEND_API HashTable module_registry;
  105. void module_destructor(zend_module_entry *module);
  106. int module_registry_request_startup(zend_module_entry *module);
  107. int module_registry_unload_temp(const zend_module_entry *module);
  108. END_EXTERN_C()
  109. #endif