# main/main.c - php_module_startup && additional modules

- Thread: https://externals.io/message/13935
- Original archive: https://news-web.php.net/php.internals/13935
- Started by Wojtek Meler on 2004-11-23T12:04:53+00:00
- Messages: 2
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #13935 — Wojtek Meler — 2004-11-23T12:04:53+00:00

URL: https://externals.io/message/13935#13935

Hi !

I'm writing my own sapi module and I'd like register 2 additional 
modules calling php_module_startup.
I've noticed that it is imposible because

int php_module_startup(sapi_module_struct *sf, zend_module_entry 
*additional_modules, uint num_additional_modules)

is calling
php_startup_extensions(&additional_modules, num_additional_modules);

which signature is

int php_startup_extensions(zend_module_entry **ptr, int count)

php_startup_extensions expects array of pointers, while 
php_module_startup gets array of structures which is not convertable to
array of pointers in such way. It works only when num_additional_modules 
equals to 0 or 1.

how about adding

    zend_module_entry *start_extensions[num_additional_modules];
    for (i=0;i<num_additional_modules;i++) 
start_extensions[i]=&additional_modules[i];

and passing start_extensions instead of &additional_modules to 
php_startup_extensions ?
pros:
    - works fine,
    - no change in method signature
cons:
    - you have to build array of structures to pass it to 
php_startup_module while it is common to have single pointers to 
zend_module_entry structures

Of course it's better to change php_module_startup interface, while it 
is not often used. It would be easier to create array of pointers than 
copying
structs to single array. Any way something should be done.

Regards,
Wojtek

---

## #13941 — Andi Gutmans — 2004-11-23T22:03:46+00:00

URL: https://externals.io/message/13935#13941 · In reply to: #13935

Sounds like a good idea. Can you put a patch together which we can review?

Andi

At 01:04 PM 11/23/2004 +0100, Wojtek Meler wrote:
>Hi !
>
>I'm writing my own sapi module and I'd like register 2 additional modules 
>calling php_module_startup.
>I've noticed that it is imposible because
>
>int php_module_startup(sapi_module_struct *sf, zend_module_entry 
>*additional_modules, uint num_additional_modules)
>
>is calling
>php_startup_extensions(&additional_modules, num_additional_modules);
>
>which signature is
>
>int php_startup_extensions(zend_module_entry **ptr, int count)
>
>php_startup_extensions expects array of pointers, while php_module_startup 
>gets array of structures which is not convertable to
>array of pointers in such way. It works only when num_additional_modules 
>equals to 0 or 1.
>
>how about adding
>
>    zend_module_entry *start_extensions[num_additional_modules];
>    for (i=0;i<num_additional_modules;i++) 
> start_extensions[i]=&additional_modules[i];
>
>and passing start_extensions instead of &additional_modules to 
>php_startup_extensions ?
>pros:
>    - works fine,
>    - no change in method signature
>cons:
>    - you have to build array of structures to pass it to 
> php_startup_module while it is common to have single pointers to 
> zend_module_entry structures
>
>Of course it's better to change php_module_startup interface, while it is 
>not often used. It would be easier to create array of pointers than copying
>structs to single array. Any way something should be done.
>
>Regards,
>Wojtek
