File 0842-erts-Fix-misc-Windows-C-compiler-warnings.patch of Package erlang
From a2e77938f4a8bb21f6a1c778130f9a65c2812c78 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Fri, 17 Apr 2020 13:04:17 +0200
Subject: [PATCH 1/7] erts: Fix misc Windows C compiler warnings
---
erts/emulator/beam/erl_bif_lists.c | 4 +--
erts/emulator/beam/erl_nif.c | 10 ++++--
erts/emulator/beam/erl_process.c | 2 +-
erts/emulator/beam/erl_process.h | 1 +
erts/emulator/drivers/common/inet_drv.c | 11 +++---
erts/emulator/drivers/win32/registry_drv.c | 6 ++--
erts/emulator/drivers/win32/ttsl_drv.c | 4 +--
erts/emulator/sys/common/erl_check_io.c | 39 ++++++++++++----------
erts/emulator/sys/win32/sys.c | 10 +++---
erts/etc/common/heart.c | 2 +-
erts/etc/common/inet_gethost.c | 3 +-
erts/etc/win32/erl_log.c | 2 +-
erts/etc/win32/erlsrv/erlsrv_interactive.c | 2 +-
erts/etc/win32/win_erlexec.c | 8 ++---
14 files changed, 56 insertions(+), 48 deletions(-)
diff --git a/erts/emulator/beam/erl_bif_lists.c b/erts/emulator/beam/erl_bif_lists.c
index e315e768d4..74f91e8b52 100644
--- a/erts/emulator/beam/erl_bif_lists.c
+++ b/erts/emulator/beam/erl_bif_lists.c
@@ -954,10 +954,8 @@ static int subtract_continue(Process *p, ErtsSubtractContext *context) {
case SUBTRACT_STAGE_SET_FINISH: {
return subtract_set_finish(p, context);
}
-
- default:
- ERTS_ASSERT(!"unreachable");
}
+ ERTS_INTERNAL_ERROR("unreachable");
}
static int subtract_start(Process *p, Eterm lhs, Eterm rhs,
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index 87e469dd98..3f29bae8b1 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -1761,16 +1761,20 @@ ERL_NIF_TERM enif_make_uint(ErlNifEnv* env, unsigned i)
ERL_NIF_TERM enif_make_long(ErlNifEnv* env, long i)
{
+#if SIZEOF_LONG < ERTS_SIZEOF_ETERM
+ return make_small(i);
+#else
if (IS_SSMALL(i)) {
return make_small(i);
}
-#if SIZEOF_LONG == ERTS_SIZEOF_ETERM
+# if SIZEOF_LONG == ERTS_SIZEOF_ETERM
return small_to_big(i, alloc_heap(env,2));
-#elif SIZEOF_LONG_LONG == ERTS_SIZEOF_ETERM
+# elif SIZEOF_LONG_LONG == ERTS_SIZEOF_ETERM
return make_small(i);
-#elif SIZEOF_LONG == 8
+# elif SIZEOF_LONG == 8
ensure_heap(env,3);
return erts_sint64_to_big(i, &env->hp);
+# endif
#endif
}
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 5b29023fdc..95fc08cb24 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -12059,7 +12059,7 @@ delete_process(Process* p)
* The mso list should not be used anymore, but if it is, make sure that
* we'll notice.
*/
- p->off_heap.first = (void *) 0x8DEFFACD;
+ p->off_heap.first = (void*)(UWord)0x8DEFFACD;
if (p->arg_reg != p->def_arg_reg) {
erts_free(ERTS_ALC_T_ARG_REG, p->arg_reg);
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index 3c606fe9eb..b114e283fe 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -2644,6 +2644,7 @@ erts_get_atom_cache_map(Process *c_p)
* erl_process.c on windows.
*/
# define ERTS_TIME2REDS_IMPL__ erts_time2reds__
+Sint64 erts_time2reds(ErtsMonotonicTime start, ErtsMonotonicTime end);
#else
# define ERTS_TIME2REDS_IMPL__ erts_time2reds
#endif
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index 2ef452fa01..bbc50923b5 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -4626,10 +4626,10 @@ static void desc_close(inet_descriptor* desc)
* be selecting on it.
*/
if (!INET_IGNORED(desc))
- driver_select(desc->port,(ErlDrvEvent)(long)desc->event,
+ driver_select(desc->port,(ErlDrvEvent)(SWord)desc->event,
ERL_DRV_USE, 0);
else
- inet_stop_select((ErlDrvEvent)(long)desc->event,NULL);
+ inet_stop_select((ErlDrvEvent)(SWord)desc->event,NULL);
desc->event = INVALID_EVENT; /* closed by stop_select callback */
desc->s = INVALID_SOCKET;
desc->event_mask = 0;
@@ -5852,9 +5852,10 @@ static ErlDrvSSizeT inet_ctl_getifaddrs(inet_descriptor* desc_p,
*buf_p++ = INET_REP_OK;
/* Iterate over MIB_IPADDRTABLE or IP_ADAPTER_ADDRESSES */
- for (ia_p = NULL, ip_addrs_p ? ((void *)(i = 0)) : (ia_p = ip_adaddrs_p);
+ ia_p = NULL;
+ for (ip_addrs_p ? (void)(i = 0) : (void)(ia_p = ip_adaddrs_p);
ip_addrs_p ? (i < ip_addrs_p->dwNumEntries) : (ia_p != NULL);
- ip_addrs_p ? ((void *)(i++)) : (ia_p = ia_p->Next)) {
+ ip_addrs_p ? (void)(i++) : (void)(ia_p = ia_p->Next)) {
MIB_IPADDRROW *ipaddrrow_p = NULL;
DWORD flags = INET_IFF_MULTICAST;
DWORD index = 0;
@@ -9918,7 +9919,7 @@ static tcp_descriptor* tcp_inet_copy(tcp_descriptor* desc,SOCKET s,
/* The new port will be linked and connected to the original caller */
port = driver_create_port(port, owner, "tcp_inet", (ErlDrvData) copy_desc);
- if ((long)port == -1) {
+ if ((SWord)port == -1) {
*err = INET_ERRNO_SYSTEM_LIMIT;
FREE(copy_desc);
return NULL;
diff --git a/erts/emulator/drivers/win32/registry_drv.c b/erts/emulator/drivers/win32/registry_drv.c
index a03a030df8..7d71ef7f53 100644
--- a/erts/emulator/drivers/win32/registry_drv.c
+++ b/erts/emulator/drivers/win32/registry_drv.c
@@ -195,7 +195,7 @@ reg_from_erlang(ErlDrvData clientData, char* buf, ErlDrvSizeT count)
* [HKEY(DWORD), KeyString(string)]
*/
- hkey = (HKEY) get_int32(buf+0);
+ hkey = (HKEY)(SWord) get_int32(buf+0);
rp->hkey_root = hkey;
key = buf+4;
result = RegOpenKeyEx(hkey, key, 0, rp->sam, &newKey);
@@ -217,7 +217,7 @@ reg_from_erlang(ErlDrvData clientData, char* buf, ErlDrvSizeT count)
HKEY newKey;
DWORD disposition;
- hkey = (HKEY) get_int32(buf+0);
+ hkey = (HKEY)(SWord) get_int32(buf+0);
rp->hkey_root = hkey;
key = buf+4;
result = RegCreateKeyEx(hkey, key, 0, "", 0, rp->sam, NULL,
@@ -512,7 +512,7 @@ state_reply(RegPort* rp, /* Pointer to port structure. */
s[0] = 's';
i = 1;
- put_int32((DWORD) root, s+i);
+ put_int32((DWORD)(SWord) root, s+i);
i += 4;
memcpy(s+i, name, nameSize);
ASSERT(i+nameSize == needed);
diff --git a/erts/emulator/drivers/win32/ttsl_drv.c b/erts/emulator/drivers/win32/ttsl_drv.c
index 9b72d1fea9..8d59682766 100644
--- a/erts/emulator/drivers/win32/ttsl_drv.c
+++ b/erts/emulator/drivers/win32/ttsl_drv.c
@@ -149,7 +149,7 @@ static int ttysl_init()
static ErlDrvData ttysl_start(ErlDrvPort port, char* buf)
{
- if ((int)ttysl_port != -1 || console_thread == NULL) {
+ if ((SWord)ttysl_port != -1 || console_thread == NULL) {
return ERL_DRV_ERROR_GENERAL;
}
start_lbuf();
@@ -215,7 +215,7 @@ static ErlDrvSSizeT ttysl_control(ErlDrvData drv_data,
static void ttysl_stop(ErlDrvData ttysl_data)
{
- if ((int)ttysl_port != -1) {
+ if ((SWord)ttysl_port != -1) {
driver_select(ttysl_port, console_input_event, ERL_DRV_READ, 0);
}
diff --git a/erts/emulator/sys/common/erl_check_io.c b/erts/emulator/sys/common/erl_check_io.c
index 344d51f768..d02c2686a4 100644
--- a/erts/emulator/sys/common/erl_check_io.c
+++ b/erts/emulator/sys/common/erl_check_io.c
@@ -184,11 +184,14 @@ int ERTS_WRITE_UNLIKELY(erts_no_pollsets) = 1;
int ERTS_WRITE_UNLIKELY(erts_no_poll_threads) = 1;
struct drv_ev_state_shared drv_ev_state;
-static ERTS_INLINE int fd_hash(ErtsSysFdType fd) {
+static ERTS_INLINE int fd_hash(ErtsSysFdType fd)
+{
+#ifdef ERTS_SYS_CONTINOUS_FD_NUMBERS
int hash = (int)fd;
-# ifndef ERTS_SYS_CONTINOUS_FD_NUMBERS
+#else
+ int hash = (int)(SWord)fd;
hash ^= (hash >> 9);
-# endif
+#endif
return hash;
}
@@ -1339,7 +1342,7 @@ print_driver_name(erts_dsprintf_buf_t *dsbufp, Eterm id)
static void
steal(erts_dsprintf_buf_t *dsbufp, ErtsDrvEventState *state, int mode)
{
- erts_dsprintf(dsbufp, "stealing control of fd=%d from ", (int) state->fd);
+ erts_dsprintf(dsbufp, "stealing control of fd=%bpd from ", (SWord) state->fd);
switch (state->type) {
case ERTS_EV_TYPE_DRV_SEL: {
int deselect_mode = 0;
@@ -1363,7 +1366,7 @@ steal(erts_dsprintf_buf_t *dsbufp, ErtsDrvEventState *state, int mode)
if (deselect_mode)
deselect(state, deselect_mode);
else {
- erts_dsprintf(dsbufp, "no one", (int) state->fd);
+ erts_dsprintf(dsbufp, "no one");
ASSERT(0);
}
erts_dsprintf(dsbufp, "\n");
@@ -1394,7 +1397,7 @@ steal(erts_dsprintf_buf_t *dsbufp, ErtsDrvEventState *state, int mode)
break;
}
default:
- erts_dsprintf(dsbufp, "no one\n", (int) state->fd);
+ erts_dsprintf(dsbufp, "no one\n");
ASSERT(0);
}
}
@@ -1405,10 +1408,10 @@ print_drv_select_op(erts_dsprintf_buf_t *dsbufp,
{
Port *pp = erts_drvport2port(ix);
erts_dsprintf(dsbufp,
- "driver_select(%p, %d,%s%s%s%s, %d) "
+ "driver_select(%p, %bpd,%s%s%s%s, %d) "
"by ",
ix,
- (int) fd,
+ (SWord) fd,
mode & ERL_DRV_READ ? " ERL_DRV_READ" : "",
mode & ERL_DRV_WRITE ? " ERL_DRV_WRITE" : "",
mode & ERL_DRV_USE ? " ERL_DRV_USE" : "",
@@ -1424,8 +1427,8 @@ print_nif_select_op(erts_dsprintf_buf_t *dsbufp,
ErtsResource* resource, Eterm ref)
{
erts_dsprintf(dsbufp,
- "enif_select(_, %d,%s%s%s, %T:%T, %T) ",
- (int) fd,
+ "enif_select(_, %bpd,%s%s%s, %T:%T, %T) ",
+ (SWord) fd,
mode & ERL_NIF_SELECT_READ ? " READ" : "",
mode & ERL_NIF_SELECT_WRITE ? " WRITE" : "",
(mode & ERL_NIF_SELECT_STOP ? " STOP"
@@ -1866,7 +1869,7 @@ erts_check_io(ErtsPollThread *psi, ErtsMonotonicTime timeout_time)
dsbufp = erts_create_logger_dsbuf();
erts_dsprintf(dsbufp,
"Invalid event request type for fd in erts_poll()! "
- "fd=%d, event request type=%d\n", (int) state->fd,
+ "fd=%bpd, event request type=%d\n", (SWord) state->fd,
(int) state->type);
ASSERT(0);
deselect(state, 0);
@@ -1944,8 +1947,8 @@ bad_fd_in_pollset(ErtsDrvEventState *state, Eterm inport, Eterm outport)
}
}
erts_dsprintf(dsbufp,
- "Bad %s fd in erts_poll()! fd=%d, ",
- io_str, (int) state->fd);
+ "Bad %s fd in erts_poll()! fd=%bpd, ",
+ io_str, (SWord) state->fd);
if (state->type == ERTS_EV_TYPE_DRV_SEL) {
if (is_nil(port)) {
ErtsPortNames *ipnp = erts_get_port_names(inport, ERTS_INVALID_ERL_DRV_PORT);
@@ -1978,7 +1981,8 @@ bad_fd_in_pollset(ErtsDrvEventState *state, Eterm inport, Eterm outport)
}
}
else {
- erts_dsprintf(dsbufp, "Bad fd in erts_poll()! fd=%d\n", (int) state->fd);
+ erts_dsprintf(dsbufp, "Bad fd in erts_poll()! fd=%bpd\n",
+ (SWord) state->fd);
}
erts_send_error_to_logger_nogl(dsbufp);
@@ -1997,7 +2001,7 @@ stale_drv_select(Eterm id, ErtsDrvEventState *state, int mode)
static SafeHashValue drv_ev_state_hash(void *des)
{
- SafeHashValue val = (SafeHashValue) ((ErtsDrvEventState *) des)->fd;
+ SafeHashValue val = (SafeHashValue)(SWord) ((ErtsDrvEventState *) des)->fd;
return val ^ (val >> 8); /* Good enough for aligned pointer values? */
}
@@ -2548,8 +2552,9 @@ static int erts_debug_print_checkio_state(erts_dsprintf_buf_t *dsbufp,
#ifdef ERTS_SYS_CONTINOUS_FD_NUMBERS
ErtsPollEvents aio_events = state->active_events;
#endif
- erts_dsprintf(dsbufp, "pollset=%d fd=%d ",
- state->flags & ERTS_EV_FLAG_FALLBACK ? -1 : get_pollset_id(fd), (int) fd);
+ erts_dsprintf(dsbufp, "pollset=%d fd=%bpd ",
+ state->flags & ERTS_EV_FLAG_FALLBACK ? -1 : get_pollset_id(fd),
+ (SWord) fd);
#if defined(HAVE_FSTAT) && !defined(NO_FSTAT_ON_SYS_FD_TYPE)
if (fstat((int) fd, &stat_buf) < 0)
diff --git a/erts/emulator/sys/win32/sys.c b/erts/emulator/sys/win32/sys.c
index 957ade51c3..a9bcc1d0d4 100644
--- a/erts/emulator/sys/win32/sys.c
+++ b/erts/emulator/sys/win32/sys.c
@@ -2111,15 +2111,15 @@ translate_fd(int fd)
handle = GetStdHandle(STD_ERROR_HANDLE);
break;
default:
- return (HANDLE) fd;
+ return (HANDLE)(SWord) fd;
}
- DEBUGF(("translate_fd(%d) -> std(%d)\n", fd, handle));
+ DEBUGF(("translate_fd(%d) -> std(%p)\n", fd, (void*)handle));
if (handle == INVALID_HANDLE_VALUE || handle == 0) {
handle = CreateFile("nul", access, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
}
- DEBUGF(("translate_fd(%d) -> %d\n", fd, handle));
+ DEBUGF(("translate_fd(%d) -> %p\n", fd, (void*)handle));
return handle;
}
@@ -2924,9 +2924,9 @@ unsigned char* sys_preload_begin(Preload* pp)
ASSERT(beam_module != NULL);
resource = res_name[pp-preloaded];
- DEBUGF(("Loading name: %s; size: %d; resource: %p\n",
+ DEBUGF(("Loading name: %s; size: %d; resource: %u\n",
pp->name, pp->size, resource));
- hRes = FindResource(beam_module, (char *) resource, "ERLANG_CODE");
+ hRes = FindResource(beam_module, (char*)(UWord) resource, "ERLANG_CODE");
return pp->code = LoadResource(beam_module, hRes);
}
diff --git a/erts/etc/common/heart.c b/erts/etc/common/heart.c
index a37bb4cfef..215c152008 100644
--- a/erts/etc/common/heart.c
+++ b/erts/etc/common/heart.c
@@ -977,7 +977,7 @@ debugf(const char *format,...)
#ifdef __WIN32__
void print_last_error() {
- LPVOID lpMsgBuf;
+ LPTSTR lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index 4fc7a93348..12012a056e 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -1578,8 +1578,7 @@ static int create_worker(Worker *pworker, int save_que)
pworker->que_first = pworker->que_last = NULL;
pworker->que_size = 0;
}
- DEBUGF(3,("Created worker[%ld] with fd %d",
- (long) pworker->pid, (int) pworker->readfrom));
+ DEBUGF(3,("Created worker[%ld]", (long) pworker->pid));
return 0;
}
diff --git a/erts/etc/win32/erl_log.c b/erts/etc/win32/erl_log.c
index de0d8e39f0..ed2fb294de 100644
--- a/erts/etc/win32/erl_log.c
+++ b/erts/etc/win32/erl_log.c
@@ -57,7 +57,7 @@ main()
static void print_last_error(char* message)
{
- LPTSTR* lpBufPtr;
+ LPTSTR lpBufPtr;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
diff --git a/erts/etc/win32/erlsrv/erlsrv_interactive.c b/erts/etc/win32/erlsrv/erlsrv_interactive.c
index c616ef86e3..9f1312b5e9 100644
--- a/erts/etc/win32/erlsrv/erlsrv_interactive.c
+++ b/erts/etc/win32/erlsrv/erlsrv_interactive.c
@@ -1273,7 +1273,7 @@ int interactive_main(int argc, wchar_t **argv){
_setmode(_fileno(stderr), _O_U8TEXT); /* set stderr to UTF8 */
if (take_lock() != 0) {
- fwprintf(stderr,L"%s: unable to acquire global lock (%s).\n",argv[0],
+ fwprintf(stderr,L"%s: unable to acquire global lock (%S).\n",argv[0],
ERLSRV_INTERACTIVE_GLOBAL_SEMAPHORE);
return 1;
}
diff --git a/erts/etc/win32/win_erlexec.c b/erts/etc/win32/win_erlexec.c
index 39dac358e9..c0bb92793e 100644
--- a/erts/etc/win32/win_erlexec.c
+++ b/erts/etc/win32/win_erlexec.c
@@ -272,7 +272,7 @@ start_emulator(char* utf8emu, char *utf8start_prog, char** utf8argv, int start_d
*/
if (start_detached) {
- int result;
+ HANDLE result;
int i;
wchar_t *start_prog=NULL;
wchar_t **argv;
@@ -311,17 +311,17 @@ start_emulator(char* utf8emu, char *utf8start_prog, char** utf8argv, int start_d
MessageBoxW(NULL, buffer, L"Start detached",MB_OK);
}
#endif
- result = _wspawnv(_P_DETACH, start_prog, argv);
+ result = (HANDLE) _wspawnv(_P_DETACH, start_prog, argv);
free_fnuttified(utf8argv);
free(start_prog);
- if (result == -1) {
+ if (result == (HANDLE)-1) {
#ifdef ARGS_HARDDEBUG
MessageBox(NULL, "_wspawnv failed","Start detached",MB_OK);
#endif
return 1;
}
- SetPriorityClass((HANDLE) result, GetPriorityClass(GetCurrentProcess()));
+ SetPriorityClass(result, GetPriorityClass(GetCurrentProcess()));
} else {
wchar_t *emu=NULL;
#ifdef LOAD_BEAM_DYNAMICALLY
--
2.26.1