Things that came out of compiling on Windows

This commit is contained in:
Willem Toorop 2017-09-21 11:03:38 +02:00
parent 8897bdf18f
commit 712f62a4c1
12 changed files with 69 additions and 37 deletions

View File

@ -1149,10 +1149,20 @@ fi
#---- check for pthreads library
AC_SEARCH_LIBS([pthread_mutex_init],[pthread], [
AC_DEFINE([HAVE_PTHREAD], [1], [Have pthreads library])
LIBS="-lpthread $LIBS"
], [AC_MSG_WARN([pthreads not available])])
AC_ARG_WITH(libpthread, AS_HELP_STRING([--without-libpthread],
[Disable libpthread (default is autodetect)]),
[], [withval="yes"])
case "$withval" in
yes)
AC_SEARCH_LIBS([pthread_mutex_init],[pthread], [
AC_DEFINE([HAVE_PTHREAD], [1], [Have pthreads library])
LIBS="-lpthread $LIBS"
], [AC_MSG_WARN([pthreads not available])])
;;
*)
;;
esac
AC_MSG_CHECKING([whether the C compiler (${CC-cc}) supports the __func__ variable])
AC_LANG_PUSH(C)

View File

@ -988,9 +988,7 @@ static void tas_read_cb(void *userarg);
static void tas_write_cb(void *userarg);
static void tas_doc_read(getdns_context *context, tas_connection *a)
{
DEBUG_ANCHOR("doc (size: %d): \"%.*s\"\n",
(int)a->tcp.read_buf_len,
(int)a->tcp.read_buf_len, (char *)a->tcp.read_buf);
DEBUG_ANCHOR("doc (size: %d)\n", (int)a->tcp.read_buf_len);
assert(a->tcp.read_pos == a->tcp.read_buf + a->tcp.read_buf_len);
assert(context);
@ -1085,7 +1083,11 @@ static void tas_read_cb(void *userarg)
DEBUG_ANCHOR( "state: %d, to_read: %d\n"
, (int)a->state, (int)a->tcp.to_read);
#ifdef USE_WINSOCK
n = recv(a->fd, (char *)a->tcp.read_pos, a->tcp.to_read, 0);
#else
n = read(a->fd, a->tcp.read_pos, a->tcp.to_read);
#endif
if (n == 0) {
DEBUG_ANCHOR("Connection closed\n");
GETDNS_CLEAR_EVENT(a->loop, &a->event);
@ -1218,7 +1220,13 @@ static void tas_write_cb(void *userarg)
DEBUG_ANCHOR( "state: %d, to_write: %d\n"
, (int)a->state, (int)a->tcp.write_buf_len);
#ifdef USE_WINSOCK
DEBUG_ANCHOR("sending to: %d\n", a->fd);
written = send(a->fd, (const char *)a->tcp.write_buf, a->tcp.write_buf_len, 0);
#else
written = write(a->fd, a->tcp.write_buf, a->tcp.write_buf_len);
#endif
if (written >= 0) {
assert(written <= (ssize_t)a->tcp.write_buf_len);
@ -1240,7 +1248,7 @@ static void tas_write_cb(void *userarg)
tas_read_cb, NULL, tas_timeout_cb));
return;
} else if (_getdns_EWOULDBLOCK)
} else if (_getdns_EWOULDBLOCK || _getdns_EINPROGRESS)
return;
DEBUG_ANCHOR("Write error: %s\n", strerror(errno));

View File

