Annotation of embedaddon/php/ext/com_dotnet/com_extension.c, revision 1.1.1.3

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
1.1.1.3 ! misho       5:    | Copyright (c) 1997-2013 The PHP Group                                |
1.1       misho       6:    +----------------------------------------------------------------------+
                      7:    | This source file is subject to version 3.01 of the PHP 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.php.net/license/3_01.txt                                  |
                     11:    | If you did not receive a copy of the PHP license and are unable to   |
                     12:    | obtain it through the world-wide-web, please send a note to          |
                     13:    | license@php.net so we can mail you a copy immediately.               |
                     14:    +----------------------------------------------------------------------+
                     15:    | Author: Wez Furlong  <wez@thebrainroom.com>                          |
                     16:    +----------------------------------------------------------------------+
                     17:  */
                     18: 
1.1.1.2   misho      19: /* $Id$ */
1.1       misho      20: 
                     21: #ifdef HAVE_CONFIG_H
                     22: #include "config.h"
                     23: #endif
                     24: 
                     25: #include "php.h"
                     26: #include "php_ini.h"
                     27: #include "ext/standard/info.h"
                     28: #include "php_com_dotnet.h"
                     29: #include "php_com_dotnet_internal.h"
                     30: #include "Zend/zend_exceptions.h"
                     31: 
                     32: ZEND_DECLARE_MODULE_GLOBALS(com_dotnet)
                     33: static PHP_GINIT_FUNCTION(com_dotnet);
                     34: 
                     35: TsHashTable php_com_typelibraries;
                     36: 
                     37: zend_class_entry
                     38:        *php_com_variant_class_entry,
                     39:        *php_com_exception_class_entry,
                     40:        *php_com_saproxy_class_entry;
                     41: 
                     42: /* {{{ arginfo */
                     43: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_set, 0, 0, 2)
                     44:        ZEND_ARG_INFO(0, variant)
                     45:        ZEND_ARG_INFO(0, value)
                     46: ZEND_END_ARG_INFO()
                     47: 
                     48: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_add, 0, 0, 2)
                     49:        ZEND_ARG_INFO(0, left)
                     50:        ZEND_ARG_INFO(0, right)
                     51: ZEND_END_ARG_INFO()
                     52: 
                     53: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_cat, 0, 0, 2)
                     54:        ZEND_ARG_INFO(0, left)
                     55:        ZEND_ARG_INFO(0, right)
                     56: ZEND_END_ARG_INFO()
                     57: 
                     58: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_sub, 0, 0, 2)
                     59:        ZEND_ARG_INFO(0, left)
                     60:        ZEND_ARG_INFO(0, right)
                     61: ZEND_END_ARG_INFO()
                     62: 
                     63: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_mul, 0, 0, 2)
                     64:        ZEND_ARG_INFO(0, left)
                     65:        ZEND_ARG_INFO(0, right)
                     66: ZEND_END_ARG_INFO()
                     67: 
                     68: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_and, 0, 0, 2)
                     69:        ZEND_ARG_INFO(0, left)
                     70:        ZEND_ARG_INFO(0, right)
                     71: ZEND_END_ARG_INFO()
                     72: 
                     73: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_div, 0, 0, 2)
                     74:        ZEND_ARG_INFO(0, left)
                     75:        ZEND_ARG_INFO(0, right)
                     76: ZEND_END_ARG_INFO()
                     77: 
                     78: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_eqv, 0, 0, 2)
                     79:        ZEND_ARG_INFO(0, left)
                     80:        ZEND_ARG_INFO(0, right)
                     81: ZEND_END_ARG_INFO()
                     82: 
                     83: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_idiv, 0, 0, 2)
                     84:        ZEND_ARG_INFO(0, left)
                     85:        ZEND_ARG_INFO(0, right)
                     86: ZEND_END_ARG_INFO()
                     87: 
                     88: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_imp, 0, 0, 2)
                     89:        ZEND_ARG_INFO(0, left)
                     90:        ZEND_ARG_INFO(0, right)
                     91: ZEND_END_ARG_INFO()
                     92: 
                     93: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_mod, 0, 0, 2)
                     94:        ZEND_ARG_INFO(0, left)
                     95:        ZEND_ARG_INFO(0, right)
                     96: ZEND_END_ARG_INFO()
                     97: 
                     98: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_or, 0, 0, 2)
                     99:        ZEND_ARG_INFO(0, left)
                    100:        ZEND_ARG_INFO(0, right)
                    101: ZEND_END_ARG_INFO()
                    102: 
                    103: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_pow, 0, 0, 2)
                    104:        ZEND_ARG_INFO(0, left)
                    105:        ZEND_ARG_INFO(0, right)
                    106: ZEND_END_ARG_INFO()
                    107: 
                    108: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_xor, 0, 0, 2)
                    109:        ZEND_ARG_INFO(0, left)
                    110:        ZEND_ARG_INFO(0, right)
                    111: ZEND_END_ARG_INFO()
                    112: 
                    113: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_abs, 0, 0, 1)
                    114:        ZEND_ARG_INFO(0, left)
                    115: ZEND_END_ARG_INFO()
                    116: 
                    117: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_fix, 0, 0, 1)
                    118:        ZEND_ARG_INFO(0, left)
                    119: ZEND_END_ARG_INFO()
                    120: 
                    121: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_int, 0, 0, 1)
                    122:        ZEND_ARG_INFO(0, left)
                    123: ZEND_END_ARG_INFO()
                    124: 
                    125: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_neg, 0, 0, 1)
                    126:        ZEND_ARG_INFO(0, left)
                    127: ZEND_END_ARG_INFO()
                    128: 
                    129: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_not, 0, 0, 1)
                    130:        ZEND_ARG_INFO(0, left)
                    131: ZEND_END_ARG_INFO()
                    132: 
                    133: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_round, 0, 0, 2)
                    134:        ZEND_ARG_INFO(0, left)
                    135:        ZEND_ARG_INFO(0, decimals)
                    136: ZEND_END_ARG_INFO()
                    137: 
                    138: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_cmp, 0, 0, 2)
                    139:        ZEND_ARG_INFO(0, left)
                    140:        ZEND_ARG_INFO(0, right)
                    141:        ZEND_ARG_INFO(0, lcid)
                    142:        ZEND_ARG_INFO(0, flags)
                    143: ZEND_END_ARG_INFO()
                    144: 
                    145: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_date_to_timestamp, 0, 0, 1)
                    146:        ZEND_ARG_INFO(0, variant)
                    147: ZEND_END_ARG_INFO()
                    148: 
                    149: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_date_from_timestamp, 0, 0, 1)
                    150:        ZEND_ARG_INFO(0, timestamp)
                    151: ZEND_END_ARG_INFO()
                    152: 
                    153: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_get_type, 0, 0, 1)
                    154:        ZEND_ARG_INFO(0, variant)
                    155: ZEND_END_ARG_INFO()
                    156: 
                    157: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_set_type, 0, 0, 2)
                    158:        ZEND_ARG_INFO(0, variant)
                    159:        ZEND_ARG_INFO(0, type)
                    160: ZEND_END_ARG_INFO()
                    161: 
                    162: ZEND_BEGIN_ARG_INFO_EX(arginfo_variant_cast, 0, 0, 2)
                    163:        ZEND_ARG_INFO(0, variant)
                    164:        ZEND_ARG_INFO(0, type)
                    165: ZEND_END_ARG_INFO()
                    166: 
                    167: ZEND_BEGIN_ARG_INFO_EX(arginfo_com_get_active_object, 0, 0, 1)
                    168:        ZEND_ARG_INFO(0, progid)
                    169:        ZEND_ARG_INFO(0, code_page)
                    170: ZEND_END_ARG_INFO()
                    171: 
                    172: ZEND_BEGIN_ARG_INFO(arginfo_com_create_guid, 0)
                    173: ZEND_END_ARG_INFO()
                    174: 
                    175: ZEND_BEGIN_ARG_INFO_EX(arginfo_com_event_sink, 0, 0, 2)
                    176:        ZEND_ARG_INFO(0, comobject)
                    177:        ZEND_ARG_INFO(0, sinkobject)
                    178:        ZEND_ARG_INFO(0, sinkinterface)
                    179: ZEND_END_ARG_INFO()
                    180: 
                    181: ZEND_BEGIN_ARG_INFO_EX(arginfo_com_print_typeinfo, 0, 0, 1)
                    182:        ZEND_ARG_INFO(0, comobject)
                    183:        ZEND_ARG_INFO(0, dispinterface)
                    184:        ZEND_ARG_INFO(0, wantsink)
                    185: ZEND_END_ARG_INFO()
                    186: 
                    187: ZEND_BEGIN_ARG_INFO_EX(arginfo_com_message_pump, 0, 0, 0)
                    188:        ZEND_ARG_INFO(0, timeoutms)
                    189: ZEND_END_ARG_INFO()
                    190: 
                    191: ZEND_BEGIN_ARG_INFO_EX(arginfo_com_load_typelib, 0, 0, 1)
                    192:        ZEND_ARG_INFO(0, typelib_name)
                    193:        ZEND_ARG_INFO(0, case_insensitive)
                    194: ZEND_END_ARG_INFO()
                    195: /* }}} */
                    196: 
                    197: const zend_function_entry com_dotnet_functions[] = {
                    198:        PHP_FE(variant_set, arginfo_variant_set)
                    199:        PHP_FE(variant_add, arginfo_variant_add)
                    200:        PHP_FE(variant_cat, arginfo_variant_cat)
                    201:        PHP_FE(variant_sub, arginfo_variant_sub)
                    202:        PHP_FE(variant_mul, arginfo_variant_mul)
                    203:        PHP_FE(variant_and, arginfo_variant_and)
                    204:        PHP_FE(variant_div, arginfo_variant_div)
                    205:        PHP_FE(variant_eqv, arginfo_variant_eqv)
                    206:        PHP_FE(variant_idiv, arginfo_variant_idiv)
                    207:        PHP_FE(variant_imp, arginfo_variant_imp)
                    208:        PHP_FE(variant_mod, arginfo_variant_mod)
                    209:        PHP_FE(variant_or, arginfo_variant_or)
                    210:        PHP_FE(variant_pow, arginfo_variant_pow)
                    211:        PHP_FE(variant_xor, arginfo_variant_xor)
                    212:        PHP_FE(variant_abs, arginfo_variant_abs)
                    213:        PHP_FE(variant_fix, arginfo_variant_fix)
                    214:        PHP_FE(variant_int, arginfo_variant_int)
                    215:        PHP_FE(variant_neg, arginfo_variant_neg)
                    216:        PHP_FE(variant_not, arginfo_variant_not)
                    217:        PHP_FE(variant_round, arginfo_variant_round)
                    218:        PHP_FE(variant_cmp, arginfo_variant_cmp)
                    219:        PHP_FE(variant_date_to_timestamp, arginfo_variant_date_to_timestamp)
                    220:        PHP_FE(variant_date_from_timestamp, arginfo_variant_date_from_timestamp)
                    221:        PHP_FE(variant_get_type, arginfo_variant_get_type)
                    222:        PHP_FE(variant_set_type, arginfo_variant_set_type)
                    223:        PHP_FE(variant_cast, arginfo_variant_cast)
                    224:        /* com_com.c */
                    225:        PHP_FE(com_create_guid, arginfo_com_create_guid)
                    226:        PHP_FE(com_event_sink, arginfo_com_event_sink)
                    227:        PHP_FE(com_print_typeinfo, arginfo_com_print_typeinfo)
                    228:        PHP_FE(com_message_pump, arginfo_com_message_pump)
                    229:        PHP_FE(com_load_typelib, arginfo_com_load_typelib)
                    230:        PHP_FE(com_get_active_object, arginfo_com_get_active_object)
                    231:        PHP_FE_END
                    232: };
                    233: 
                    234: /* {{{ com_dotnet_module_entry
                    235:  */
                    236: zend_module_entry com_dotnet_module_entry = {
                    237:        STANDARD_MODULE_HEADER,
                    238:        "com_dotnet",
                    239:        com_dotnet_functions,
                    240:        PHP_MINIT(com_dotnet),
                    241:        PHP_MSHUTDOWN(com_dotnet),
                    242:        PHP_RINIT(com_dotnet),
                    243:        PHP_RSHUTDOWN(com_dotnet),
                    244:        PHP_MINFO(com_dotnet),
                    245:        "0.1",
                    246:        PHP_MODULE_GLOBALS(com_dotnet),
                    247:        PHP_GINIT(com_dotnet),
                    248:        NULL,
                    249:        NULL,
                    250:        STANDARD_MODULE_PROPERTIES_EX
                    251: };
                    252: /* }}} */
                    253: 
                    254: #ifdef COMPILE_DL_COM_DOTNET
                    255: ZEND_GET_MODULE(com_dotnet)
                    256: #endif
                    257: 
                    258: /* {{{ PHP_INI
                    259:  */
                    260: 
                    261: /* com.typelib_file is the path to a file containing a
                    262:  * list of typelibraries to register *persistently*.
                    263:  * lines starting with ; are comments
                    264:  * append #cis to end of typelib name to cause its constants
                    265:  * to be loaded case insensitively */
                    266: static PHP_INI_MH(OnTypeLibFileUpdate)
                    267: {
                    268:        FILE *typelib_file;
                    269:        char *typelib_name_buffer;
                    270:        char *strtok_buf = NULL;
                    271:        int cached;
                    272: 
                    273:        if (!new_value || !new_value[0] || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) {
                    274:                return FAILURE;
                    275:        }
                    276: 
                    277:        typelib_name_buffer = (char *) emalloc(sizeof(char)*1024);
                    278: 
                    279:        while (fgets(typelib_name_buffer, 1024, typelib_file)) {
                    280:                ITypeLib *pTL;
                    281:                char *typelib_name;
                    282:                char *modifier, *ptr;
                    283:                int mode = CONST_CS | CONST_PERSISTENT; /* CONST_PERSISTENT is ok here */
                    284: 
                    285:                if (typelib_name_buffer[0]==';') {
                    286:                        continue;
                    287:                }
                    288:                typelib_name = php_strtok_r(typelib_name_buffer, "\r\n", &strtok_buf); /* get rid of newlines */
                    289:                if (typelib_name == NULL) {
                    290:                        continue;
                    291:                }
                    292:                typelib_name = php_strtok_r(typelib_name, "#", &strtok_buf);
                    293:                modifier = php_strtok_r(NULL, "#", &strtok_buf);
                    294:                if (modifier != NULL) {
                    295:                        if (!strcmp(modifier, "cis") || !strcmp(modifier, "case_insensitive")) {
                    296:                                mode &= ~CONST_CS;
                    297:                        }
                    298:                }
                    299: 
                    300:                /* Remove leading/training white spaces on search_string */
                    301:                while (isspace(*typelib_name)) {/* Ends on '\0' in worst case */
                    302:                        typelib_name ++;
                    303:                }
                    304:                ptr = typelib_name + strlen(typelib_name) - 1;
                    305:                while ((ptr != typelib_name) && isspace(*ptr)) {
                    306:                        *ptr = '\0';
                    307:                        ptr--;
                    308:                }
                    309: 
                    310:                if ((pTL = php_com_load_typelib_via_cache(typelib_name, COMG(code_page), &cached TSRMLS_CC)) != NULL) {
                    311:                        if (!cached) {
                    312:                                php_com_import_typelib(pTL, mode, COMG(code_page) TSRMLS_CC);
                    313:                        }
                    314:                        ITypeLib_Release(pTL);
                    315:                }
                    316:        }
                    317: 
                    318:        efree(typelib_name_buffer);
                    319:        fclose(typelib_file);
                    320: 
                    321:        return SUCCESS;
                    322: }
                    323: 
                    324: PHP_INI_BEGIN()
                    325:     STD_PHP_INI_ENTRY("com.allow_dcom",                                "0", PHP_INI_SYSTEM, OnUpdateBool, allow_dcom, zend_com_dotnet_globals, com_dotnet_globals)
                    326:     STD_PHP_INI_ENTRY("com.autoregister_verbose",      "0", PHP_INI_ALL, OnUpdateBool, autoreg_verbose, zend_com_dotnet_globals, com_dotnet_globals)
                    327:     STD_PHP_INI_ENTRY("com.autoregister_typelib",      "0", PHP_INI_ALL, OnUpdateBool, autoreg_on, zend_com_dotnet_globals, com_dotnet_globals)
                    328:     STD_PHP_INI_ENTRY("com.autoregister_casesensitive",        "1", PHP_INI_ALL, OnUpdateBool, autoreg_case_sensitive, zend_com_dotnet_globals, com_dotnet_globals)
                    329:        STD_PHP_INI_ENTRY("com.code_page", "", PHP_INI_ALL, OnUpdateLong, code_page, zend_com_dotnet_globals, com_dotnet_globals)
                    330:        PHP_INI_ENTRY("com.typelib_file", "", PHP_INI_SYSTEM, OnTypeLibFileUpdate)
                    331: PHP_INI_END()
                    332: /* }}} */
                    333: 
                    334: /* {{{ PHP_GINIT_FUNCTION
                    335:  */
                    336: static PHP_GINIT_FUNCTION(com_dotnet)
                    337: {
                    338:        memset(com_dotnet_globals, 0, sizeof(*com_dotnet_globals));
                    339:        com_dotnet_globals->code_page = CP_ACP;
                    340: }
                    341: /* }}} */
                    342: 
                    343: /* {{{ PHP_MINIT_FUNCTION
                    344:  */
                    345: PHP_MINIT_FUNCTION(com_dotnet)
                    346: {
                    347:        zend_class_entry ce, *tmp;
                    348: 
                    349:        php_com_wrapper_minit(INIT_FUNC_ARGS_PASSTHRU);
                    350:        php_com_persist_minit(INIT_FUNC_ARGS_PASSTHRU);
                    351: 
                    352:        INIT_CLASS_ENTRY(ce, "com_exception", NULL);
                    353:        php_com_exception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC);
                    354:        php_com_exception_class_entry->ce_flags |= ZEND_ACC_FINAL;
                    355: /*     php_com_exception_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */
                    356: 
                    357:        INIT_CLASS_ENTRY(ce, "com_safearray_proxy", NULL);
                    358:        php_com_saproxy_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
                    359:        php_com_saproxy_class_entry->ce_flags |= ZEND_ACC_FINAL;
                    360: /*     php_com_saproxy_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */
                    361:        php_com_saproxy_class_entry->get_iterator = php_com_saproxy_iter_get;
                    362:        
                    363:        INIT_CLASS_ENTRY(ce, "variant", NULL);
                    364:        ce.create_object = php_com_object_new;
                    365:        php_com_variant_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
                    366:        php_com_variant_class_entry->get_iterator = php_com_iter_get;
                    367: 
                    368:        INIT_CLASS_ENTRY(ce, "com", NULL);
                    369:        ce.create_object = php_com_object_new;
                    370:        tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry, "variant" TSRMLS_CC);
                    371:        tmp->get_iterator = php_com_iter_get;
                    372: 
                    373:        zend_ts_hash_init(&php_com_typelibraries, 0, NULL, php_com_typelibrary_dtor, 1);
                    374: 
                    375: #if HAVE_MSCOREE_H
                    376:        INIT_CLASS_ENTRY(ce, "dotnet", NULL);
                    377:        ce.create_object = php_com_object_new;
                    378:        tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry, "variant" TSRMLS_CC);
                    379:        tmp->get_iterator = php_com_iter_get;
                    380: #endif
                    381: 
                    382:        REGISTER_INI_ENTRIES();
                    383: 
                    384: #define COM_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS|CONST_PERSISTENT)
                    385:        
                    386:        COM_CONST(CLSCTX_INPROC_SERVER);
                    387:        COM_CONST(CLSCTX_INPROC_HANDLER);
                    388:        COM_CONST(CLSCTX_LOCAL_SERVER);
                    389:        COM_CONST(CLSCTX_REMOTE_SERVER);
                    390:        COM_CONST(CLSCTX_SERVER);
                    391:        COM_CONST(CLSCTX_ALL);
                    392: 
                    393: #if 0
                    394:        COM_CONST(DISPATCH_METHOD);
                    395:        COM_CONST(DISPATCH_PROPERTYGET);
                    396:        COM_CONST(DISPATCH_PROPERTYPUT);
                    397: #endif
                    398: 
                    399:        COM_CONST(VT_NULL);
                    400:        COM_CONST(VT_EMPTY);
                    401:        COM_CONST(VT_UI1);
                    402:        COM_CONST(VT_I1);
                    403:        COM_CONST(VT_UI2);
                    404:        COM_CONST(VT_I2);
                    405:        COM_CONST(VT_UI4);
                    406:        COM_CONST(VT_I4);
                    407:        COM_CONST(VT_R4);
                    408:        COM_CONST(VT_R8);
                    409:        COM_CONST(VT_BOOL);
                    410:        COM_CONST(VT_ERROR);
                    411:        COM_CONST(VT_CY);
                    412:        COM_CONST(VT_DATE);
                    413:        COM_CONST(VT_BSTR);
                    414:        COM_CONST(VT_DECIMAL);
                    415:        COM_CONST(VT_UNKNOWN);
                    416:        COM_CONST(VT_DISPATCH);
                    417:        COM_CONST(VT_VARIANT);
                    418:        COM_CONST(VT_INT);
                    419:        COM_CONST(VT_UINT);
                    420:        COM_CONST(VT_ARRAY);
                    421:        COM_CONST(VT_BYREF);
                    422: 
                    423:        COM_CONST(CP_ACP);
                    424:        COM_CONST(CP_MACCP);
                    425:        COM_CONST(CP_OEMCP);
                    426:        COM_CONST(CP_UTF7);
                    427:        COM_CONST(CP_UTF8);
                    428:        COM_CONST(CP_SYMBOL);
                    429:        COM_CONST(CP_THREAD_ACP);
                    430: 
                    431:        COM_CONST(VARCMP_LT);
                    432:        COM_CONST(VARCMP_EQ);
                    433:        COM_CONST(VARCMP_GT);
                    434:        COM_CONST(VARCMP_NULL);
                    435: 
                    436:        COM_CONST(NORM_IGNORECASE);
                    437:        COM_CONST(NORM_IGNORENONSPACE);
                    438:        COM_CONST(NORM_IGNORESYMBOLS);
                    439:        COM_CONST(NORM_IGNOREWIDTH);
                    440:        COM_CONST(NORM_IGNOREKANATYPE);
                    441: #ifdef NORM_IGNOREKASHIDA
                    442:        COM_CONST(NORM_IGNOREKASHIDA);
                    443: #endif
                    444:        COM_CONST(DISP_E_DIVBYZERO);
                    445:        COM_CONST(DISP_E_OVERFLOW);
                    446:        COM_CONST(DISP_E_BADINDEX);
                    447:        COM_CONST(MK_E_UNAVAILABLE);
                    448: 
                    449:        return SUCCESS;
                    450: }
                    451: /* }}} */
                    452: 
                    453: /* {{{ PHP_MSHUTDOWN_FUNCTION
                    454:  */
                    455: PHP_MSHUTDOWN_FUNCTION(com_dotnet)
                    456: {
                    457:        UNREGISTER_INI_ENTRIES();
                    458: #if HAVE_MSCOREE_H
                    459:        if (COMG(dotnet_runtime_stuff)) {
                    460:                php_com_dotnet_mshutdown(TSRMLS_C);
                    461:        }
                    462: #endif
                    463: 
                    464:        zend_ts_hash_destroy(&php_com_typelibraries);
                    465:        return SUCCESS;
                    466: }
                    467: /* }}} */
                    468: 
                    469: /* {{{ PHP_RINIT_FUNCTION
                    470:  */
                    471: PHP_RINIT_FUNCTION(com_dotnet)
                    472: {
                    473:        COMG(rshutdown_started) = 0;
                    474:        return SUCCESS;
                    475: }
                    476: /* }}} */
                    477: 
                    478: /* {{{ PHP_RSHUTDOWN_FUNCTION
                    479:  */
                    480: PHP_RSHUTDOWN_FUNCTION(com_dotnet)
                    481: {
                    482: #if HAVE_MSCOREE_H
                    483:        if (COMG(dotnet_runtime_stuff)) {
                    484:                php_com_dotnet_rshutdown(TSRMLS_C);
                    485:        }
                    486: #endif
                    487:        COMG(rshutdown_started) = 1;
                    488:        return SUCCESS;
                    489: }
                    490: /* }}} */
                    491: 
                    492: /* {{{ PHP_MINFO_FUNCTION
                    493:  */
                    494: PHP_MINFO_FUNCTION(com_dotnet)
                    495: {
                    496:        php_info_print_table_start();
                    497: 
                    498:        php_info_print_table_header(2, "COM support", "enabled");
                    499:        php_info_print_table_header(2, "DCOM support", COMG(allow_dcom) ? "enabled" : "disabled");
                    500: 
                    501: #if HAVE_MSCOREE_H
                    502:        php_info_print_table_header(2, ".Net support", "enabled");
                    503: #else
                    504:        php_info_print_table_header(2, ".Net support", "not present in this build");
                    505: #endif
                    506: 
                    507:        php_info_print_table_end();
                    508: 
                    509:        DISPLAY_INI_ENTRIES();
                    510: }
                    511: /* }}} */
                    512: 
                    513: /*
                    514:  * Local variables:
                    515:  * tab-width: 4
                    516:  * c-basic-offset: 4
                    517:  * End:
                    518:  * vim600: noet sw=4 ts=4 fdm=marker
                    519:  * vim<600: noet sw=4 ts=4
                    520:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>