dnsapi: Implement and test DnsRecordSetDetach.

This commit is contained in:
Hans Leidekker 2006-09-13 14:36:33 +02:00 committed by Alexandre Julliard
parent 9de2c506dd
commit 0c0d190376
3 changed files with 48 additions and 1 deletions

View File

@ -88,7 +88,7 @@
@ stdcall DnsRecordListFree(ptr long) @ stdcall DnsRecordListFree(ptr long)
@ stdcall DnsRecordSetCompare(ptr ptr ptr ptr) @ stdcall DnsRecordSetCompare(ptr ptr ptr ptr)
@ stdcall DnsRecordSetCopyEx(ptr long long) @ stdcall DnsRecordSetCopyEx(ptr long long)
@ stub DnsRecordSetDetach @ stdcall DnsRecordSetDetach(ptr)
@ stub DnsRecordStringForType @ stub DnsRecordStringForType
@ stub DnsRecordStringForWritableType @ stub DnsRecordStringForWritableType
@ stub DnsRecordTypeForName @ stub DnsRecordTypeForName

View File

@ -748,3 +748,25 @@ PDNS_RECORD WINAPI DnsRecordSetCopyEx( PDNS_RECORD src_set, DNS_CHARSET in, DNS_
DNS_RRSET_TERMINATE( dst_set ); DNS_RRSET_TERMINATE( dst_set );
return dst_set.pFirstRR; 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;
}

View File

@ -32,6 +32,7 @@ static HMODULE dnsapi;
static BOOL (WINAPI *pDnsRecordCompare)(PDNS_RECORD,PDNS_RECORD); static BOOL (WINAPI *pDnsRecordCompare)(PDNS_RECORD,PDNS_RECORD);
static BOOL (WINAPI *pDnsRecordSetCompare)(PDNS_RECORD,PDNS_RECORD,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 ); \ #define GETFUNCPTR(func) p##func = (void *)GetProcAddress( dnsapi, #func ); \
if (!p##func) return FALSE; if (!p##func) return FALSE;
@ -40,6 +41,7 @@ static BOOL init_function_ptrs( void )
{ {
GETFUNCPTR( DnsRecordCompare ) GETFUNCPTR( DnsRecordCompare )
GETFUNCPTR( DnsRecordSetCompare ) GETFUNCPTR( DnsRecordSetCompare )
GETFUNCPTR( DnsRecordSetDetach )
return TRUE; 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 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 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 ) static void test_DnsRecordCompare( void )
{ {
@ -123,6 +126,27 @@ static void test_DnsRecordSetCompare( void )
ok( pDnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); 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) START_TEST(record)
{ {
dnsapi = LoadLibraryA( "dnsapi.dll" ); dnsapi = LoadLibraryA( "dnsapi.dll" );
@ -136,6 +160,7 @@ START_TEST(record)
test_DnsRecordCompare(); test_DnsRecordCompare();
test_DnsRecordSetCompare(); test_DnsRecordSetCompare();
test_DnsRecordSetDetach();
FreeLibrary( dnsapi ); FreeLibrary( dnsapi );
} }