dnl {{{ PROC_STRING_N_EX(1:dst, 2:src, 3:size, 4:name, 5:type=char) define(`PROC_STRING_N_EX', ` pushdef(`STRTYPE', `ifelse(`$5',,`char',`$5')') pushdef(`ISTYPE', ifelse(STRTYPE,`char',IS_STRING,IS_UNICODE)) if ($2 == NULL) { IFNOTMEMCPY(`IFCOPY(` $1 = NULL; ')') IFDASM(` add_assoc_null_ex(dst, ZEND_STRS("$4")); ') } else { IFDPRINT(`INDENT() ifelse(STRTYPE, `UChar', ` #ifdef IS_UNICODE do { zval zv; zval reszv; int usecopy; INIT_ZVAL(zv); ZVAL_UNICODEL(&zv, (UChar *) ($2), $3 - 1, 1); zend_make_printable_zval(&zv, &reszv, &usecopy); fprintf(stderr, "string:%s:\t\"%s\" len=%d\n", "$1", reszv.value.str.val, $3 - 1); if (usecopy) { zval_dtor(&reszv); } zval_dtor(&zv); } while (0); #endif ', ` fprintf(stderr, "string:%s:\t\"%s\" len=%d\n", "$1", $2, $3 - 1); ') ') IFCALC(`xc_calc_string_n(processor, ISTYPE, (void *) $2, `$3' IFASSERT(`, __LINE__'));') IFSTORE(`$1 = (typeof($1)) xc_store_string_n(processor, ISTYPE, (char *) $2, `$3' IFASSERT(`, __LINE__'));') IFRESTORE(` ALLOC(`$1', `typeof($1[0])', `sizeof(STRTYPE) * ($3)') memcpy($1, $2, sizeof(STRTYPE) * ($3)); ') FIXPOINTER_EX(`typeof($1[0])', `$1') IFDASM(` ifelse(STRTYPE,UChar, ` add_assoc_unicodel_ex(dst, ZEND_STRS("$4"), $2, $3-1, 1); ', ` dnl else add_assoc_stringl_ex(dst, ZEND_STRS("$4"), $2, $3-1, 1);') ') } popdef(`STRTYPE') popdef(`ISTYPE') ') dnl }}} dnl PROC_STRING_N(1:name, 2:size, 3:type) define(`PROC_STRING_N', `DBG(`$0($*)') DONE(`$1')`'PROC_STRING_N_EX(`dst->$1', `src->$1', `src->$2', `$1', `char')') define(`PROC_STRING_L', `DBG(`$0($*)') PROC_STRING_N(`$1', `$2 + 1')') define(`PROC_STRING', `DBG(`$0($*)') DONE(`$1')`'PROC_STRING_N_EX(`dst->$1', `src->$1', `strlen(src->$1) + 1', `$1', `char')') dnl {{{ PROC_USTRING_N(1:type, 2:name, 3:size, 4:size_type) define(`PROC_USTRING_N', ` DBG(`$0($*)') #ifdef IS_UNICODE pushdef(`NSIZE', ifelse( `$4', `strlen', `strlen(src->$2) + 1', `$4', `len', `src->$3 + 1', `', `', `src->$3', )) DONE(`$2') ifelse(`$1', `1', `PROC_STRING_N_EX(`dst->$2', `src->$2', NSIZE, `$2', `UChar') ', ` if (ifelse(`$1', `', `UG(unicode)', `src->$1')) { PROC_STRING_N_EX(`dst->$2', `src->$2', NSIZE, `$2', `UChar') } else { PROC_STRING_N_EX(`dst->$2', `src->$2', NSIZE, `$2', `char') } ') #else DONE(`$2') PROC_STRING_N_EX(`dst->$2', `src->$2', NSIZE, `$2', `char') #endif popdef(`NSIZE') ') // }}} define(`PROC_USTRING_L', `DBG(`$0($*)') PROC_USTRING_N(`$1', `$2', `$3', `len')') define(`PROC_USTRING', `DBG(`$0($*)') PROC_USTRING_N(`$1', `$2', , `strlen')')