Skip to content

Commit c180b32

Browse files
committed
Resolve Win32 DNS-SD build issues (Issue #29)
1 parent d910e49 commit c180b32

2 files changed

Lines changed: 33 additions & 29 deletions

File tree

cups/dnssd.c

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
# endif // _WIN32
2626
#elif _WIN32
2727
# include <windns.h>
28+
# pragma comment(lib, "dnsapi.lib") // Link in dnsapi library...
2829
#else // HAVE_AVAHI
2930
# include <avahi-client/client.h>
3031
# include <avahi-client/lookup.h>
@@ -96,7 +97,7 @@ struct _cups_dnssd_browse_s // DNS-SD browse request
9697
size_t num_browsers; // Number of browsers
9798
struct
9899
{ // Browsers
99-
CWSTR name[256]; // Browse name as a UTF-16 string
100+
WCHAR name[256]; // Browse name as a UTF-16 string
100101
DNS_SERVICE_BROWSE_REQUEST req; // Browse request
101102
DNS_SERVICE_CANCEL cancel; // Cancellation structure
102103
} browsers[_CUPS_DNSSD_MAX];
@@ -118,7 +119,7 @@ struct _cups_dnssd_query_s // DNS-SD query request
118119
DNSServiceRef ref; // Query reference
119120

120121
#elif _WIN32
121-
CWSTR fullname[256]; // Query full name as a UTF-16 string
122+
WCHAR fullname[256]; // Query full name as a UTF-16 string
122123
DNS_QUERY_REQUEST req; // Query request
123124
DNS_QUERY_RESULT res; // Query result
124125
DNS_QUERY_CANCEL cancel; // Cancellation structure
@@ -138,7 +139,7 @@ struct _cups_dnssd_resolve_s // DNS-SD resolve request
138139
DNSServiceRef ref; // Resolve reference
139140

140141
#elif _WIN32
141-
CWSTR fullname[256]; // Full name as a UTF-16 string
142+
WCHAR fullname[256]; // Full name as a UTF-16 string
142143
DNS_SERVICE_RESOLVE_REQUEST req; // Resolve request
143144
DNS_SERVICE_CANCEL cancel; // Cancellation structure
144145

@@ -152,9 +153,9 @@ struct _win32_srv_s // Service
152153
{
153154
DNS_SERVICE_REGISTER_REQUEST req; // Registration request
154155
DNS_SERVICE_CANCEL cancel; // Cancellation structure
155-
CWSTR fullname[256]; // Full service name
156-
CWSTR hostname[256]; // Hostname
157-
CWSTR *txt; // TXT key/value string buffer
156+
WCHAR fullname[256]; // Full service name
157+
WCHAR hostname[256]; // Hostname
158+
WCHAR *txt; // TXT key/value string buffer
158159
};
159160
#endif // _WIN32
160161

@@ -211,7 +212,7 @@ static void win32_browse_cb(DWORD status, PVOID context, PDNS_RECORD record);
211212
static void win32_query_cb(PVOID context, PDNS_QUERY_RESULT result);
212213
static void win32_resolve_cb(DWORD status, PVOID context, PDNS_SERVICE_INSTANCE instance);
213214
static void win32_service_cb(DWORD status, PVOID context, PDNS_SERVICE_INSTANCE instance);
214-
static void win32_wstrcpy(CWSTR *dst, const char *src, size_t dstsize);
215+
static void win32_wstrcpy(WCHAR *dst, const char *src, size_t dstsize);
215216

216217
#else // HAVE_AVAHI
217218
static void avahi_browse_cb(AvahiServiceBrowser *browser, AvahiIfIndex if_index, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags flags, cups_dnssd_browse_t *browse);
@@ -409,20 +410,21 @@ cupsDNSSDBrowseNew(
409410
else
410411
snprintf(typename, sizeof(typename), "%s.local", base);
411412

412-
browser->browsers[i].req.Version = DNS_QUERY_REQUEST_VERSION1;
413-
browser->browsers[i].req.InterfaceIndex = if_index;
414-
browser->browsers[i].req.pBrowseCallback = win32_browse_cb;
415-
browser->browsers[i].req.pQueryContext = browse;
413+
browse->browsers[i].req.Version = DNS_QUERY_REQUEST_VERSION1;
414+
browse->browsers[i].req.InterfaceIndex = if_index;
415+
browse->browsers[i].req.pBrowseCallback = win32_browse_cb;
416+
browse->browsers[i].req.pQueryContext = browse;
417+
browse->browsers[i].req.QueryName = browse->browsers[i].name;
416418

417-
win32_wstrcpy(browser->browsers[i].req.QueryName, typename, sizeof(browser->browsers[i].req.QueryName));
419+
win32_wstrcpy(browse->browsers[i].name, typename, sizeof(browse->browsers[i].name));
418420

419-
if ((status = DNSServiceBrowse(&browser->browsers[i].req, &browser->browser[i].cancel)) != DNS_REQUEST_PENDING)
421+
if ((status = DnsServiceBrowse(&browse->browsers[i].req, &browse->browsers[i].cancel)) != DNS_REQUEST_PENDING)
420422
{
421423
report_error(dnssd, "Unable to create browser: %u", status);
422424
while (i > 0)
423425
{
424426
i --;
425-
DnsServiceBrowseCancel(browse->browsers[i].cancel);
427+
DnsServiceBrowseCancel(&browse->browsers[i].cancel);
426428
}
427429
free(browse);
428430
browse = NULL;
@@ -1028,7 +1030,7 @@ cupsDNSSDQueryNew(
10281030

10291031
query->req.Version = DNS_QUERY_REQUEST_VERSION1;
10301032
query->req.InterfaceIndex = if_index;
1031-
query->res.QueryName = query->fullname;
1033+
query->req.QueryName = query->fullname;
10321034
query->req.QueryType = rrtype;
10331035
query->req.pDnsServerList = NULL;
10341036
query->req.pQueryCompletionCallback = win32_query_cb;
@@ -1466,11 +1468,12 @@ cupsDNSSDServiceAdd(
14661468
service->num_refs ++;
14671469

14681470
#elif _WIN32
1471+
DWORD status; // Status of call
14691472
struct _win32_srv_s *srv; // Service
1470-
size_t i, j, // Looping vars
1473+
size_t j, // Looping var
14711474
count, // Number of types
14721475
length; // Length of TXT key/value pairs
1473-
CWSTR *ptr, // Pointer into TXT buffer
1476+
WCHAR *ptr, // Pointer into TXT buffer
14741477
*end, // End of TXT buffer
14751478
*keys[256], // TXT key strings
14761479
*values[256]; // TXT value strings
@@ -1481,7 +1484,7 @@ cupsDNSSDServiceAdd(
14811484

14821485
if ((tarray = cupsArrayNewStrings(types, ',')) == NULL)
14831486
{
1484-
report_error(dnssd, "Unable to create types array: %s", strerror(errno));
1487+
report_error(service->dnssd, "Unable to create types array: %s", strerror(errno));
14851488
ret = false;
14861489
goto done;
14871490
}
@@ -1511,7 +1514,7 @@ cupsDNSSDServiceAdd(
15111514
goto done;
15121515
}
15131516

1514-
src = service->srvs + service->num_srvs;
1517+
srv = service->srvs + service->num_srvs;
15151518

15161519
// Initialize values...
15171520
srv->req.Version = DNS_QUERY_REQUEST_VERSION1;
@@ -1528,15 +1531,15 @@ cupsDNSSDServiceAdd(
15281531

15291532
if (length > 0)
15301533
{
1531-
src->txt = calloc(length, sizeof(CWSTR));
1534+
srv->txt = calloc(length, sizeof(WCHAR));
15321535

1533-
for (j = 0, ptr = src->txt, end = src->txt + length; j < num_txt; j ++)
1536+
for (j = 0, ptr = srv->txt, end = srv->txt + length; j < num_txt; j ++)
15341537
{
1535-
win32_wstrcpy(ptr, txt[j].name, (size_t)(end - ptr) * sizeof(CWSTR));
1538+
win32_wstrcpy(ptr, txt[j].name, (size_t)(end - ptr) * sizeof(WCHAR));
15361539
keys[j] = ptr;
15371540
ptr += strlen(txt[j].name) + 1;
15381541

1539-
win32_wstrcpy(ptr, txt[j].value, (size_t)(end - ptr) * sizeof(CWSTR));
1542+
win32_wstrcpy(ptr, txt[j].value, (size_t)(end - ptr) * sizeof(WCHAR));
15401543
values[j] = ptr;
15411544
ptr += strlen(txt[j].value) + 1;
15421545
}
@@ -1929,7 +1932,7 @@ delete_browse(
19291932
size_t i; // Looping var
19301933

19311934
for (i = 0; i < browse->num_browsers; i ++)
1932-
DnsServiceBrowseCancel(browse->browsers[i].cancel);
1935+
DnsServiceBrowseCancel(&browse->browsers[i].cancel);
19331936

19341937
#else // HAVE_AVAHI
19351938
size_t i; // Looping var
@@ -1954,7 +1957,7 @@ delete_query(
19541957
DNSServiceRefDeallocate(query->ref);
19551958

19561959
#elif _WIN32
1957-
DnsServiceQueryCancel(query->cancel);
1960+
DnsCancelQuery(&query->cancel);
19581961

19591962
#else // HAVE_AVAHI
19601963
avahi_record_browser_free(query->browser);
@@ -1974,7 +1977,7 @@ delete_resolve(
19741977
DNSServiceRefDeallocate(resolve->ref);
19751978

19761979
#elif _WIN32
1977-
DnsServiceResolveCancel(resolve->cancel);
1980+
DnsServiceResolveCancel(&resolve->cancel);
19781981

19791982
#else // HAVE_AVAHI
19801983
avahi_service_resolver_free(resolve->resolver);
@@ -2004,7 +2007,7 @@ delete_service(
20042007

20052008
for (i = 0; i < service->num_srvs; i ++)
20062009
{
2007-
DnsServiceRegisterCancel(service->srvs[i].cancel);
2010+
DnsServiceRegisterCancel(&service->srvs[i].cancel);
20082011
DnsServiceFreeInstance(service->srvs[i].req.pServiceInstance);
20092012
free(service->srvs[i].txt);
20102013
}
@@ -2485,15 +2488,15 @@ win32_service_cb(
24852488
//
24862489

24872490
static void
2488-
win32_wstrcpy(CWSTR *dst, // I - Destination string
2491+
win32_wstrcpy(WCHAR *dst, // I - Destination string
24892492
const char *src, // I - Source string
24902493
size_t dstsize) // I - Size of destination
24912494
{
24922495
int ch; // Current character
24932496

24942497

24952498
// Adjust size from bytes to words...
2496-
dstsize /= sizeof(CWSTR);
2499+
dstsize /= sizeof(WCHAR);
24972500

24982501
// Loop until we run out of characters or buffer space...
24992502
while (*src && dstsize > 1)

cups/testdnssd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// information.
88
//
99

10+
#include <config.h>
1011
#include "test-internal.h"
1112
#include "dnssd.h"
1213
#include "thread.h"

0 commit comments

Comments
 (0)