break;
case DNS_T_TXT:
{
+ zval *txtarray = NULL;
int ll = 0;
+ char *txt = NULL;
add_assoc_string(*subarray, "type", "TXT", 1);
tp = emalloc(dlen + 1);
+ MAKE_STD_ZVAL(txtarray);
+ array_init(txtarray);
+
while (ll < dlen) {
+ txt = tp + ll;
n = cp[ll];
- memcpy(tp + ll , cp + ll + 1, n);
+ memcpy(txt, cp + ll + 1, n);
ll = ll + n + 1;
+ tp[ll] = '\0';
+ add_next_index_stringl(txtarray, txt, n, 1);
}
- tp[dlen] = '\0';
+
cp += dlen;
- add_assoc_stringl(*subarray, "txt", tp, dlen - 1, 0);
+ add_assoc_zval(*subarray, "txt", txtarray);
+ efree(tp);
}
break;
case DNS_T_SOA:
int i = 0;
DNS_TXT_DATA *data_txt = &pRec->Data.TXT;
DWORD count = data_txt->dwStringCount;
- char *txt, *txt_dst;
+ char *txt;
long txt_len;
+ zval *txtarray;
- add_assoc_string(*subarray, "type", "TXT", 1);
+ MAKE_STD_ZVAL(txtarray);
+ array_init(txtarray);
- txt_len = 0;
- for (i = 0; i < count; i++) {
- txt_len += strlen(data_txt->pStringArray[i]) + 1;
- }
+ add_assoc_string(*subarray, "type", "TXT", 1);
- txt = ecalloc(txt_len * 2, 1);
- txt_dst = txt;
for (i = 0; i < count; i++) {
- int len = strlen(data_txt->pStringArray[i]);
- memcpy(txt_dst, data_txt->pStringArray[i], len);
- txt_dst += len;
+ txt_len = strlen(data_txt->pStringArray[i]);
+ txt = emalloc(txt_len + 1);
+ memcpy(txt, data_txt->pStringArray[i], txt_len);
+ txt[txt_len] = '\0';
+ add_next_index_stringl(txtarray, txt, txt_len, 0);
}
- add_assoc_string(*subarray, "txt", txt, 0);
+ add_assoc_zval(*subarray, "txt", txtarray);
}
break;