From d7871914acd2ed77f43344e36e08944524a67d9e Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Mon, 16 Jan 2017 00:10:38 +0100 Subject: 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 --- apps/gui/skin_engine/skin_parser.c | 2 +- apps/misc.c | 2 +- apps/plugins/doom/d_deh.c | 4 ++-- apps/plugins/doom/d_main.c | 2 +- apps/plugins/doom/p_saveg.c | 30 +++++++++++++++--------------- apps/plugins/doom/z_zone.c | 4 ++-- apps/plugins/goban/util.c | 4 ++-- apps/plugins/lib/simple_viewer.c | 2 +- apps/plugins/lib/strncpy.c | 3 ++- apps/plugins/lrcplayer.c | 16 ++++++++-------- apps/plugins/mikmod/mikmod_internals.h | 2 +- apps/plugins/solitaire.c | 2 +- apps/plugins/zxbox/snapshot.c | 2 +- apps/plugins/zxbox/tapefile.c | 2 +- apps/plugins/zxbox/z80.c | 2 +- apps/recorder/keyboard.c | 2 +- apps/tagcache.c | 10 +++++----- firmware/asm/memset16.c | 3 ++- firmware/drivers/lcd-16bit-common.c | 10 +++++----- firmware/drivers/lcd-16bit.c | 2 +- firmware/drivers/lcd-color-common.c | 2 +- firmware/kernel/queue.c | 4 ++-- firmware/target/hosted/filesystem-win32.c | 2 +- lib/rbcodec/codecs/liba52/bitstream.c | 2 +- lib/rbcodec/codecs/libtremor/codebook.c | 6 +++--- lib/rbcodec/metadata/id3tags.c | 6 +++--- lib/tlsf/src/tlsf.c | 7 ++++--- 27 files changed, 69 insertions(+), 66 deletions(-) diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 63f3f81140..5409861cc7 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -2493,7 +2493,7 @@ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data, skin_buffer = wps_buffer; wps_buffer = (char*)buf; } - skin_buffer = (void *)(((unsigned long)skin_buffer + 3) & ~3); + skin_buffer = ALIGN_UP(skin_buffer, 4); /* align on 4-byte boundary */ buffersize -= 3; #ifdef HAVE_BACKDROP_IMAGE backdrop_filename = "-"; diff --git a/apps/misc.c b/apps/misc.c index e460eb542c..3fdcab85e6 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -215,7 +215,7 @@ int fast_readline(int fd, char *buf, int buf_size, void *parameters, count++; if (next) { - pos = buf_size - ((long)next - (long)buf) - 1; + pos = buf_size - ((intptr_t)next - (intptr_t)buf) - 1; memmove(buf, next, pos); } else diff --git a/apps/plugins/doom/d_deh.c b/apps/plugins/doom/d_deh.c index abdaeae9ae..1a399e3b49 100644 --- a/apps/plugins/doom/d_deh.c +++ b/apps/plugins/doom/d_deh.c @@ -2082,7 +2082,7 @@ void deh_procSounds(DEHFILE *fpin, int fpout, char *line) S_sfx[indexnum].priority = (int)value; else if (!strcasecmp(key,deh_sfxinfo[3])) // Zero 1 - S_sfx[indexnum].link = (sfxinfo_t *)((long) value); + S_sfx[indexnum].link = (sfxinfo_t *)((intptr_t) value); else if (!strcasecmp(key,deh_sfxinfo[4])) // Zero 2 S_sfx[indexnum].pitch = (int)value; @@ -2091,7 +2091,7 @@ void deh_procSounds(DEHFILE *fpin, int fpout, char *line) S_sfx[indexnum].volume = (int)value; else if (!strcasecmp(key,deh_sfxinfo[6])) // Zero 4 - S_sfx[indexnum].data = (void *) ((long) value); // killough 5/3/98: changed cast + S_sfx[indexnum].data = (void *) ((intptr_t) value); // killough 5/3/98: changed cast else if (!strcasecmp(key,deh_sfxinfo[7])) // Neg. One 1 S_sfx[indexnum].usefulness = (int)value; diff --git a/apps/plugins/doom/d_main.c b/apps/plugins/doom/d_main.c index be45e6a37e..1afeffa502 100644 --- a/apps/plugins/doom/d_main.c +++ b/apps/plugins/doom/d_main.c @@ -807,7 +807,7 @@ void D_DoomMainSetup(void) // for statistics driver extern void* statcopy; - statcopy = (void*)(long)atoi(myargv[p+1]); + statcopy = (void*)(intptr_t)atoi(myargv[p+1]); printf ("External statistics registered.\n"); } diff --git a/apps/plugins/doom/p_saveg.c b/apps/plugins/doom/p_saveg.c index a704bfa83c..891b3b0503 100644 --- a/apps/plugins/doom/p_saveg.c +++ b/apps/plugins/doom/p_saveg.c @@ -44,7 +44,7 @@ byte *save_p; // Pads save_p to a 4-byte boundary // so that the load/save works on SGI&Gecko. -#define PADSAVEP() do { save_p += (4 - ((unsigned long) save_p & 3)) & 3; } while (0) +#define PADSAVEP() do { save_p += (4 - ((intptr_t) save_p & 3)) & 3; } while (0) // // P_ArchivePlayers // @@ -95,7 +95,7 @@ void P_UnArchivePlayers (void) for (j=0 ; jnext) if (th->function == P_MobjThinker) - th->prev = (thinker_t *)(long)(++number_of_thinkers); + th->prev = (thinker_t *)(intptr_t)(++number_of_thinkers); } // phares 9/13/98: Moved this code outside of P_ArchiveThinkers so the @@ -448,10 +448,10 @@ void P_UnArchiveThinkers (void) PADSAVEP(); memcpy (mobj, save_p, sizeof(mobj_t)); save_p += sizeof(mobj_t); - mobj->state = states + (unsigned long) mobj->state; + mobj->state = states + (intptr_t) mobj->state; if (mobj->player) - (mobj->player = &players[(unsigned long) mobj->player - 1]) -> mo = mobj; + (mobj->player = &players[(intptr_t) mobj->player - 1]) -> mo = mobj; P_SetThingPosition (mobj); mobj->info = &mobjinfo[mobj->type]; @@ -770,7 +770,7 @@ void P_UnArchiveSpecials (void) ceiling_t *ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVEL, NULL); memcpy (ceiling, save_p, sizeof(*ceiling)); save_p += sizeof(*ceiling); - ceiling->sector = §ors[(unsigned long)ceiling->sector]; + ceiling->sector = §ors[(intptr_t)ceiling->sector]; ceiling->sector->ceilingdata = ceiling; //jff 2/22/98 if (ceiling->thinker.function) @@ -787,10 +787,10 @@ void P_UnArchiveSpecials (void) vldoor_t *door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL); memcpy (door, save_p, sizeof(*door)); save_p += sizeof(*door); - door->sector = §ors[(unsigned long)door->sector]; + door->sector = §ors[(intptr_t)door->sector]; //jff 1/31/98 unarchive line remembered by door as well - door->line = (long)door->line!=-1? &lines[(unsigned long)door->line] : NULL; + door->line = (intptr_t)door->line!=-1? &lines[(intptr_t)door->line] : NULL; door->sector->ceilingdata = door; //jff 2/22/98 door->thinker.function = T_VerticalDoor; @@ -804,7 +804,7 @@ void P_UnArchiveSpecials (void) floormove_t *floor = Z_Malloc (sizeof(*floor), PU_LEVEL, NULL); memcpy (floor, save_p, sizeof(*floor)); save_p += sizeof(*floor); - floor->sector = §ors[(unsigned long)floor->sector]; + floor->sector = §ors[(intptr_t)floor->sector]; floor->sector->floordata = floor; //jff 2/22/98 floor->thinker.function = T_MoveFloor; P_AddThinker (&floor->thinker); @@ -817,7 +817,7 @@ void P_UnArchiveSpecials (void) plat_t *plat = Z_Malloc (sizeof(*plat), PU_LEVEL, NULL); memcpy (plat, save_p, sizeof(*plat)); save_p += sizeof(*plat); - plat->sector = §ors[(unsigned long)plat->sector]; + plat->sector = §ors[(intptr_t)plat->sector]; plat->sector->floordata = plat; //jff 2/22/98 if (plat->thinker.function) @@ -834,7 +834,7 @@ void P_UnArchiveSpecials (void) lightflash_t *flash = Z_Malloc (sizeof(*flash), PU_LEVEL, NULL); memcpy (flash, save_p, sizeof(*flash)); save_p += sizeof(*flash); - flash->sector = §ors[(unsigned long)flash->sector]; + flash->sector = §ors[(intptr_t)flash->sector]; flash->thinker.function = T_LightFlash; P_AddThinker (&flash->thinker); break; @@ -846,7 +846,7 @@ void P_UnArchiveSpecials (void) strobe_t *strobe = Z_Malloc (sizeof(*strobe), PU_LEVEL, NULL); memcpy (strobe, save_p, sizeof(*strobe)); save_p += sizeof(*strobe); - strobe->sector = §ors[(unsigned long)strobe->sector]; + strobe->sector = §ors[(intptr_t)strobe->sector]; strobe->thinker.function = T_StrobeFlash; P_AddThinker (&strobe->thinker); break; @@ -858,7 +858,7 @@ void P_UnArchiveSpecials (void) glow_t *glow = Z_Malloc (sizeof(*glow), PU_LEVEL, NULL); memcpy (glow, save_p, sizeof(*glow)); save_p += sizeof(*glow); - glow->sector = §ors[(unsigned long)glow->sector]; + glow->sector = §ors[(intptr_t)glow->sector]; glow->thinker.function = T_Glow; P_AddThinker (&glow->thinker); break; @@ -870,7 +870,7 @@ void P_UnArchiveSpecials (void) fireflicker_t *flicker = Z_Malloc (sizeof(*flicker), PU_LEVEL, NULL); memcpy (flicker, save_p, sizeof(*flicker)); save_p += sizeof(*flicker); - flicker->sector = §ors[(unsigned long)flicker->sector]; + flicker->sector = §ors[(intptr_t)flicker->sector]; flicker->thinker.function = T_FireFlicker; P_AddThinker (&flicker->thinker); break; @@ -883,7 +883,7 @@ void P_UnArchiveSpecials (void) elevator_t *elevator = Z_Malloc (sizeof(*elevator), PU_LEVEL, NULL); memcpy (elevator, save_p, sizeof(*elevator)); save_p += sizeof(*elevator); - elevator->sector = §ors[(unsigned long)elevator->sector]; + elevator->sector = §ors[(intptr_t)elevator->sector]; elevator->sector->floordata = elevator; //jff 2/22/98 elevator->sector->ceilingdata = elevator; //jff 2/22/98 elevator->thinker.function = T_MoveElevator; diff --git a/apps/plugins/doom/z_zone.c b/apps/plugins/doom/z_zone.c index df00d6a9d7..d2b6111b60 100644 --- a/apps/plugins/doom/z_zone.c +++ b/apps/plugins/doom/z_zone.c @@ -252,8 +252,8 @@ void Z_Init(void) // Align on cache boundary - zone = (memblock_t *) ((unsigned long)zonebase + CACHE_ALIGN - - ((unsigned long)zonebase & (CACHE_ALIGN-1))); + zone = (memblock_t *) ((intptr_t)zonebase + CACHE_ALIGN - + ((intptr_t)zonebase & (CACHE_ALIGN-1))); rover = zone; // Rover points to base of zone mem zone->next = zone->prev = zone; // Single node diff --git a/apps/plugins/goban/util.c b/apps/plugins/goban/util.c index bb78316346..206606a4bb 100644 --- a/apps/plugins/goban/util.c +++ b/apps/plugins/goban/util.c @@ -73,7 +73,7 @@ void metadata_summary (void) void * align_buffer (void *buffer, size_t * buffer_size) { - unsigned int wasted = (-(long) buffer) & 3; + unsigned int wasted = (-(intptr_t) buffer) & 3; if (!buffer || !buffer_size) { @@ -88,7 +88,7 @@ align_buffer (void *buffer, size_t * buffer_size) *buffer_size -= wasted; - return (void *) (((char *) buffer) + wasted); + return PTR_ADD(buffer, wasted); } diff --git a/apps/plugins/lib/simple_viewer.c b/apps/plugins/lib/simple_viewer.c index 06cc9c1a71..6927d84a96 100644 --- a/apps/plugins/lib/simple_viewer.c +++ b/apps/plugins/lib/simple_viewer.c @@ -69,7 +69,7 @@ static const char* get_next_line(const char *text, struct view_info *info) w = 1; #else unsigned short ch; - n = ((long)rb->utf8decode(ptr, &ch) - (long)ptr); + n = ((intptr_t)rb->utf8decode(ptr, &ch) - (intptr_t)ptr); if (rb->is_diacritic(ch, NULL)) w = 0; else diff --git a/apps/plugins/lib/strncpy.c b/apps/plugins/lib/strncpy.c index 1b552ee15c..9ad3594287 100644 --- a/apps/plugins/lib/strncpy.c +++ b/apps/plugins/lib/strncpy.c @@ -41,13 +41,14 @@ QUICKREF #include #include "plugin.h" #include "_ansi.h" +#include /*SUPPRESS 560*/ /*SUPPRESS 530*/ /* Nonzero if either X or Y is not aligned on a "long" boundary. */ #define ROCKBOX_UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) + (((uintptr_t)X & (sizeof (long) - 1)) | ((uintptr_t)Y & (sizeof (long) - 1))) #if LONG_MAX == 2147483647L #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c index 392e78e77f..c7f36968a1 100644 --- a/apps/plugins/lrcplayer.c +++ b/apps/plugins/lrcplayer.c @@ -545,7 +545,7 @@ static struct lrc_brpos *calc_brpos(struct lrc_line *lrc_line, int i) c = rb->utf8seek(cr.str, 1); w = 1; #else - c = ((long)rb->utf8decode(cr.str, &ch) - (long)cr.str); + c = ((intptr_t)rb->utf8decode(cr.str, &ch) - (intptr_t)cr.str); if (rb->is_diacritic(ch, NULL)) w = 0; else @@ -885,7 +885,7 @@ static bool parse_lrc_line(char *line, off_t file_offset) lrc_line->time_start = (time/10)*10; lrc_line->old_time_start = lrc_line->time_start; add_lrc_line(lrc_line, NULL); - file_offset += (long)tagend - (long)str; + file_offset += (intptr_t)tagend - (intptr_t)str; str = tagend; } if (!first_lrc_line) @@ -908,7 +908,7 @@ static bool parse_lrc_line(char *line, off_t file_offset) if (!tagend) break; *tagend = 0; time = get_time_value(tagstart+1, false, - file_offset + ((long)tagstart - (long)str)); + file_offset + ((intptr_t)tagstart - (intptr_t)str)); *tagend++ = '>'; if (time < 0) { @@ -923,7 +923,7 @@ static bool parse_lrc_line(char *line, off_t file_offset) return false; nword++; } - file_offset += (long)tagend - (long)str; + file_offset += (intptr_t)tagend - (intptr_t)str; tagstart = str = tagend; time_start = time; } @@ -1159,7 +1159,7 @@ static int unsynchronize(char* tag, int len, bool *ff_found) } } if(ff_found) *ff_found = _ff_found; - return (long)wp - (long)tag; + return (intptr_t)wp - (intptr_t)tag; } static int read_unsynched(int fd, void *buf, int len, bool *ff_found) @@ -1471,7 +1471,7 @@ static void parse_id3v2(int fd) utf_decode = rb->utf16BEdecode; } } - bytesread -= (long)p - (long)tag; + bytesread -= (intptr_t)p - (intptr_t)tag; tag = p; while ( bytesread > 0 @@ -1529,7 +1529,7 @@ static void parse_id3v2(int fd) lrc_line->old_time_start = -1; if(is_crlf) p += chsiz; } - bytesread -= (long)p - (long)tag; + bytesread -= (intptr_t)p - (intptr_t)tag; tag = p; if(!add_lrc_line(lrc_line, utf8line)) break; @@ -2922,7 +2922,7 @@ enum plugin_status plugin_start(const void* parameter) #endif lrc_buffer = rb->plugin_get_buffer(&lrc_buffer_size); - lrc_buffer = (void *)(((long)lrc_buffer+3)&~3); /* 4 bytes aligned */ + lrc_buffer = ALIGN_UP(lrc_buffer, 4); /* 4 bytes aligned */ lrc_buffer_size = (lrc_buffer_size - 4)&~3; reset_current_data(); diff --git a/apps/plugins/mikmod/mikmod_internals.h b/apps/plugins/mikmod/mikmod_internals.h index acd514ad39..78d7b52045 100644 --- a/apps/plugins/mikmod/mikmod_internals.h +++ b/apps/plugins/mikmod/mikmod_internals.h @@ -703,7 +703,7 @@ extern int Voice_Stopped_internal(SBYTE); /*========== SIMD mixing helper functions =============*/ -#define IS_ALIGNED_16(ptr) (!(((int)(ptr)) & 15)) +#define IS_ALIGNED_16(ptr) (!(((intptr_t)(ptr)) & 15)) /* Altivec helper function */ #if defined HAVE_ALTIVEC diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index b5e982d208..b476fa11b4 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -1547,7 +1547,7 @@ static int load_game( void ) return -1; retval = 0; /* Assume good case */ - if( ( rb->lseek( fd, -sizeof( int ), SEEK_END ) == -((ssize_t)sizeof( int ))-1 ) + if( ( rb->lseek( fd, -(off_t)sizeof( int ), SEEK_END ) == -((ssize_t)sizeof( int ))-1 ) || ( rb->read( fd, &checksum, sizeof( int ) ) < ((ssize_t)sizeof( int )) ) || ( rb->lseek( fd, 0, SEEK_SET ) == -1 ) || save_read( fd, &cur_card, sizeof( int ), &checksum ) diff --git a/apps/plugins/zxbox/snapshot.c b/apps/plugins/zxbox/snapshot.c index 468f46667e..74845bac8e 100644 --- a/apps/plugins/zxbox/snapshot.c +++ b/apps/plugins/zxbox/snapshot.c @@ -362,7 +362,7 @@ static void read_compressed_data(SNFILE *fp, byte *start, unsigned size, GET_DATA(ch); if(p + times > end) { put_msg("Warning: Repeat parameter too large in snapshot"); - times = (int) ((long) end - (long) p); + times = (int) ((intptr_t) end - (intptr_t) p); } for(j = 0; j < times; j++) *p++ = ch; } diff --git a/apps/plugins/zxbox/tapefile.c b/apps/plugins/zxbox/tapefile.c index b030f8dab9..054cae1aba 100644 --- a/apps/plugins/zxbox/tapefile.c +++ b/apps/plugins/zxbox/tapefile.c @@ -216,7 +216,7 @@ static struct tzxblock tzxb[NUMBLOCKID] = { }; -#define PTRDIFF(pe, ps) ((int) (((long) (pe) - (long) (ps)) / sizeof(*pe))) +#define PTRDIFF(pe, ps) pe - ps static char tzxheader[] = {'Z','X','T','a','p','e','!',0x1A}; diff --git a/apps/plugins/zxbox/z80.c b/apps/plugins/zxbox/z80.c index f6f1de7468..683584f471 100644 --- a/apps/plugins/zxbox/z80.c +++ b/apps/plugins/zxbox/z80.c @@ -48,7 +48,7 @@ static byte *a64kmalloc(int num64ksegs) /*exit(1);*/ } - return (byte *) (( (long) bigmem & ~((long) 0xFFFF)) + 0x10000); + return (byte *) (( (intptr_t) bigmem & ~((intptr_t) 0xFFFF)) + 0x10000); } diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index fed8605714..ceb8de00fb 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c @@ -255,7 +255,7 @@ static void kbd_inschar(struct edit_state *state, unsigned short ch) len = strlen(state->text); utf8 = utf8encode(ch, tmp); - j = (long)utf8 - (long)tmp; + j = (intptr_t)utf8 - (intptr_t)tmp; if (len + j < state->buflen) { diff --git a/apps/tagcache.c b/apps/tagcache.c index df252ca0bc..2b3c7212a2 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c @@ -930,7 +930,7 @@ inline static bool str_oneof(const char *str, const char *list) while (*list) { sep = strchr(list, '|'); - l = sep ? (long)sep - (long)list : (int)strlen(list); + l = sep ? (intptr_t)sep - (intptr_t)list : (int)strlen(list); if ((l==len) && !strncasecmp(str, list, len)) return true; list += sep ? l + 1 : l; @@ -2362,7 +2362,7 @@ static bool build_numeric_indices(struct tagcache_header *h, int tmpfd) /* Avoid processing this entry again. */ idx.flag |= FLAG_RESURRECTED; - lseek(masterfd, -sizeof(struct index_entry), SEEK_CUR); + lseek(masterfd, -(off_t)sizeof(struct index_entry), SEEK_CUR); if (ecwrite_index_entry(masterfd, &idx) != sizeof(struct index_entry)) { logf("masterfd writeback fail #1"); @@ -3432,7 +3432,7 @@ static int parse_changelog_line(int line_n, char *buf, void *parameters) struct index_entry idx; char tag_data[TAG_MAXLEN+32]; int idx_id; - long masterfd = (long)parameters; + long masterfd = (long)(intptr_t)parameters; const int import_tags[] = { tag_playcount, tag_rating, tag_playtime, tag_lastplayed, tag_commitid, tag_lastelapsed, tag_lastoffset }; @@ -3526,7 +3526,7 @@ bool tagcache_import_changelog(void) filenametag_fd = open_tag_fd(&tch, tag_filename, false); - fast_readline(clfd, buf, sizeof buf, (long *)masterfd, + fast_readline(clfd, buf, sizeof buf, (void *)(intptr_t)masterfd, parse_changelog_line); close(clfd); @@ -3665,7 +3665,7 @@ static bool delete_entry(long idx_id) } myidx.flag |= FLAG_DELETED; - lseek(masterfd, -sizeof(struct index_entry), SEEK_CUR); + lseek(masterfd, -(off_t)sizeof(struct index_entry), SEEK_CUR); if (ecwrite_index_entry(masterfd, &myidx) != sizeof(struct index_entry)) { logf("delete_entry(): write_error #1"); 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 @@ ****************************************************************************/ #include "string-extra.h" /* memset16() */ +#include #define LBLOCKSIZE (sizeof(long)/2) -#define ROCKBOX_UNALIGNED(X) ((long)X & (sizeof(long) - 1)) +#define ROCKBOX_UNALIGNED(X) ((uintptr_t)X & (sizeof(long) - 1)) #define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) void 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) { do { - memcpy(dst, (void *)((long)dst + lcd_backdrop_offset), + memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset), len * sizeof(fb_data)); dst += step; } @@ -122,7 +122,7 @@ static void ICODE_ATTR clearpixel(fb_data *address) static void ICODE_ATTR clearimgpixel(fb_data *address) { - *address = *(fb_data *)((long)address + lcd_backdrop_offset); + *address = *PTR_ADD(address, lcd_backdrop_offset); } static void ICODE_ATTR flippixel(fb_data *address) @@ -244,7 +244,7 @@ void lcd_fillrect(int x, int y, int width, int height) break; case OPT_COPY: - memcpy(dst, (void *)((long)dst + lcd_backdrop_offset), + memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset), len * sizeof(fb_data)); break; @@ -395,7 +395,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, do { if (!(data & 0x01)) - *dst = *(fb_data *)((long)dst + bo); + *dst = *PTR_ADD(dst, bo); dst += ROW_INC; UPDATE_SRC; @@ -435,7 +435,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, do { *dst = (data & 0x01) ? fg - : *(fb_data *)((long)dst + bo); + : *PTR_ADD(dst, bo); dst += ROW_INC; UPDATE_SRC; } 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) break; case OPT_COPY: - memcpy(dst, (void *)((long)dst + lcd_backdrop_offset), + memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset), width * sizeof(fb_data)); break; 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) lcd_backdrop = backdrop; if (backdrop) { - lcd_backdrop_offset = (long)backdrop - (long)lcd_framebuffer; + lcd_backdrop_offset = (intptr_t)backdrop - (intptr_t)lcd_framebuffer; lcd_fastpixelfuncs = lcd_fastpixelfuncs_backdrop; } 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) wr = q->write++ & QUEUE_LENGTH_MASK; KERNEL_ASSERT((q->write - q->read) <= QUEUE_LENGTH, - "queue_post ovf q=%08lX", (long)q); + "queue_post ovf q=%p", q); q->events[wr].id = id; q->events[wr].data = data; @@ -450,7 +450,7 @@ intptr_t queue_send(struct event_queue *q, long id, intptr_t data) wr = q->write++ & QUEUE_LENGTH_MASK; KERNEL_ASSERT((q->write - q->read) <= QUEUE_LENGTH, - "queue_send ovf q=%08lX", (long)q); + "queue_send ovf q=%p", q); q->events[wr].id = id; 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) else { /* Convert OS handle to fd; the fd now owns it */ - int osfd = _open_osfhandle((long)h, O_RDONLY); + int osfd = _open_osfhandle((intptr_t)h, O_RDONLY); if (osfd >= 0) return osfd; } diff --git a/lib/rbcodec/codecs/liba52/bitstream.c b/lib/rbcodec/codecs/liba52/bitstream.c index 155368f1ed..69dd1dc5b7 100644 --- a/lib/rbcodec/codecs/liba52/bitstream.c +++ b/lib/rbcodec/codecs/liba52/bitstream.c @@ -35,7 +35,7 @@ void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf) { int align; - align = (long)buf & 3; + align = (intptr_t)buf & 3; state->buffer_start = (uint32_t *) (buf - align); state->bits_left = 0; state->current_word = 0; diff --git a/lib/rbcodec/codecs/libtremor/codebook.c b/lib/rbcodec/codecs/libtremor/codebook.c index 7087f0a323..f3ac5a2b7e 100644 --- a/lib/rbcodec/codecs/libtremor/codebook.c +++ b/lib/rbcodec/codecs/libtremor/codebook.c @@ -293,7 +293,7 @@ static long decode_packed_block(codebook *book, oggpack_buffer *b, if(b->endbyte < b->storage - 8) { ogg_uint32_t *ptr; unsigned long bit, bitend; - unsigned long adr; + intptr_t adr; ogg_uint32_t cache = 0; int cachesize = 0; const unsigned int cachemask = (1<dec_firsttablen)-1; @@ -303,7 +303,7 @@ static long decode_packed_block(codebook *book, oggpack_buffer *b, const ogg_uint32_t *book_codelist = book->codelist; const char *book_dec_codelengths = book->dec_codelengths; - adr = (unsigned long)b->ptr; + adr = (intptr_t)b->ptr; bit = (adr&3)*8+b->endbit; ptr = (ogg_uint32_t*)(adr&~3); bitend = ((adr&3)+(b->storage-b->endbyte))*8; @@ -334,7 +334,7 @@ static long decode_packed_block(codebook *book, oggpack_buffer *b, cache >>= l; } - adr=(unsigned long)b->ptr; + adr=(intptr_t)b->ptr; bit-=(adr&3)*8+cachesize; b->endbyte+=bit/8; b->ptr+=bit/8; diff --git a/lib/rbcodec/metadata/id3tags.c b/lib/rbcodec/metadata/id3tags.c index 3492197c40..cda8ce3b7a 100644 --- a/lib/rbcodec/metadata/id3tags.c +++ b/lib/rbcodec/metadata/id3tags.c @@ -191,7 +191,7 @@ static int unsynchronize(char* tag, int len, bool *ff_found) wp++; } } - return (long)wp - (long)tag; + return (intptr_t)wp - (intptr_t)tag; } static int unsynchronize_frame(char* tag, int len) @@ -562,7 +562,7 @@ static int unicode_munge(char* string, char* utf8buf, int *len) { (*len)--; utf8 = iso_decode(str, utf8, -1, *len); *utf8 = 0; - *len = (unsigned long)utf8 - (unsigned long)utf8buf; + *len = (intptr_t)utf8 - (intptr_t)utf8buf; break; case 0x01: /* Unicode with or without BOM */ @@ -619,7 +619,7 @@ static int unicode_munge(char* string, char* utf8buf, int *len) { default: /* Plain old string */ utf8 = iso_decode(str, utf8, -1, *len); *utf8 = 0; - *len = (unsigned long)utf8 - (unsigned long)utf8buf; + *len = (intptr_t)utf8 - (intptr_t)utf8buf; break; } return 0; diff --git a/lib/tlsf/src/tlsf.c b/lib/tlsf/src/tlsf.c index 6866f0c9b0..136c4152c0 100644 --- a/lib/tlsf/src/tlsf.c +++ b/lib/tlsf/src/tlsf.c @@ -54,6 +54,7 @@ #include #include +#include #ifndef TLSF_USE_LOCKS #define TLSF_USE_LOCKS (0) @@ -462,7 +463,7 @@ size_t init_memory_pool(size_t mem_pool_size, void *mem_pool) return -1; } - if (((unsigned long) mem_pool & PTR_MASK)) { + if (((intptr_t) mem_pool & PTR_MASK)) { ERROR_MSG("init_memory_pool (): mem_pool must be aligned to a word\n"); return -1; } @@ -522,7 +523,7 @@ size_t add_new_area(void *area, size_t area_size, void *mem_pool) lb1 = ptr->end; /* Merging the new area with the next physically contigous one */ - if ((unsigned long) ib1 == (unsigned long) lb0 + BHDR_OVERHEAD) { + if ((uintptr_t) ib1 == (uintptr_t) lb0 + BHDR_OVERHEAD) { if (tlsf->area_head == ptr) { tlsf->area_head = ptr->next; ptr = ptr->next; @@ -543,7 +544,7 @@ size_t add_new_area(void *area, size_t area_size, void *mem_pool) /* Merging the new area with the previous physically contigous one */ - if ((unsigned long) lb1->ptr.buffer == (unsigned long) ib0) { + if ((intptr_t) lb1->ptr.buffer == (intptr_t) ib0) { if (tlsf->area_head == ptr) { tlsf->area_head = ptr->next; ptr = ptr->next; -- cgit