1 /*
2 +----------------------------------------------------------------------+
3 | PHP Version 7 |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1997-2018 The PHP Group |
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: Georg Richter <georg@php.net> |
16 +----------------------------------------------------------------------+
17
18 */
19 #ifdef HAVE_CONFIG_H
20 #include "config.h"
21 #endif
22
23 #include <signal.h>
24
25 #include "php.h"
26 #include "php_ini.h"
27 #include "ext/standard/info.h"
28 #include "php_mysqli_structs.h"
29
30 /* {{{ proto bool mysqli_embedded_server_start(bool start, array arguments, array groups)
31 initialize and start embedded server */
PHP_FUNCTION(mysqli_embedded_server_start)32 PHP_FUNCTION(mysqli_embedded_server_start)
33 {
34 #ifdef HAVE_EMBEDDED_MYSQLI
35 zend_long start;
36 zval *args;
37 zval *grps;
38
39 int argc = 0;
40 char **arguments;
41 char **groups;
42 HashPosition pos;
43 int index, rc;
44
45 if (zend_parse_parameters(ZEND_NUM_ARGS(), "laa", &start, &args, &grps) == FAILURE) {
46 return;
47 }
48
49 if (!start) {
50 mysql_server_init(-1,NULL, NULL);
51 RETURN_TRUE;
52 }
53 /* get arguments */
54 if ((argc = zend_hash_num_elements(Z_ARRVAL_P(args)))) {
55 arguments = safe_emalloc(sizeof(char *), argc + 1, 0);
56 arguments[0] = NULL;
57
58 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(args), &pos);
59
60 for (index = 0;; zend_hash_move_forward_ex(Z_ARRVAL_P(args), &pos)) {
61 zval **item;
62
63 if (zend_hash_get_current_data_ex(Z_ARRVAL_P(args), (void **) &item, &pos) == FAILURE) {
64 break;
65 }
66
67 convert_to_string_ex(item);
68
69 arguments[++index] = Z_STRVAL_PP(item);
70 }
71 argc++;
72 }
73
74 /* get groups */
75 if ((zend_hash_num_elements(Z_ARRVAL_P(grps)))) {
76 groups = safe_emalloc(sizeof(char *), zend_hash_num_elements(Z_ARRVAL_P(grps)) + 1, 0);
77 groups[0] = NULL;
78
79 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(grps), &pos);
80
81 for (index = 0;; zend_hash_move_forward_ex(Z_ARRVAL_P(grps), &pos)) {
82 zval ** item;
83
84 if (zend_hash_get_current_data_ex(Z_ARRVAL_P(grps), (void **) &item, &pos) == FAILURE) {
85 break;
86 }
87
88 convert_to_string_ex(item);
89
90 groups[++index] = Z_STRVAL_PP(item);
91 }
92 groups[index] = NULL;
93 } else {
94 groups = safe_emalloc(sizeof(char *), 1, 0);
95 groups[0] = NULL;
96 }
97
98 rc = mysql_server_init(argc, arguments, groups);
99
100 if (argc) {
101 efree(arguments);
102 }
103 efree(groups);
104
105 if (rc) {
106 RETURN_FALSE;
107 }
108 RETURN_TRUE;
109 #endif
110 }
111 /* }}} */
112
113 /* {{{ proto void mysqli_embedded_server_end(void)
114 */
PHP_FUNCTION(mysqli_embedded_server_end)115 PHP_FUNCTION(mysqli_embedded_server_end)
116 {
117 #ifdef HAVE_MYSQLI_EMBEDDED
118 mysql_server_end();
119 #endif
120 }
121 /* }}} */
122
123 /*
124 * Local variables:
125 * tab-width: 4
126 * c-basic-offset: 4
127 * indent-tabs-mode: t
128 * End:
129 * vim600: noet sw=4 ts=4 fdm=marker
130 * vim<600: noet sw=4 ts=4
131 */
132