summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2009-01-12 14:53:03 +0000
committerFelipe Pena <felipe@php.net>2009-01-12 14:53:03 +0000
commita5e405424ef317a71520d4aa1d724f4f7d345fcb (patch)
tree5c0a832618d304034335cd34cd9346a4d55cba5c /ext
parentedbf382fcc9b0a6b61e7cc92fe425675998e643a (diff)
downloadphp-git-a5e405424ef317a71520d4aa1d724f4f7d345fcb.tar.gz
- Reverted my previous commit to avoid unnecessary BC.
[DOC] Added new entry to the array returned by dns_get_record(), 'entries', which contains the separated value from TXT value. (so 'txt' kept the concatenated version) (Pierre) - Unicode++ (Felipe)
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/dns.c22
-rw-r--r--ext/standard/dns_win32.c96
2 files changed, 61 insertions, 57 deletions
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index 374d366c44..cb30b3b67c 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -457,28 +457,26 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int
break;
case DNS_T_TXT:
{
- zval *txtarray = NULL;
int ll = 0;
- char *txt = NULL;
+ zval *entries = NULL;
add_ascii_assoc_rt_string(*subarray, "type", "TXT", ZSTR_DUPLICATE);
tp = emalloc(dlen + 1);
-
- MAKE_STD_ZVAL(txtarray);
- array_init(txtarray);
+
+ MAKE_STD_ZVAL(entries);
+ array_init(entries);
while (ll < dlen) {
- txt = tp + ll;
n = cp[ll];
- memcpy(txt, cp + ll + 1, n);
+ memcpy(tp + ll, cp + ll + 1, n);
+ add_next_index_rt_stringl(entries, cp + ll + 1, n, ZSTR_DUPLICATE);
ll = ll + n + 1;
- tp[ll] = '\0';
- add_next_index_rt_stringl(txtarray, txt, n, ZSTR_DUPLICATE);
}
+ tp[dlen] = '\0';
cp += dlen;
-
- add_rt_assoc_zval(*subarray, "txt", txtarray);
- efree(tp);
+
+ add_ascii_assoc_rt_stringl(*subarray, "txt", tp, dlen - 1, ZSTR_AUTOFREE);
+ add_ascii_assoc_zval(*subarray, "entries", entries);
}
break;
case DNS_T_SOA:
diff --git a/ext/standard/dns_win32.c b/ext/standard/dns_win32.c
index f9c4e98878..13ac4a684b 100644
--- a/ext/standard/dns_win32.c
+++ b/ext/standard/dns_win32.c
@@ -153,38 +153,38 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
ALLOC_INIT_ZVAL(*subarray);
array_init(*subarray);
- add_assoc_rt_string(*subarray, "host", pRec->pName, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "host", pRec->pName, ZSTR_DUPLICATE);
switch (type) {
case DNS_TYPE_A: {
IN_ADDR ipaddr;
ipaddr.S_un.S_addr = (pRec->Data.A.IpAddress);
- add_assoc_rt_string(*subarray, "type", "A", ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "ip", inet_ntoa(ipaddr), ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "A", ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "ip", inet_ntoa(ipaddr), ZSTR_DUPLICATE);
break;
}
case DNS_TYPE_MX:
- add_assoc_rt_string(*subarray, "type", "MX", ZSTR_DUPLICATE);
- add_assoc_long(*subarray, "pri", pRec->Data.Srv.wPriority);
+ add_ascii_assoc_rt_string(*subarray, "type", "MX", ZSTR_DUPLICATE);
+ add_ascii_assoc_long(*subarray, "pri", pRec->Data.Srv.wPriority);
/* no break; */
case DNS_TYPE_CNAME:
if (type == DNS_TYPE_CNAME) {
- add_assoc_rt_string(*subarray, "type", "CNAME", ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "CNAME", ZSTR_DUPLICATE);
}
/* no break; */
case DNS_TYPE_NS:
if (type == DNS_TYPE_NS) {
- add_assoc_rt_string(*subarray, "type", "NS", ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "NS", ZSTR_DUPLICATE);
}
/* no break; */
case DNS_TYPE_PTR:
if (type == DNS_TYPE_PTR) {
- add_assoc_rt_string(*subarray, "type", "PTR", ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "PTR", ZSTR_DUPLICATE);
}
- add_assoc_rt_string(*subarray, "target", pRec->Data.MX.pNameExchange, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "target", pRec->Data.MX.pNameExchange, ZSTR_DUPLICATE);
break;
/* Not available on windows, the query is possible but there is no DNS_HINFO_DATA structure */
@@ -194,24 +194,30 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
int i = 0;
DNS_TXT_DATA *data_txt = &pRec->Data.TXT;
DWORD count = data_txt->dwStringCount;
- char *txt;
- long txt_len;
- zval *txtarray;
-
- MAKE_STD_ZVAL(txtarray);
- array_init(txtarray);
+ char *txt, *txt_dst;
+ long txt_len = 0;
+ zval *entries;
add_ascii_assoc_rt_string(*subarray, "type", "TXT", ZSTR_DUPLICATE);
+
+ ALLOC_INIT_ZVAL(entries);
+ array_init(entries);
+
+ for (i = 0; i < count; i++) {
+ txt_len += strlen(data_txt->pStringArray[i]) + 1;
+ }
+ txt = ecalloc(txt_len * 2, 1);
+ txt_dst = txt;
for (i = 0; i < count; i++) {
- 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_rt_stringl(txtarray, txt, txt_len, ZSTR_AUTOFREE);
+ int len = strlen(data_txt->pStringArray[i]);
+ memcpy(txt_dst, data_txt->pStringArray[i], len);
+ add_next_index_rt_stringl(entries, data_txt->pStringArray[i], len, ZSTR_DUPLICATE);
+ txt_dst += len;
}
- add_assoc_zval(*subarray, "txt", txtarray);
+ add_ascii_assoc_rt_string(*subarray, "txt", txt, ZSTR_AUTOFREE);
+ add_ascii_assoc_zval(*subarray, "entries", entries);
}
break;
@@ -219,15 +225,15 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
{
DNS_SOA_DATA *data_soa = &pRec->Data.Soa;
- add_assoc_rt_string(*subarray, "type", "SOA", ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "SOA", ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "mname", data_soa->pNamePrimaryServer, ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "rname", data_soa->pNameAdministrator, ZSTR_DUPLICATE);
- add_assoc_long(*subarray, "serial", data_soa->dwSerialNo);
- add_assoc_long(*subarray, "refresh", data_soa->dwRefresh);
- add_assoc_long(*subarray, "retry", data_soa->dwRetry);
- add_assoc_long(*subarray, "expire", data_soa->dwExpire);
- add_assoc_long(*subarray, "minimum-ttl", data_soa->dwDefaultTtl);
+ add_ascii_assoc_rt_string(*subarray, "mname", data_soa->pNamePrimaryServer, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "rname", data_soa->pNameAdministrator, ZSTR_DUPLICATE);
+ add_ascii_assoc_long(*subarray, "serial", data_soa->dwSerialNo);
+ add_ascii_assoc_long(*subarray, "refresh", data_soa->dwRefresh);
+ add_ascii_assoc_long(*subarray, "retry", data_soa->dwRetry);
+ add_ascii_assoc_long(*subarray, "expire", data_soa->dwExpire);
+ add_ascii_assoc_long(*subarray, "minimum-ttl", data_soa->dwDefaultTtl);
}
break;
@@ -237,8 +243,8 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
{
LPSTR str[MAXHOSTNAMELEN];
DNS_AAAA_DATA *data_aaaa = &pRec->Data.AAAA;
- add_assoc_rt_string(*subarray, "type", "AAAA", ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "ipv6", RtlIpv6AddressToString(data_aaaa->Ip6Address, str), ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "AAAA", ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "ipv6", RtlIpv6AddressToString(data_aaaa->Ip6Address, str), ZSTR_DUPLICATE);
}
#endif
break;
@@ -253,11 +259,11 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
{
DNS_SRV_DATA *data_srv = &pRec->Data.Srv;
- add_assoc_rt_string(*subarray, "type", "SRV", ZSTR_DUPLICATE);
- add_assoc_long(*subarray, "pri", data_srv->wPriority);
- add_assoc_long(*subarray, "weight", data_srv->wWeight);
- add_assoc_long(*subarray, "port", data_srv->wPort);
- add_assoc_rt_string(*subarray, "target", data_srv->pNameTarget, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "SRV", ZSTR_DUPLICATE);
+ add_ascii_assoc_long(*subarray, "pri", data_srv->wPriority);
+ add_ascii_assoc_long(*subarray, "weight", data_srv->wWeight);
+ add_ascii_assoc_long(*subarray, "port", data_srv->wPort);
+ add_ascii_assoc_rt_string(*subarray, "target", data_srv->pNameTarget, ZSTR_DUPLICATE);
}
break;
@@ -265,13 +271,13 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
{
#ifdef DNS_NAPTR_DATA
DNS_NAPTR_DATA * data_naptr = &pRec->Data.Naptr;
- add_assoc_rt_string(*subarray, "type", "NAPTR", ZSTR_DUPLICATE);
- add_assoc_long(*subarray, "order", data_naptr->wOrder);
- add_assoc_long(*subarray, "pref", data_naptr->wPreference);
- add_assoc_rt_string(*subarray, "flags", data_naptr->pFlags, ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "services", data_naptr->pService, ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "regex", data_naptr->pRegularExpression, ZSTR_DUPLICATE);
- add_assoc_rt_string(*subarray, "replacement", data_naptr->pReplacement, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "type", "NAPTR", ZSTR_DUPLICATE);
+ add_ascii_assoc_long(*subarray, "order", data_naptr->wOrder);
+ add_ascii_assoc_long(*subarray, "pref", data_naptr->wPreference);
+ add_ascii_assoc_rt_string(*subarray, "flags", data_naptr->pFlags, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "services", data_naptr->pService, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "regex", data_naptr->pRegularExpression, ZSTR_DUPLICATE);
+ add_ascii_assoc_rt_string(*subarray, "replacement", data_naptr->pReplacement, ZSTR_DUPLICATE);
#endif
}
break;
@@ -280,8 +286,8 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
break;
}
- add_assoc_rt_string(*subarray, "class", "IN", ZSTR_DUPLICATE);
- add_assoc_long(*subarray, "ttl", ttl);
+ add_ascii_assoc_rt_string(*subarray, "class", "IN", ZSTR_DUPLICATE);
+ add_ascii_assoc_long(*subarray, "ttl", ttl);
}
/* }}} */
#endif