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