| 1 | |
|---|
| 2 | dnl {{{ PROC_STRING_N_EX(1:dst, 2:src, 3:size, 4:name, 5:type=char) |
|---|
| 3 | define(`PROC_STRING_N_EX', ` |
|---|
| 4 | pushdef(`STRTYPE', `ifelse(`$5',,`char',`$5')') |
|---|
| 5 | pushdef(`PTRTYPE', ifelse( |
|---|
| 6 | STRTYPE, `char', `char', |
|---|
| 7 | STRTYPE, `zstr_char', `char', |
|---|
| 8 | `', `', `UChar')) |
|---|
| 9 | pushdef(`ISTYPE', ifelse(PTRTYPE,`UChar',IS_UNICODE,IS_STRING)) |
|---|
| 10 | pushdef(`UNI_STRLEN', ifelse( |
|---|
| 11 | STRTYPE, `zstr_uchar', `xc_zstrlen_uchar', |
|---|
| 12 | STRTYPE, `zstr_char', `xc_zstrlen_char', |
|---|
| 13 | `', `', `strlen')) |
|---|
| 14 | pushdef(`SRCSTR', ifelse(STRTYPE,`char',`ZSTR($2)',STRTYPE,`UChar',`ZSTR($2)',`$2')) |
|---|
| 15 | pushdef(`SRCPTR', ifelse( |
|---|
| 16 | STRTYPE, `zstr_uchar', `ZSTR_U($2)', |
|---|
| 17 | STRTYPE, `zstr_char', `ZSTR_S($2)', |
|---|
| 18 | `', `', `$2')) |
|---|
| 19 | pushdef(`DSTPTR', ifelse( |
|---|
| 20 | STRTYPE, `zstr_uchar', `ZSTR_U($1)', |
|---|
| 21 | STRTYPE, `zstr_char', `ZSTR_S($1)', |
|---|
| 22 | `', `', `$1')) |
|---|
| 23 | pushdef(`STRDUP', ifelse( |
|---|
| 24 | PTRTYPE, `char', `estrndup', |
|---|
| 25 | PTRTYPE, `UChar', `eustrndup')) |
|---|
| 26 | if (SRCPTR == NULL) { |
|---|
| 27 | IFNOTMEMCPY(`IFCOPY(` |
|---|
| 28 | DSTPTR = NULL; |
|---|
| 29 | ')') |
|---|
| 30 | IFDASM(` |
|---|
| 31 | add_assoc_null_ex(dst, ZEND_STRS("$4")); |
|---|
| 32 | ') |
|---|
| 33 | } |
|---|
| 34 | else { |
|---|
| 35 | IFDPRINT(`INDENT() |
|---|
| 36 | ifelse(STRTYPE, `zstr_uchar', ` |
|---|
| 37 | #ifdef IS_UNICODE |
|---|
| 38 | do { |
|---|
| 39 | zval zv; |
|---|
| 40 | zval reszv; |
|---|
| 41 | int usecopy; |
|---|
| 42 | |
|---|
| 43 | INIT_ZVAL(zv); |
|---|
| 44 | ZVAL_UNICODEL(&zv, ZSTR_U($2), $3 - 1, 1); |
|---|
| 45 | zend_make_printable_zval(&zv, &reszv, &usecopy); |
|---|
| 46 | fprintf(stderr, "string:%s:\t\"", "$1"); |
|---|
| 47 | xc_dprint_str_len(Z_STRVAL(reszv), Z_STRLEN(reszv)); |
|---|
| 48 | fprintf(stderr, "\" len=%d\n", $3 - 1); |
|---|
| 49 | if (usecopy) { |
|---|
| 50 | zval_dtor(&reszv); |
|---|
| 51 | } |
|---|
| 52 | zval_dtor(&zv); |
|---|
| 53 | } while (0); |
|---|
| 54 | #endif |
|---|
| 55 | ', ` |
|---|
| 56 | fprintf(stderr, "string:%s:\t\"", "$1"); |
|---|
| 57 | xc_dprint_str_len(SRCPTR, $3 - 1); |
|---|
| 58 | fprintf(stderr, "\" len=%d\n", $3 - 1); |
|---|
| 59 | ') |
|---|
| 60 | ') |
|---|
| 61 | IFCALC(`xc_calc_string_n(processor, ISTYPE, SRCSTR, $3 C_RELAYLINE);') |
|---|
| 62 | IFSTORE(`DSTPTR = ifelse(PTRTYPE,`char',`ZSTR_S',`ZSTR_U')(xc_store_string_n(processor, ISTYPE, SRCSTR, $3 C_RELAYLINE));') |
|---|
| 63 | IFRESTORE(` |
|---|
| 64 | DSTPTR = STRDUP() (SRCPTR, ($3) - 1); |
|---|
| 65 | ') |
|---|
| 66 | FIXPOINTER_EX(`PTRTYPE', DSTPTR) |
|---|
| 67 | IFDASM(` |
|---|
| 68 | ifelse(STRTYPE,zstr_uchar, ` |
|---|
| 69 | add_assoc_unicodel_ex(dst, ZEND_STRS("$4"), ZSTR_U($2), $3-1, 1); |
|---|
| 70 | ', ` dnl else |
|---|
| 71 | ifelse(STRTYPE,zstr_char, ` |
|---|
| 72 | add_assoc_stringl_ex(dst, ZEND_STRS("$4"), ZSTR_S($2), $3-1, 1); |
|---|
| 73 | ', ` |
|---|
| 74 | add_assoc_stringl_ex(dst, ZEND_STRS("$4"), $2, $3-1, 1); |
|---|
| 75 | ') |
|---|
| 76 | ') |
|---|
| 77 | ') |
|---|
| 78 | } |
|---|
| 79 | popdef(`STRDUP') |
|---|
| 80 | popdef(`DSTPTR') |
|---|
| 81 | popdef(`SRCPTR') |
|---|
| 82 | popdef(`SRCSTR') |
|---|
| 83 | popdef(`UNI_STRLEN') |
|---|
| 84 | popdef(`STRTYPE') |
|---|
| 85 | popdef(`ISTYPE') |
|---|
| 86 | ') |
|---|
| 87 | dnl }}} |
|---|
| 88 | dnl PROC_STRING_N(1:name, 2:size, 3:type) |
|---|
| 89 | define(`PROC_STRING_N', `DBG(`$0($*)') DONE(`$1')`'PROC_STRING_N_EX(`DST(`$1')', `SRC(`$1')', `SRC(`$2')', `$1', `char')') |
|---|
| 90 | define(`PROC_USTRING_N', `DBG(`$0($*)') DONE(`$1')`'PROC_STRING_N_EX(`DST(`$1')', `SRC(`$1')', `SRC(`$2')', `$1', `UChar')') |
|---|
| 91 | |
|---|
| 92 | define(`PROC_STRING_L', `DBG(`$0($*)') PROC_STRING_N(`$1', `$2 + 1')') |
|---|
| 93 | define(`PROC_USTRING_L', `DBG(`$0($*)') PROC_USTRING_N(`$1', `$2 + 1')') |
|---|
| 94 | define(`PROC_STRING', `DBG(`$0($*)') DONE(`$1')`'PROC_STRING_N_EX(`DST(`$1')', `SRC(`$1')', `strlen(SRC(`$1')) + 1', `$1', `char')') |
|---|
| 95 | define(`PROC_USTRING', `DBG(`$0($*)') DONE(`$1')`'PROC_STRING_N_EX(`DST(`$1')', `SRC(`$1')', `strlen(SRC(`$1')) + 1', `$1', `UChar')') |
|---|
| 96 | |
|---|
| 97 | dnl {{{ PROC_ZSTRING_N(1:type, 2:name, 3:size, 4:size_type) |
|---|
| 98 | define(`PROC_ZSTRING_N', ` |
|---|
| 99 | DBG(`$0($*)') |
|---|
| 100 | #ifdef IS_UNICODE |
|---|
| 101 | pushdef(`NSIZE', ifelse( |
|---|
| 102 | `$4', `strlen', `UNI_STRLEN (SRC(`$2')) + 1', |
|---|
| 103 | `$4', `len', `SRC(`$3') + 1', |
|---|
| 104 | `', `', `SRC(`$3')', |
|---|
| 105 | )) |
|---|
| 106 | DONE(`$2') |
|---|
| 107 | ifelse(`$1', `1', `PROC_STRING_N_EX(`DST(`$2')', `SRC(`$2')', defn(`NSIZE'), `$2', `zstr_uchar') |
|---|
| 108 | ', ` |
|---|
| 109 | if (ifelse(`$1', `', `UG(unicode)', `SRC(`$1') == IS_UNICODE')) { |
|---|
| 110 | PROC_STRING_N_EX(`DST(`$2')', `SRC(`$2')', defn(`NSIZE'), `$2', `zstr_uchar') |
|---|
| 111 | } |
|---|
| 112 | else { |
|---|
| 113 | PROC_STRING_N_EX(`DST(`$2')', `SRC(`$2')', defn(`NSIZE'), `$2', `zstr_char') |
|---|
| 114 | } |
|---|
| 115 | ') |
|---|
| 116 | #else |
|---|
| 117 | DONE(`$2') |
|---|
| 118 | PROC_STRING_N_EX(`DST(`$2')', `SRC(`$2')', NSIZE, `$2', `zstr_char') |
|---|
| 119 | #endif |
|---|
| 120 | popdef(`NSIZE') |
|---|
| 121 | ') |
|---|
| 122 | dnl }}} |
|---|
| 123 | define(`PROC_ZSTRING_L', `DBG(`$0($*)') PROC_ZSTRING_N(`$1', `$2', `$3', `len')') |
|---|
| 124 | define(`PROC_ZSTRING', `DBG(`$0($*)') PROC_ZSTRING_N(`$1', `$2', , `strlen')') |
|---|