Module: wine Branch: master Commit: 0c0d1903761c37b9da0bebf5b8712a08e86fa9cd URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=0c0d1903761c37b9da0bebf5...
Author: Hans Leidekker hans@it.vu.nl Date: Wed Sep 13 14:36:33 2006 +0200
dnsapi: Implement and test DnsRecordSetDetach.
---
dlls/dnsapi/dnsapi.spec | 2 +- dlls/dnsapi/record.c | 22 ++++++++++++++++++++++ dlls/dnsapi/tests/record.c | 25 +++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletions(-)
diff --git a/dlls/dnsapi/dnsapi.spec b/dlls/dnsapi/dnsapi.spec index 2d00d38..977bde4 100644 --- a/dlls/dnsapi/dnsapi.spec +++ b/dlls/dnsapi/dnsapi.spec @@ -88,7 +88,7 @@ @ stdcall DnsRecordListFree(ptr long) @ stdcall DnsRecordSetCompare(ptr ptr ptr ptr) @ stdcall DnsRecordSetCopyEx(ptr long long) -@ stub DnsRecordSetDetach +@ stdcall DnsRecordSetDetach(ptr) @ stub DnsRecordStringForType @ stub DnsRecordStringForWritableType @ stub DnsRecordTypeForName diff --git a/dlls/dnsapi/record.c b/dlls/dnsapi/record.c index ee8062b..0c34697 100644 --- a/dlls/dnsapi/record.c +++ b/dlls/dnsapi/record.c @@ -748,3 +748,25 @@ PDNS_RECORD WINAPI DnsRecordSetCopyEx( P DNS_RRSET_TERMINATE( dst_set ); return dst_set.pFirstRR; } + +/****************************************************************************** + * DnsRecordSetDetach [DNSAPI.@] + * + */ +PDNS_RECORD WINAPI DnsRecordSetDetach( PDNS_RECORD set ) +{ + DNS_RECORD *r, *s; + + TRACE( "(%p)\n", set ); + + for (r = set; (set = r); r = set->pNext) + { + if (r->pNext && !r->pNext->pNext) + { + s = r->pNext; + r->pNext = NULL; + return s; + } + } + return NULL; +} diff --git a/dlls/dnsapi/tests/record.c b/dlls/dnsapi/tests/record.c index b0e34c7..7da1c29 100644 --- a/dlls/dnsapi/tests/record.c +++ b/dlls/dnsapi/tests/record.c @@ -32,6 +32,7 @@ static HMODULE dnsapi;
static BOOL (WINAPI *pDnsRecordCompare)(PDNS_RECORD,PDNS_RECORD); static BOOL (WINAPI *pDnsRecordSetCompare)(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*); +static DNS_RECORD* (WINAPI *pDnsRecordSetDetach)(PDNS_RECORD);
#define GETFUNCPTR(func) p##func = (void *)GetProcAddress( dnsapi, #func ); \ if (!p##func) return FALSE; @@ -40,6 +41,7 @@ static BOOL init_function_ptrs( void ) { GETFUNCPTR( DnsRecordCompare ) GETFUNCPTR( DnsRecordSetCompare ) + GETFUNCPTR( DnsRecordSetDetach ) return TRUE; }
@@ -48,6 +50,7 @@ static char name2[] = "LOCALHOST";
static DNS_RECORDA r1 = { NULL, name1, DNS_TYPE_A, sizeof(DNS_A_DATA), { 0 }, 1200, 0, { { 0xffffffff } } }; static DNS_RECORDA r2 = { NULL, name1, DNS_TYPE_A, sizeof(DNS_A_DATA), { 0 }, 1200, 0, { { 0xffffffff } } }; +static DNS_RECORDA r3 = { NULL, name1, DNS_TYPE_A, sizeof(DNS_A_DATA), { 0 }, 1200, 0, { { 0xffffffff } } };
static void test_DnsRecordCompare( void ) { @@ -123,6 +126,27 @@ static void test_DnsRecordSetCompare( vo ok( pDnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); }
+static void test_DnsRecordSetDetach( void ) +{ + DNS_RRSET rr; + DNS_RECORDA *r, *s; + + DNS_RRSET_INIT( rr ); + DNS_RRSET_ADD( rr, &r1 ); + DNS_RRSET_ADD( rr, &r2 ); + DNS_RRSET_ADD( rr, &r3 ); + DNS_RRSET_TERMINATE( rr ); + + ok( !pDnsRecordSetDetach( NULL ), "succeeded unexpectedly\n" ); + + r = rr.pFirstRR; + s = pDnsRecordSetDetach( r ); + + ok( s == &r3, "failed unexpectedly: got %p, expected %p\n", s, &r3 ); + ok( r == &r1, "failed unexpectedly: got %p, expected %p\n", r, &r1 ); + ok( !r2.pNext, "failed unexpectedly\n" ); +} + START_TEST(record) { dnsapi = LoadLibraryA( "dnsapi.dll" ); @@ -136,6 +160,7 @@ START_TEST(record)
test_DnsRecordCompare(); test_DnsRecordSetCompare(); + test_DnsRecordSetDetach();
FreeLibrary( dnsapi ); }