123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- #include <signal.h>
- #include "php.h"
- #include "php_ini.h"
- #include "ext/standard/info.h"
- #include "php_mysqli_structs.h"
- PHP_FUNCTION(mysqli_embedded_server_start)
- {
- #ifdef HAVE_EMBEDDED_MYSQLI
- zend_long start;
- zval *args;
- zval *grps;
- int argc = 0;
- char **arguments;
- char **groups;
- HashPosition pos;
- int index, rc;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "laa", &start, &args, &grps) == FAILURE) {
- return;
- }
- if (!start) {
- mysql_server_init(-1,NULL, NULL);
- RETURN_TRUE;
- }
-
- if ((argc = zend_hash_num_elements(Z_ARRVAL_P(args)))) {
- arguments = safe_emalloc(sizeof(char *), argc + 1, 0);
- arguments[0] = NULL;
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(args), &pos);
- for (index = 0;; zend_hash_move_forward_ex(Z_ARRVAL_P(args), &pos)) {
- zval **item;
- if (zend_hash_get_current_data_ex(Z_ARRVAL_P(args), (void **) &item, &pos) == FAILURE) {
- break;
- }
- convert_to_string_ex(item);
- arguments[++index] = Z_STRVAL_PP(item);
- }
- argc++;
- }
-
- if ((zend_hash_num_elements(Z_ARRVAL_P(grps)))) {
- groups = safe_emalloc(sizeof(char *), zend_hash_num_elements(Z_ARRVAL_P(grps)) + 1, 0);
- groups[0] = NULL;
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(grps), &pos);
- for (index = 0;; zend_hash_move_forward_ex(Z_ARRVAL_P(grps), &pos)) {
- zval ** item;
- if (zend_hash_get_current_data_ex(Z_ARRVAL_P(grps), (void **) &item, &pos) == FAILURE) {
- break;
- }
- convert_to_string_ex(item);
- groups[++index] = Z_STRVAL_PP(item);
- }
- groups[index] = NULL;
- } else {
- groups = safe_emalloc(sizeof(char *), 1, 0);
- groups[0] = NULL;
- }
- rc = mysql_server_init(argc, arguments, groups);
- if (argc) {
- efree(arguments);
- }
- efree(groups);
- if (rc) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
- #endif
- }
- PHP_FUNCTION(mysqli_embedded_server_end)
- {
- #ifdef HAVE_MYSQLI_EMBEDDED
- mysql_server_end();
- #endif
- }
|