summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2017-01-16 00:10:38 +0100
committerGerrit Rockbox <gerrit@rockbox.org>2017-02-04 17:24:47 +0100
commitd7871914acd2ed77f43344e36e08944524a67d9e (patch)
tree7bcef243d9b53c3703c305b8a5f9f8a8488eabfb /firmware
parent1245c5fe61f6ca8e1980a33a8b8f7ea4322829fd (diff)
downloadrockbox-d7871914acd2ed77f43344e36e08944524a67d9e.tar.gz
rockbox-d7871914acd2ed77f43344e36e08944524a67d9e.zip
Fix dangerous casts
On Windows 64-bit, the size of long is 32-bit, thus any pointer to long cast is not valid. In any case, one should use intptr_t and ptrdiff_t when casting to integers. This commit attempts to fix all instances reported by GCC. When relevant, I replaced code by the macros PTR_ADD, ALIGN_UP from system.h Change-Id: I2273b0e8465d3c4689824717ed5afa5ed238a2dc
Diffstat (limited to 'firmware')
-rw-r--r--firmware/asm/memset16.c3
-rw-r--r--firmware/drivers/lcd-16bit-common.c10
-rw-r--r--firmware/drivers/lcd-16bit.c2
-rw-r--r--firmware/drivers/lcd-color-common.c2
-rw-r--r--firmware/kernel/queue.c4
-rw-r--r--firmware/target/hosted/filesystem-win32.c2
6 files changed, 12 insertions, 11 deletions
diff --git a/firmware/asm/memset16.c b/firmware/asm/memset16.c
index db71d86fcc..12f3388a8d 100644
--- a/firmware/asm/memset16.c
+++ b/firmware/asm/memset16.c
@@ -20,9 +20,10 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "string-extra.h" /* memset16() */ 22#include "string-extra.h" /* memset16() */
23#include <stdint.h>
23 24
24#define LBLOCKSIZE (sizeof(long)/2) 25#define LBLOCKSIZE (sizeof(long)/2)
25#define ROCKBOX_UNALIGNED(X) ((long)X & (sizeof(long) - 1)) 26#define ROCKBOX_UNALIGNED(X) ((uintptr_t)X & (sizeof(long) - 1))
26#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) 27#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE)
27 28
28void memset16(void *dst, int val, size_t len) 29void memset16(void *dst, int val, size_t len)
diff --git a/firmware/drivers/lcd-16bit-common.c b/firmware/drivers/lcd-16bit-common.c
index d006b3900a..a7e80c7244 100644
--- a/firmware/drivers/lcd-16bit-common.c
+++ b/firmware/drivers/lcd-16bit-common.c
@@ -94,7 +94,7 @@ void lcd_clear_viewport(void)
94 { 94 {
95 do 95 do
96 { 96 {
97 memcpy(dst, (void *)((long)dst + lcd_backdrop_offset), 97 memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset),
98 len * sizeof(fb_data)); 98 len * sizeof(fb_data));
99 dst += step; 99 dst += step;
100 } 100 }
@@ -122,7 +122,7 @@ static void ICODE_ATTR clearpixel(fb_data *address)
122 122
123static void ICODE_ATTR clearimgpixel(fb_data *address) 123static void ICODE_ATTR clearimgpixel(fb_data *address)
124{ 124{
125 *address = *(fb_data *)((long)address + lcd_backdrop_offset); 125 *address = *PTR_ADD(address, lcd_backdrop_offset);
126} 126}
127 127
128static void ICODE_ATTR flippixel(fb_data *address) 128static void ICODE_ATTR flippixel(fb_data *address)
@@ -244,7 +244,7 @@ void lcd_fillrect(int x, int y, int width, int height)
244 break; 244 break;
245 245
246 case OPT_COPY: 246 case OPT_COPY:
247 memcpy(dst, (void *)((long)dst + lcd_backdrop_offset), 247 memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset),
248 len * sizeof(fb_data)); 248 len * sizeof(fb_data));
249 break; 249 break;
250 250
@@ -395,7 +395,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
395 do 395 do
396 { 396 {
397 if (!(data & 0x01)) 397 if (!(data & 0x01))
398 *dst = *(fb_data *)((long)dst + bo); 398 *dst = *PTR_ADD(dst, bo);
399 399
400 dst += ROW_INC; 400 dst += ROW_INC;
401 UPDATE_SRC; 401 UPDATE_SRC;
@@ -435,7 +435,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
435 do 435 do
436 { 436 {
437 *dst = (data & 0x01) ? fg 437 *dst = (data & 0x01) ? fg
438 : *(fb_data *)((long)dst + bo); 438 : *PTR_ADD(dst, bo);
439 dst += ROW_INC; 439 dst += ROW_INC;
440 UPDATE_SRC; 440 UPDATE_SRC;
441 } 441 }
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c
index 3c99560b6d..b792be4e02 100644
--- a/firmware/drivers/lcd-16bit.c
+++ b/firmware/drivers/lcd-16bit.c
@@ -139,7 +139,7 @@ void lcd_hline(int x1, int x2, int y)
139 break; 139 break;
140 140
141 case OPT_COPY: 141 case OPT_COPY:
142 memcpy(dst, (void *)((long)dst + lcd_backdrop_offset), 142 memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset),
143 width * sizeof(fb_data)); 143 width * sizeof(fb_data));
144 break; 144 break;
145 145
diff --git a/firmware/drivers/lcd-color-common.c b/firmware/drivers/lcd-color-common.c
index b5b0f58eb3..c8bfd2d6b3 100644
--- a/firmware/drivers/lcd-color-common.c
+++ b/firmware/drivers/lcd-color-common.c
@@ -148,7 +148,7 @@ void lcd_set_backdrop(fb_data* backdrop)
148 lcd_backdrop = backdrop; 148 lcd_backdrop = backdrop;
149 if (backdrop) 149 if (backdrop)
150 { 150 {
151 lcd_backdrop_offset = (long)backdrop - (long)lcd_framebuffer; 151 lcd_backdrop_offset = (intptr_t)backdrop - (intptr_t)lcd_framebuffer;
152 lcd_fastpixelfuncs = lcd_fastpixelfuncs_backdrop; 152 lcd_fastpixelfuncs = lcd_fastpixelfuncs_backdrop;
153 } 153 }
154 else 154 else
diff --git a/firmware/kernel/queue.c b/firmware/kernel/queue.c
index 233b53c364..5566604c5d 100644
--- a/firmware/kernel/queue.c
+++ b/firmware/kernel/queue.c
@@ -418,7 +418,7 @@ void queue_post(struct event_queue *q, long id, intptr_t data)
418 wr = q->write++ & QUEUE_LENGTH_MASK; 418 wr = q->write++ & QUEUE_LENGTH_MASK;
419 419
420 KERNEL_ASSERT((q->write - q->read) <= QUEUE_LENGTH, 420 KERNEL_ASSERT((q->write - q->read) <= QUEUE_LENGTH,
421 "queue_post ovf q=%08lX", (long)q); 421 "queue_post ovf q=%p", q);
422 422
423 q->events[wr].id = id; 423 q->events[wr].id = id;
424 q->events[wr].data = data; 424 q->events[wr].data = data;
@@ -450,7 +450,7 @@ intptr_t queue_send(struct event_queue *q, long id, intptr_t data)
450 wr = q->write++ & QUEUE_LENGTH_MASK; 450 wr = q->write++ & QUEUE_LENGTH_MASK;
451 451
452 KERNEL_ASSERT((q->write - q->read) <= QUEUE_LENGTH, 452 KERNEL_ASSERT((q->write - q->read) <= QUEUE_LENGTH,
453 "queue_send ovf q=%08lX", (long)q); 453 "queue_send ovf q=%p", q);
454 454
455 q->events[wr].id = id; 455 q->events[wr].id = id;
456 q->events[wr].data = data; 456 q->events[wr].data = data;
diff --git a/firmware/target/hosted/filesystem-win32.c b/firmware/target/hosted/filesystem-win32.c
index fad9b16e36..be95134cc9 100644
--- a/firmware/target/hosted/filesystem-win32.c
+++ b/firmware/target/hosted/filesystem-win32.c
@@ -251,7 +251,7 @@ int os_opendirfd(const char *osdirname)
251 else 251 else
252 { 252 {
253 /* Convert OS handle to fd; the fd now owns it */ 253 /* Convert OS handle to fd; the fd now owns it */
254 int osfd = _open_osfhandle((long)h, O_RDONLY); 254 int osfd = _open_osfhandle((intptr_t)h, O_RDONLY);
255 if (osfd >= 0) 255 if (osfd >= 0)
256 return osfd; 256 return osfd;
257 } 257 }