diff options
author | Stig Bakken <ssb@php.net> | 1999-04-21 22:49:16 +0000 |
---|---|---|
committer | Stig Bakken <ssb@php.net> | 1999-04-21 22:49:16 +0000 |
commit | f67a9bdc52c39eed6837aef8a1eca195549b1469 (patch) | |
tree | 0a7be5c5b405910f4d616df0d9bed82196d3c966 /ext/dav | |
parent | 96660d9a8ce06f12f186d0e3bb5697ce747182a5 (diff) | |
download | php-git-f67a9bdc52c39eed6837aef8a1eca195549b1469.tar.gz |
moved dav, msql and oracle to ext/
Diffstat (limited to 'ext/dav')
-rw-r--r-- | ext/dav/Makefile.am | 6 | ||||
-rw-r--r-- | ext/dav/config.h.stub | 2 | ||||
-rw-r--r-- | ext/dav/config.m4 | 29 | ||||
-rw-r--r-- | ext/dav/dav.c | 300 | ||||
-rw-r--r-- | ext/dav/php3_dav.h | 63 | ||||
-rw-r--r-- | ext/dav/setup.stub | 2 |
6 files changed, 402 insertions, 0 deletions
diff --git a/ext/dav/Makefile.am b/ext/dav/Makefile.am new file mode 100644 index 0000000000..58f9fe1009 --- /dev/null +++ b/ext/dav/Makefile.am @@ -0,0 +1,6 @@ +# $Id$ + +INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend +noinst_LIBRARIES=libphpext_dav.a +libphpext_dav_a_SOURCES=dav.c + diff --git a/ext/dav/config.h.stub b/ext/dav/config.h.stub new file mode 100644 index 0000000000..90a0bc1de4 --- /dev/null +++ b/ext/dav/config.h.stub @@ -0,0 +1,2 @@ +/* Define to compile with mod_dav support */ +#define HAVE_MOD_DAV 0 diff --git a/ext/dav/config.m4 b/ext/dav/config.m4 new file mode 100644 index 0000000000..c2b83adbc7 --- /dev/null +++ b/ext/dav/config.m4 @@ -0,0 +1,29 @@ +dnl $Id$ +dnl config.m4 for extension dav +dnl don't forget to call PHP_EXTENSION(dav) + +AC_MSG_CHECKING(whether to enable DAV support through mod_dav) +AC_ARG_WITH(mod-dav, +[ --with-mod-dav=DIR Include DAV support through Apache's mod_dav, + DIR is mod_dav's installation directory (Apache + module version only!)], +[ + if test "$withval" = "yes"; then + AC_MSG_ERROR(Must give parameter to --with-mod-dav!) + else + if test "$withval" != "no"; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_MOD_DAV, 1) + CFLAGS="$CFLAGS -DHAVE_MOD_DAV -I$withval" + INCLUDES="$INCLUDES -I$withval" + PHP_EXTENSION(dav) + else + AC_MSG_RESULT(no) + AC_DEFINE(HAVE_MOD_DAV, 0) + fi + fi +],[ + AC_MSG_RESULT(no) + AC_DEFINE(HAVE_MOD_DAV, 0) +]) + diff --git a/ext/dav/dav.c b/ext/dav/dav.c new file mode 100644 index 0000000000..967b1a6757 --- /dev/null +++ b/ext/dav/dav.c @@ -0,0 +1,300 @@ +/* + +----------------------------------------------------------------------+ + | PHP HTML Embedded Scripting Language Version 3.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997,1998 PHP Development Team (See Credits file) | + +----------------------------------------------------------------------+ + | This program is free software; you can redistribute it and/or modify | + | it under the terms of one of the following licenses: | + | | + | A) the GNU General Public License as published by the Free Software | + | Foundation; either version 2 of the License, or (at your option) | + | any later version. | + | | + | B) the PHP License as published by the PHP Development Team and | + | included in the distribution in the file: LICENSE | + | | + | This program is distributed in the hope that it will be useful, | + | but WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | + | GNU General Public License for more details. | + | | + | You should have received a copy of both licenses referred to here. | + | If you did not, or have any questions about PHP licensing, please | + | contact core@php.net. | + +----------------------------------------------------------------------+ + | Authors: Stig Sæther Bakken <ssb@guardian.no> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#define IS_EXT_MODULE +#if COMPILE_DL +# if PHP_31 +# include "../phpdl.h" +# else +# include "dl/phpdl.h" +# endif +#endif +#include "php.h" +#include "php3_dav.h" + +#if defined(THREAD_SAFE) && !PHP_31 +# undef THREAD_SAFE +#endif + +#if HAVE_MOD_DAV + +# include "mod_dav.h" +# include "phpdav.h" +# include "variables.h" + +/* {{{ thread safety stuff */ + +# ifdef THREAD_SAFE +# define DAV_GLOBAL(a) phpdav_globals->a +# define DAV_TLS_VARS phpdav_global_struct *phpdav_globals = TlsGetValue(PHPDAVTls); + +void *phpdav_mutex; +DWORD PHPDAVTls; +static int numthreads=0; + +typedef struct phpdav_global_struct { + phpdav_module php3_dav_module; +} phpdav_global_struct; + +# else /* !defined(THREAD_SAFE) */ +# define DAV_GLOBAL(a) a +# define DAV_TLS_VARS + +phpdav_module php3_dav_module; + +# endif /* defined(THREAD_SAFE) */ + +# define DAV_HANDLER(a) DAV_GLOBAL(php3_dav_module).a##_handler +# define DAV_SET_HANDLER(a,b) \ + dav_set_handler(&DAV_GLOBAL(php3_dav_module).a##_handler,(b)) + + +/* }}} */ +/* {{{ dynamically loadable module stuff */ + +# if COMPILE_DL +DLEXPORT php3_module_entry *get_module() { return &phpdav_module_entry; }; +# endif /* COMPILE_DL */ + +/* }}} */ +/* {{{ function prototypes */ + +int php3_minit_phpdav(INIT_FUNC_ARGS); +int php3_rinit_phpdav(INIT_FUNC_ARGS); +int php3_mshutdown_phpdav(SHUTDOWN_FUNC_ARGS); +int php3_rshutdown_phpdav(SHUTDOWN_FUNC_ARGS); +void php3_info_phpdav(void); + +/* }}} */ +/* {{{ extension definition structures */ + +function_entry phpdav_functions[] = { + PHP_FE(dav_set_mkcol_handlers, NULL) + {NULL, NULL, NULL} +}; + +php3_module_entry phpdav_module_entry = { + "DAV", /* extension name */ + phpdav_functions, /* extension function list */ + php3_minit_phpdav, /* extension-wide startup function */ + php3_mshutdown_phpdav, /* extension-wide shutdown function */ + php3_rinit_phpdav, /* per-request startup function */ + php3_rshutdown_phpdav, /* per-request shutdown function */ + php3_info_phpdav, /* information function */ + STANDARD_MODULE_PROPERTIES +}; + +/* }}} */ +/* {{{ startup, shutdown and info functions */ + + /* {{{ php3_minit_phpdav */ + +int php3_minit_phpdav(INIT_FUNC_ARGS) +{ +#if defined(THREAD_SAFE) + phpdav_global_struct *phpdav_globals; + PHP3_MUTEX_ALLOC(phpdav_mutex); + PHP3_MUTEX_LOCK(phpdav_mutex); + numthreads++; + if (numthreads==1){ + if (!PHP3_TLS_PROC_STARTUP(PHPDAVTls)){ + PHP3_MUTEX_UNLOCK(phpdav_mutex); + PHP3_MUTEX_FREE(phpdav_mutex); + return FAILURE; + } + } + PHP3_MUTEX_UNLOCK(phdpav_mutex); + if(!PHP3_TLS_THREAD_INIT(PHPDAVTls,phpdav_globals,phpdav_global_struct)){ + PHP3_MUTEX_FREE(phpdav_mutex); + return FAILURE; + } +#endif + return SUCCESS; +} + +/* }}} */ + /* {{{ php3_rinit_phpdav */ + +int php3_rinit_phpdav(INIT_FUNC_ARGS) +{ + return SUCCESS; +} + +/* }}} */ + /* {{{ php3_mshutdown_phpdav() */ + +int php3_mshutdown_phpdav(SHUTDOWN_FUNC_ARGS) +{ + DAV_TLS_VARS; +#ifdef THREAD_SAFE + PHP3_TLS_THREAD_FREE(phpdav_globals); + PHP3_MUTEX_LOCK(phpdav_mutex); + numthreads--; + if (numthreads < 1) { + PHP3_TLS_PROC_SHUTDOWN(PHPDAVTls); + PHP3_MUTEX_UNLOCK(phpdav_mutex); + PHP3_MUTEX_FREE(phpdav_mutex); + return SUCCESS; + } + PHP3_MUTEX_UNLOCK(phpdav_mutex); +#endif + return SUCCESS; +} + +/* }}} */ + /* {{{ php3_rshutdown_phpdav() */ + +int php3_rshutdown_phpdav(SHUTDOWN_FUNC_ARGS) +{ + if (DAV_HANDLER(mkcol_test)) { + efree(DAV_HANDLER(mkcol_test)); + } + if (DAV_HANDLER(mkcol_create)) { + efree(DAV_HANDLER(mkcol_create)); + } + return SUCCESS; +} + +/* }}} */ + /* {{{ php3_info_phpdav() */ + +void php3_info_phpdav() +{ +} + +/* }}} */ + +/* }}} */ +/* {{{ extension-internal functions */ + + /* {{{ dav_set_handler() */ + +static void +dav_set_handler(char **nameBufp, pval *data) +{ + if (data->value.str.len > 0) { + if (*nameBufp != NULL) { + efree(*nameBufp); + } + *nameBufp = php3i_pval_strdup(data); + } else { + if (*nameBufp != NULL) { + efree(*nameBufp); + } + *nameBufp = NULL; + } +} + +/* }}} */ + /* {{{ dav_call_handler() */ + +static int +dav_call_handler(char *funcName, int argc, pval **argv) +{ + if (funcName) { + pval *retval, *func; + int i, ret; + HashTable *function_table; + + func = php3i_string_pval(funcName); + retval = emalloc(sizeof(pval)); + function_table = php3i_get_function_table(); + if (call_user_function(function_table, NULL, func, retval, argc, argv) == FAILURE) { + php3tls_pval_destructor(retval); + efree(retval); + return HTTP_INTERNAL_SERVER_ERROR; + } + php3tls_pval_destructor(func); + efree(func); + for (i = 0; i < argc; i++) { + php3tls_pval_destructor(argv[i]); + efree(argv[i]); + } + convert_to_long(retval); + ret = retval->value.lval; + efree(retval); + return ret; + } + return DECLINED; +} + +/* }}} */ + +int phpdav_mkcol_test_handler(request_rec *r) +{ + pval *arg; + + if (DAV_HANDLER(mkcol_test) == NULL) { + return DECLINED; + } + arg = php3i_string_pval(r->filename); + return dav_call_handler(DAV_HANDLER(mkcol_test), 1, &arg); +} + +int phpdav_mkcol_create_handler(request_rec *r) +{ + pval *arg; + + if (DAV_HANDLER(mkcol_create) == NULL) { + return DECLINED; + } + arg = php3i_string_pval(r->filename); + return dav_call_handler(DAV_HANDLER(mkcol_create), 1, &arg); +} + +/* }}} */ + +/************************* EXTENSION FUNCTIONS *************************/ + +/* {{{ proto void dav_set_mkcol_handlers(string test, string create) + Sets the function to test whether a DAV collection exists for MKCOL */ +PHP_FUNCTION(dav_set_mkcol_handlers) +{ + pval *test, *create; + DAV_TLS_VARS; + + if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &test, &create) == FAILURE) { + WRONG_PARAM_COUNT; + } + DAV_SET_HANDLER(mkcol_test, test); + DAV_SET_HANDLER(mkcol_create, create); + RETVAL_TRUE; +} +/* }}} */ + +#endif + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/dav/php3_dav.h b/ext/dav/php3_dav.h new file mode 100644 index 0000000000..a66525331d --- /dev/null +++ b/ext/dav/php3_dav.h @@ -0,0 +1,63 @@ +/* + +----------------------------------------------------------------------+ + | PHP HTML Embedded Scripting Language Version 3.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997,1998 PHP Development Team (See Credits file) | + +----------------------------------------------------------------------+ + | This program is free software; you can redistribute it and/or modify | + | it under the terms of one of the following licenses: | + | | + | A) the GNU General Public License as published by the Free Software | + | Foundation; either version 2 of the License, or (at your option) | + | any later version. | + | | + | B) the PHP License as published by the PHP Development Team and | + | included in the distribution in the file: LICENSE | + | | + | This program is distributed in the hope that it will be useful, | + | but WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | + | GNU General Public License for more details. | + | | + | You should have received a copy of both licenses referred to here. | + | If you did not, or have any questions about PHP licensing, please | + | contact core@php.net. | + +----------------------------------------------------------------------+ + | Authors: Stig Sæther Bakken <ssb@guardian.no> | + +----------------------------------------------------------------------+ + */ + +/* $Id */ + +#ifndef _PHP_DAV_H +# define _PHP_DAV_H + +# if HAVE_MOD_DAV + +typedef struct { + int foo; + char *mkcol_test_handler; + char *mkcol_create_handler; +} phpdav_module; + +extern php3_module_entry phpdav_module_entry; +# define phpdav_module_ptr &phpdav_module_entry + +int phpdav_mkcol_test_handler(request_rec *); + +PHP_FUNCTION(dav_set_mkcol_handlers); + +# else /* !HAVE_MOD_DAV */ + +# define phpdav_module_ptr NULL + +# endif /* HAVE_MOD_DAV */ + +#endif /* _PHP_DAV_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/dav/setup.stub b/ext/dav/setup.stub new file mode 100644 index 0000000000..881144c1ca --- /dev/null +++ b/ext/dav/setup.stub @@ -0,0 +1,2 @@ +# $Id$ +# This extension is still very much under construction. |