ZVAL_STRING(&zv, dateobj->time->tz_info->name);
break;
case TIMELIB_ZONETYPE_OFFSET: {
- char *tmpstr = emalloc(sizeof("UTC+05:00"));
+ zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0);
timelib_sll utc_offset = dateobj->time->z;
- snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d",
+ tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d",
utc_offset > 0 ? '-' : '+',
abs(utc_offset / 60),
abs((utc_offset % 60)));
- // TODO: avoid reallocation ???
- ZVAL_STRING(&zv, tmpstr);
- efree(tmpstr);
+ ZVAL_STR(&zv, tmpstr);
}
break;
case TIMELIB_ZONETYPE_ABBR:
ZVAL_STRING(&zv, tzobj->tzi.tz->name);
break;
case TIMELIB_ZONETYPE_OFFSET: {
- char *tmpstr = emalloc(sizeof("UTC+05:00"));
+ zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0);
- snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d",
+ tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d",
tzobj->tzi.utc_offset > 0 ? '-' : '+',
abs(tzobj->tzi.utc_offset / 60),
abs((tzobj->tzi.utc_offset % 60)));
- // TODO: avoid reallocation ???
- ZVAL_STRING(&zv, tmpstr);
- efree(tmpstr);
+ ZVAL_STR(&zv, tmpstr);
}
break;
case TIMELIB_ZONETYPE_ABBR:
RETURN_STRING(tzobj->tzi.tz->name);
break;
case TIMELIB_ZONETYPE_OFFSET: {
- char *tmpstr = emalloc(sizeof("UTC+05:00"));
+ zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0);
timelib_sll utc_offset = tzobj->tzi.utc_offset;
- snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d",
+ tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d",
utc_offset > 0 ? '-' : '+',
abs(utc_offset / 60),
abs((utc_offset % 60)));
- // TODO: avoid reallocation ???
- RETVAL_STRING(tmpstr);
- efree(tmpstr);
- return;
+ RETURN_STR(tmpstr);
}
break;
case TIMELIB_ZONETYPE_ABBR:
{
int ll = 0;
zval entries;
+ zend_string *tp;
add_assoc_string(subarray, "type", "TXT");
- tp = emalloc(dlen + 1);
+ tp = STR_ALLOC(dlen, 0);
array_init(&entries);
while (ll < dlen) {
n = cp[ll];
- memcpy(tp + ll , cp + ll + 1, n);
+ memcpy(tp->val + ll , cp + ll + 1, n);
add_next_index_stringl(&entries, (char*)cp + ll + 1, n);
ll = ll + n + 1;
}
- tp[dlen] = '\0';
+ tp->val[dlen] = '\0';
+ tp->len = dlen;
cp += dlen;
- // TODO: avoid reallocation ???
- add_assoc_stringl(subarray, "txt", (char*)tp, (dlen>0)?dlen - 1:0);
- efree(tp);
+ add_assoc_str(subarray, "txt", tp);
add_assoc_zval(subarray, "entries", &entries);
}
break;
DWORD i = 0;
DNS_TXT_DATA *data_txt = &pRec->Data.TXT;
DWORD count = data_txt->dwStringCount;
- char *txt, *txt_dst;
+ zend_string *txt;
+ char *txt_dst;
long txt_len = 0;
zval *entries;
txt_len += strlen(data_txt->pStringArray[i]) + 1;
}
- txt = ecalloc(txt_len * 2, 1);
- txt_dst = txt;
+ txt = STR_SAFE_ALLOC(txt_len, 2, 0, 0);
+ txt_dst = txt->val;
for (i = 0; i < count; i++) {
int len = strlen(data_txt->pStringArray[i]);
memcpy(txt_dst, data_txt->pStringArray[i], len);
add_next_index_stringl(entries, data_txt->pStringArray[i], len);
txt_dst += len;
}
-
- // TODO: avoid reallocation ???
- add_assoc_string(*subarray, "txt", txt);
- efree(txt);
+ tct->len = txt_dst - txt->val;
+ add_assoc_str(*subarray, "txt", txt);
add_assoc_zval(*subarray, "entries", entries);
}
break;