Commit c441f79a authored by Calvin Sun's avatar Calvin Sun

Bug#52062: Compiler warning in os0file.c on windows 64-bit

On Windows, the parameter for number of bytes passed into WriteFile()
and ReadFile() is DWORD. Casting is needed to silence the warning on
64-bit Windows.

Also, adding several asserts to ensure the variable for number of bytes
is no more than 32 bits, even on 64-bit Windows.

rb://415
Approved by: Inaam
parent b5819779
...@@ -2400,7 +2400,10 @@ os_file_read_func( ...@@ -2400,7 +2400,10 @@ os_file_read_func(
ulint i; ulint i;
#endif /* !UNIV_HOTBACKUP */ #endif /* !UNIV_HOTBACKUP */
/* On 64-bit Windows, ulint is 64 bits. But offset and n should be
no more than 32 bits. */
ut_a((offset & 0xFFFFFFFFUL) == offset); ut_a((offset & 0xFFFFFFFFUL) == offset);
ut_a((n & 0xFFFFFFFFUL) == n);
os_n_file_reads++; os_n_file_reads++;
os_bytes_read_since_printout += n; os_bytes_read_since_printout += n;
...@@ -2526,7 +2529,10 @@ os_file_read_no_error_handling_func( ...@@ -2526,7 +2529,10 @@ os_file_read_no_error_handling_func(
ulint i; ulint i;
#endif /* !UNIV_HOTBACKUP */ #endif /* !UNIV_HOTBACKUP */
/* On 64-bit Windows, ulint is 64 bits. But offset and n should be
no more than 32 bits. */
ut_a((offset & 0xFFFFFFFFUL) == offset); ut_a((offset & 0xFFFFFFFFUL) == offset);
ut_a((n & 0xFFFFFFFFUL) == n);
os_n_file_reads++; os_n_file_reads++;
os_bytes_read_since_printout += n; os_bytes_read_since_printout += n;
...@@ -2658,7 +2664,10 @@ os_file_write_func( ...@@ -2658,7 +2664,10 @@ os_file_write_func(
ulint i; ulint i;
#endif /* !UNIV_HOTBACKUP */ #endif /* !UNIV_HOTBACKUP */
ut_a((offset & 0xFFFFFFFF) == offset); /* On 64-bit Windows, ulint is 64 bits. But offset and n should be
no more than 32 bits. */
ut_a((offset & 0xFFFFFFFFUL) == offset);
ut_a((n & 0xFFFFFFFFUL) == n);
os_n_file_writes++; os_n_file_writes++;
...@@ -3621,6 +3630,10 @@ os_aio_array_reserve_slot( ...@@ -3621,6 +3630,10 @@ os_aio_array_reserve_slot(
ulint slots_per_seg; ulint slots_per_seg;
ulint local_seg; ulint local_seg;
#ifdef WIN_ASYNC_IO
ut_a((len & 0xFFFFFFFFUL) == len);
#endif
/* No need of a mutex. Only reading constant fields */ /* No need of a mutex. Only reading constant fields */
slots_per_seg = array->n_slots / array->n_segments; slots_per_seg = array->n_slots / array->n_segments;
...@@ -3996,6 +4009,9 @@ os_aio_func( ...@@ -3996,6 +4009,9 @@ os_aio_func(
ut_ad(n % OS_FILE_LOG_BLOCK_SIZE == 0); ut_ad(n % OS_FILE_LOG_BLOCK_SIZE == 0);
ut_ad(offset % OS_FILE_LOG_BLOCK_SIZE == 0); ut_ad(offset % OS_FILE_LOG_BLOCK_SIZE == 0);
ut_ad(os_aio_validate()); ut_ad(os_aio_validate());
#ifdef WIN_ASYNC_IO
ut_ad((n & 0xFFFFFFFFUL) == n);
#endif
wake_later = mode & OS_AIO_SIMULATED_WAKE_LATER; wake_later = mode & OS_AIO_SIMULATED_WAKE_LATER;
mode = mode & (~OS_AIO_SIMULATED_WAKE_LATER); mode = mode & (~OS_AIO_SIMULATED_WAKE_LATER);
...@@ -4271,16 +4287,18 @@ os_aio_windows_handle( ...@@ -4271,16 +4287,18 @@ os_aio_windows_handle(
__FILE__, __LINE__); __FILE__, __LINE__);
#endif #endif
ut_a((slot->len & 0xFFFFFFFFUL) == slot->len);
switch (slot->type) { switch (slot->type) {
case OS_FILE_WRITE: case OS_FILE_WRITE:
ret = WriteFile(slot->file, slot->buf, ret = WriteFile(slot->file, slot->buf,
slot->len, &len, (DWORD) slot->len, &len,
&(slot->control)); &(slot->control));
break; break;
case OS_FILE_READ: case OS_FILE_READ:
ret = ReadFile(slot->file, slot->buf, ret = ReadFile(slot->file, slot->buf,
slot->len, &len, (DWORD) slot->len, &len,
&(slot->control)); &(slot->control));
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment