post handler registration done right

(never use emalloc in an extension MINIT function)
This commit is contained in:
Hartmut Holzgraefe 2000-10-13 12:13:35 +00:00
parent 6d5f1d97f8
commit 545ae277bc
3 changed files with 49 additions and 27 deletions

View file

@ -112,32 +112,6 @@ static sapi_post_entry supported_post_entries[] = {
};
SAPI_API int sapi_add_post_entry(char *content_type, void (*post_reader)(SLS_D),
void (*post_handler)(char *content_type_dup, void *arg SLS_DC)) {
sapi_post_entry *post_entry = (sapi_post_entry *)emalloc(sizeof(sapi_post_entry));
if(!post_entry) return 0;
post_entry->content_type = estrdup(content_type);
if(post_entry->content_type == NULL) return 0;
post_entry->content_type_len = strlen(content_type);
post_entry->post_reader = post_reader;
post_entry->post_handler = post_handler;
return sapi_register_post_entry(post_entry);
}
SAPI_API void sapi_remove_post_entry(char *content_type) {
sapi_post_entry *post_entry = (sapi_post_entry *)emalloc(sizeof(sapi_post_entry));
if(!post_entry) return;
post_entry->content_type = estrdup(content_type);
if(post_entry->content_type == NULL) return;
sapi_unregister_post_entry(post_entry);
efree(post_entry);
}
PHP_MINIT_FUNCTION(fdf)
{
@ -198,7 +172,7 @@ PHP_MSHUTDOWN_FUNCTION(fdf)
FDFErc err;
/* remove handler for Acrobat FDF form post requests */
sapi_remove_post_entry("application/vnd.fdf");
sapi_remove_post_entry("application/vnd.fdf");
#ifdef PHP_WIN32
return SUCCESS;

View file

@ -532,6 +532,50 @@ SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry)
zend_hash_del(&known_post_content_types, post_entry->content_type, post_entry->content_type_len+1);
}
SAPI_API int sapi_add_post_entry(char *content_type
, void (*post_reader)(SLS_D)
, void (*post_handler)(char *content_type_dup
, void *arg SLS_DC)) {
sapi_post_entry *post_entry = (sapi_post_entry *)malloc(sizeof(sapi_post_entry));
if(!post_entry) return 0;
post_entry->content_type = strdup(content_type);
if(post_entry->content_type == NULL) return 0;
post_entry->content_type_len = strlen(content_type);
post_entry->post_reader = post_reader;
post_entry->post_handler = post_handler;
return zend_hash_add(&known_post_content_types
, post_entry->content_type
, post_entry->content_type_len+1
, (void *) post_entry
, sizeof(sapi_post_entry)
, NULL
);
}
SAPI_API void sapi_remove_post_entry(char *content_type) {
sapi_post_entry *post_entry;
zend_hash_find(&known_post_content_types
,content_type
,strlen(content_type)+1
,(void **)&post_entry
);
if(post_entry != NULL) {
zend_hash_del(&known_post_content_types
,content_type
,strlen(content_type)+1
);
free(post_entry->content_type);
free(post_entry);
} else {
php_error(E_WARNING,"unregister post handler failed in fdf");
}
}
SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(SLS_D))
{
sapi_module.default_post_reader = default_post_reader;

View file

@ -137,6 +137,10 @@ SAPI_API void sapi_handle_post(void *arg SLS_DC);
SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry);
SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry);
SAPI_API int sapi_add_post_entry(char *content_type
, void (*post_reader)(SLS_D)
, void (*post_handler)(char *content_type_dup, void *arg SLS_DC));
SAPI_API void sapi_remove_post_entry(char *content_type);
SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry);
SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(SLS_D));