@ -54,6 +54,7 @@ typedef unsigned short in_port_t;
#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
#include <shlobj.h>
#endif
#include <sys/stat.h>
@ -4613,17 +4614,19 @@ static size_t _getdns_get_appdata(char *path)
size_t len;
#ifdef USE_WINSOCK
# define SLASHTOK '\\'
# define APPDATA_SUBDIR "getdns"
if (! SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, path)))
DEBUG_ANCHOR("ERROR %s(): Could not get \%AppData\% directory\n"
DEBUG_ANCHOR("ERROR %s(): Could not get %%AppData%% directory\n"
, __FUNC__);
else if ((len = strlen(path)) + sizeof(APPDATA_SUBDIR) + 2 >= PATH_MAX)
DEBUG_ANCHOR("ERROR %s(): Home path too long for appdata\n"
, __FUNC__);
#else
# define SLASHTOK '/'
# define APPDATA_SUBDIR ".getdns"
struct passwd *p = getpwuid(getuid());
char *home = NULL;
@ -4642,17 +4645,23 @@ static size_t _getdns_get_appdata(char *path)
else {
if (len == 0 || ( path[len - 1] != '/'
&& path[len - 1] != '\\')) {
path[len++] = '/';
path[len++] = SLASHTOK;
path[len ] = '\0';
}
(void) strcpy(path + len, APPDATA_SUBDIR);
len += sizeof(APPDATA_SUBDIR) - 1;
if (mkdir(path, 0755) < 0 && errno != EEXIST)
if (0 >
#ifdef USE_WINSOCK
mkdir(path)
#else
mkdir(path, 0755)
#endif
&& errno != EEXIST)
DEBUG_ANCHOR("ERROR %s(): Could not mkdir %s: %s\n"
, __FUNC__, path, strerror(errno));
else {
path[len++] = '/';
path[len++] = SLASHTOK;
path[len ] = '\0';
return len;
}

View File

@ -53,7 +53,7 @@
time_t tsec_dEbUgSyM; \
\
gettimeofday(&tv_dEbUgSyM, NULL); \
tsec = (time_t) tv_dEbUgSyM.tv_sec; \
tsec_dEbUgSyM = (time_t) tv_dEbUgSyM.tv_sec; \
gmtime_s(&tm_dEbUgSyM, (const time_t *) &tsec_dEbUgSyM); \
strftime(buf_dEbUgSyM, 10, "%H:%M:%S", &tm_dEbUgSyM); \
fprintf(stderr, "[%s.%.6d] ", buf_dEbUgSyM, (int)tv_dEbUgSyM.tv_usec); \

View File

@ -235,20 +235,21 @@ select_eventloop_run_once(getdns_eventloop *loop, int blocking)
tv.tv_usec = (long)((timeout - now) % 1000000);
}
#ifdef USE_WINSOCK
if (max_fd == -1)
{
if (timeout != TIMEOUT_FOREVER)
{
uint32_t timeout_ms = (tv.tv_usec / 1000) + (tv.tv_sec * 1000);
Sleep(timeout_ms);
}
} else
if (max_fd == -1) {
if (timeout != TIMEOUT_FOREVER) {
uint32_t timeout_ms = (tv.tv_usec / 1000) + (tv.tv_sec * 1000);
Sleep(timeout_ms);
}
} else {
#endif
if (select(max_fd + 1, &readfds, &writefds, NULL,
(timeout == TIMEOUT_FOREVER ? NULL : &tv)) < 0) {
perror("select() failed");
exit(EXIT_FAILURE);
}
#ifdef USE_WINSOCK
}
#endif
now = get_now_plus(0);
for (fd = 0; fd < (int)FD_SETSIZE; fd++) {
if (select_loop->fd_events[fd] &&

View File

@ -189,7 +189,8 @@ static void tcp_write_cb(void *userarg)
}
to_write = conn->to_write;
if (conn->fd == -1 ||
(written = send(conn->fd, &to_write->write_buf[to_write->written],
(written = send(conn->fd,
(const void *)&to_write->write_buf[to_write->written],
to_write->write_buf_len - to_write->written, 0)) == -1) {
/* IO error, close connection */
@ -367,7 +368,8 @@ static void tcp_read_cb(void *userarg)
(void) loop->vmt->schedule(loop, conn->fd,
DOWNSTREAM_IDLE_TIMEOUT, &conn->event);
if ((bytes_read = recv(conn->fd, conn->read_pos, conn->to_read, 0)) < 0) {
if ((bytes_read = recv(conn->fd,
(void *)conn->read_pos, conn->to_read, 0)) < 0) {
if (errno == EAGAIN || errno == EWOULDBLOCK)
return; /* Come back to do the read later */

View File

@ -840,7 +840,7 @@ stub_tcp_write(int fd, getdns_tcp_state *tcp, getdns_network_req *netreq)
/* Coming back from an earlier unfinished write or handshake.
* Try to send remaining data */
#ifdef USE_WINSOCK
written = send(fd, tcp->write_buf + tcp->written,
written = send(fd, (void *)(tcp->write_buf + tcp->written),
tcp->write_buf_len - tcp->written, 0);
#else
written = write(fd, tcp->write_buf + tcp->written,

View File

@ -76,7 +76,7 @@ getdns_sync_data_init(getdns_context *context, getdns_sync_data *data)
# ifdef HAVE_UNBOUND_EVENT_API
if (_getdns_ub_loop_enabled(&context->ub_loop)) {
context->ub_loop.extension = ext;
} else
} else
# endif
# ifndef USE_WINSOCK
return ext->vmt->schedule(ext, ub_fd(context->unbound_ctx),
@ -85,7 +85,9 @@ getdns_sync_data_init(getdns_context *context, getdns_sync_data *data)
/* No sync full recursion requests on windows without
* UNBOUND_EVENT_API because ub_fd() doesn't work on windows.
*/
; /* pass */
# ifdef HAVE_UNBOUND_EVENT_API
{ ; } /* pass */
# endif
# endif
#endif
return GETDNS_RETURN_GOOD;

View File

@ -341,7 +341,7 @@ static getdns_return_t validate_chain(getdns_dict *response)
if ((r = getdns_list_set_dict(to_validate, 0, reply)))
goto error;
if (verbosity) printf("reply "PRIsz", dnssec_status: ", i);
if (verbosity) printf("reply %d, dnssec_status: ", (int)i);
switch ((s = getdns_validate_dnssec(
to_validate, validation_chain, trust_anchor))) {
@ -1075,11 +1075,11 @@ next: ;
/* apply the accumulated pubkey pinset to all upstreams: */
for (j = 0; j < upstream_count; j++) {
if (r = getdns_list_get_dict(upstream_list, j, &upstream), r) {
fprintf(stderr, "Failed to get upstream "PRIsz" when adding pinset\n", j);
fprintf(stderr, "Failed to get upstream %d when adding pinset\n", (int)j);
return r;
}
if (r = getdns_dict_set_list(upstream, "tls_pubkey_pinset", pubkey_pinset), r) {
fprintf(stderr, "Failed to set pubkey pinset on upstream "PRIsz"\n", j);
fprintf(stderr, "Failed to set pubkey pinset on upstream %d\n", (int)j);
return r;
}
}

View File

@ -203,7 +203,7 @@ INLINE uint64_t _getdns_get_now_ms()
struct timeval tv;
(void) gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
return (uint64_t)tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
INLINE uint64_t _getdns_ms_until_expiry(uint64_t expires)

View File

@ -471,13 +471,13 @@ void report_parser_error(yaml_parser_t *parser)
case YAML_SCANNER_ERROR:
if (parser->context) {
fprintf(stderr, "Scanner error: %s at line %lu, column %lu\n"
"%s at line %lu, column %lu\n", parser->context,
fprintf(stderr, "Scanner error: %s at line "PRIsz", column "PRIsz"\n"
"%s at line "PRIsz", column "PRIsz"\n", parser->context,
parser->context_mark.line+1, parser->context_mark.column+1,
parser->problem, parser->problem_mark.line+1,
parser->problem_mark.column+1);
} else {
fprintf(stderr, "Scanner error: %s at line %lu, column %lu\n",
fprintf(stderr, "Scanner error: %s at line "PRIsz", column "PRIsz"\n",
parser->problem, parser->problem_mark.line+1,
parser->problem_mark.column+1);
}
@ -485,13 +485,13 @@ void report_parser_error(yaml_parser_t *parser)
case YAML_PARSER_ERROR:
if (parser->context) {
fprintf(stderr, "Parser error: %s at line %lu, column %lu\n"
"%s at line %lu, column %lu\n", parser->context,
fprintf(stderr, "Parser error: %s at line "PRIsz", column "PRIsz"\n"
"%s at line "PRIsz", column "PRIsz"\n", parser->context,
parser->context_mark.line+1, parser->context_mark.column+1,
parser->problem, parser->problem_mark.line+1,
parser->problem_mark.column+1);
} else {
fprintf(stderr, "Parser error: %s at line %lu, column %lu\n",
fprintf(stderr, "Parser error: %s at line "PRIsz", column "PRIsz"\n",
parser->problem, parser->problem_mark.line+1,
parser->problem_mark.column+1);
}

2
stubby

@ -1 +1 @@
Subproject commit 3f132bf7d51bdd156d28758acb884de3fb1249b0
Subproject commit 993cbb35c1e1c2bcccb49fc0781e94c34c21a5ee