return psi_val_boolval(tmp, real_type, boolval);
}
+#if HAVE_INT128
static inline char *psi_u128_to_buf(char *buf, unsigned __int128 u128)
{
for (*buf = 0; u128 > 0; u128 /= 10) {
return psi_u128_to_buf(buf, i128);
}
-#if HAVE_INT128
# define RETVAL_LONG_STR(V, s) do {\
char buf[0x30] = {0}; \
if (s && V >= ZEND_LONG_MIN && V <= ZEND_LONG_MAX) { \
impl_val *ptr = deref_impl_val(ret_val, var);
char *str;
- if (var->arg->var->array_size) {
+ /* holy moly, this breaks arrays of pointers to char,
+ * like e.g. tzname */
+ if (var->arg->var->array_size && var->arg->var->pointer_level == 1) {
str = (char *) ptr;
} else {
str = ptr->ptr;
count = psi_num_exp_get_long(sub_exp->data.num, frame, NULL);
psi_plist_get(set->inner, 1, &sub_exp);
- for (ptr = (char *) ret_val; 0 < count--; ptr += size) {
size = psi_decl_var_get_size(psi_set_exp_get_decl_var(sub_exp));
+ for (ptr = (char *) ret_val; 0 < count--; ptr += size) {
zval ele;
ZVAL_NULL(&ele);