Hans Leidekker : dnsapi: Implement and test DnsRecordSetDetach.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Sep 14 10:10:01 CDT 2006
Module: wine
Branch: master
Commit: 0c0d1903761c37b9da0bebf5b8712a08e86fa9cd
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=0c0d1903761c37b9da0bebf5b8712a08e86fa9cd
Author: Hans Leidekker <hans at 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 );
}
More information about the wine-cvs
mailing list