1/* ----------------------------------------------------------------------------- 2 * See the LICENSE file for information on copyright, usage and redistribution 3 * of SWIG, and the README file for authors - http://www.swig.org/release.html. 4 * 5 * globalvar.i 6 * 7 * Global variables - add the variable to PHP 8 * ----------------------------------------------------------------------------- */ 9 10%typemap(varinit) char *, 11 char [] 12{ 13 zval *z_var; 14 MAKE_STD_ZVAL(z_var); 15 z_var->type = IS_STRING; 16 if($1) { 17 z_var->value.str.val = estrdup($1); 18 z_var->value.str.len = strlen($1); 19 } else { 20 z_var->value.str.val = 0; 21 z_var->value.str.len = 0; 22 } 23 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL); 24} 25 26%typemap(varinit) int, 27 unsigned int, 28 unsigned short, 29 short, 30 unsigned short, 31 long, 32 unsigned long, 33 signed char, 34 unsigned char, 35 enum SWIGTYPE 36{ 37 zval *z_var; 38 MAKE_STD_ZVAL(z_var); 39 z_var->type = IS_LONG; 40 z_var->value.lval = $1; 41 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL); 42} 43 44%typemap(varinit) bool 45{ 46 zval *z_var; 47 MAKE_STD_ZVAL(z_var); 48 z_var->type = IS_BOOL; 49 z_var->value.lval = ($1)?1:0; 50 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL); 51} 52 53%typemap(varinit) float, double 54{ 55 zval *z_var; 56 MAKE_STD_ZVAL(z_var); 57 z_var->type = IS_DOUBLE; 58 z_var->value.dval = $1; 59 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, 60 sizeof(zval *), NULL); 61} 62 63%typemap(varinit) char 64{ 65 zval *z_var; 66 char c[2]; 67 MAKE_STD_ZVAL(z_var); 68 c[0] = $1; 69 c[1] = 0; 70 z_var->type = IS_STRING; 71 z_var->value.str.val = estrndup(c, 1); 72 z_var->value.str.len = 1; 73 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, 74 sizeof(zval *), NULL); 75} 76 77%typemap(varinit) SWIGTYPE *, SWIGTYPE [] 78{ 79 zval *z_var; 80 MAKE_STD_ZVAL(z_var); 81 SWIG_SetPointerZval(z_var, (void*)$1, $1_descriptor, 0); 82 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, 83 sizeof(zval *), NULL); 84} 85 86%typemap(varinit) SWIGTYPE, SWIGTYPE & 87{ 88 zval *z_var; 89 90 MAKE_STD_ZVAL(z_var); 91 SWIG_SetPointerZval(z_var, (void*)&$1, $&1_descriptor, 0); 92 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var, 93 sizeof(zval *), NULL); 94} 95 96%typemap(varinit) char [ANY] 97{ 98 zval *z_var; 99 MAKE_STD_ZVAL(z_var); 100 z_var->type = IS_STRING; 101 if ($1) { 102 // varinit char [ANY] 103 ZVAL_STRINGL(z_var,(char*)$1, $1_dim0, 1); 104 } 105 zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var, sizeof(zval *), NULL); 106} 107 108%typemap(varin) int, unsigned int, short, unsigned short, long, unsigned long, signed char, unsigned char, enum SWIGTYPE 109{ 110 zval **z_var; 111 112 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 113 convert_to_long_ex(z_var); 114 if ($1 != ($1_ltype)((*z_var)->value.lval)) { 115 $1 = Z_LVAL_PP(z_var); 116 } 117} 118 119%typemap(varin) bool 120{ 121 zval **z_var; 122 123 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 124 convert_to_boolean_ex(z_var); 125 if ($1 != ($1_ltype)((*z_var)->value.lval)) { 126 $1 = Z_LVAL_PP(z_var); 127 } 128} 129 130%typemap(varin) double,float 131{ 132 zval **z_var; 133 134 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 135 convert_to_double_ex(z_var); 136 if ($1 != ($1_ltype)((*z_var)->value.dval)) { 137 $1 = Z_DVAL_PP(z_var); 138 } 139} 140 141%typemap(varin) char 142{ 143 zval **z_var; 144 145 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 146 convert_to_string_ex(z_var); 147 if ($1 != *((*z_var)->value.str.val)) { 148 $1 = *((*z_var)->value.str.val); 149 } 150} 151 152%typemap(varin) char * 153{ 154 zval **z_var; 155 char *s1; 156 157 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 158 convert_to_string_ex(z_var); 159 s1 = Z_STRVAL_PP(z_var); 160 if ((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) { 161 if (s1) 162 $1 = estrdup(s1); 163 else 164 $1 = NULL; 165 } 166} 167 168 169%typemap(varin) SWIGTYPE [] 170{ 171 zval **z_var; 172 173 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 174 if($1) { 175 SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, $owner); 176 } 177} 178 179%typemap(varin) char [ANY] 180{ 181 zval **z_var; 182 char *s1; 183 184 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 185 s1 = Z_STRVAL_PP(z_var); 186 if((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) { 187 if(s1) 188 strncpy($1, s1, $1_dim0); 189 } 190} 191 192%typemap(varin) SWIGTYPE 193{ 194 zval **z_var; 195 $&1_ltype _temp; 196 197 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 198 if (SWIG_ConvertPtr(*z_var, (void**)&_temp, $&1_descriptor, 0) < 0) { 199 SWIG_PHP_Error(E_ERROR,"Type error in value of $symname. Expected $&1_descriptor"); 200 } 201 202 $1 = *($&1_ltype)_temp; 203 204} 205 206%typemap(varin) SWIGTYPE *, SWIGTYPE & 207{ 208 zval **z_var; 209 $1_ltype _temp; 210 211 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 212 if (SWIG_ConvertPtr(*z_var, (void **)&_temp, $1_descriptor, 0) < 0) { 213 SWIG_PHP_Error(E_ERROR,"Type error in value of $symname. Expected $&1_descriptor"); 214 } 215 216 $1 = ($1_ltype)_temp; 217} 218 219%typemap(varout) int, 220 unsigned int, 221 unsigned short, 222 short, 223 long, 224 unsigned long, 225 signed char, 226 unsigned char, 227 enum SWIGTYPE 228{ 229 zval **z_var; 230 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 231 if($1 != ($1_ltype)((*z_var)->value.lval)) { 232 (*z_var)->value.lval = (long)$1; 233 } 234} 235 236//SAMFIX need to cast zval->type, what if zend-hash_find fails? etc? 237%typemap(varout) bool 238{ 239 zval **z_var; 240 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 241 if($1 != ($1_ltype)((*z_var)->value.lval)) { 242 (*z_var)->value.lval = (long)$1; 243 } 244} 245 246%typemap(varout) double, float 247{ 248 zval **z_var; 249 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 250 if($1 != ($1_ltype)((*z_var)->value.dval)) { 251 (*z_var)->value.dval = (double)$1; 252 } 253} 254 255%typemap(varout) char 256{ 257 zval **z_var; 258 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 259 if($1 != *((*z_var)->value.str.val)) { 260 char c[2]; 261 efree((*z_var)->value.str.val); 262 c[0] = $1; 263 c[1] = 0; 264 (*z_var)->value.str.val = estrdup(c); 265 } 266} 267 268%typemap(varout) char * 269{ 270 zval **z_var; 271 char *s1; 272 273 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 274 s1 = Z_STRVAL_PP(z_var); 275 if((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1) )) { 276 if(s1) 277 efree(s1); 278 if($1) { 279 (*z_var)->value.str.val = estrdup($1); 280 (*z_var)->value.str.len = strlen($1) +1; 281 } else { 282 (*z_var)->value.str.val = 0; 283 (*z_var)->value.str.len = 0; 284 } 285 } 286} 287 288%typemap(varout) SWIGTYPE 289{ 290 zval **z_var; 291 292 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 293 SWIG_SetPointerZval(*z_var, (void*)&$1, $&1_descriptor, 0); 294} 295 296%typemap(varout) SWIGTYPE [] 297{ 298 zval **z_var; 299 300 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 301 if($1) 302 SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0); 303} 304 305%typemap(varout) char [ANY] 306{ 307 zval **z_var; 308 char *s1; 309deliberate error cos this code looks bogus to me 310 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 311 s1 = Z_STRVAL_PP(z_var); 312 if((s1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) { 313 if($1) { 314 (*z_var)->value.str.val = estrdup($1); 315 (*z_var)->value.str.len = strlen($1)+1; 316 } else { 317 (*z_var)->value.str.val = 0; 318 (*z_var)->value.str.len = 0; 319 } 320 } 321} 322 323%typemap(varout) SWIGTYPE *, SWIGTYPE & 324{ 325 zval **z_var; 326 327 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var); 328 SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0); 329} 330 331 332