diff options
Diffstat (limited to 'board/esd/common/lcd.c')
-rw-r--r-- | board/esd/common/lcd.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/board/esd/common/lcd.c b/board/esd/common/lcd.c index 05c76ff..0edc083 100644 --- a/board/esd/common/lcd.c +++ b/board/esd/common/lcd.c @@ -81,7 +81,7 @@ void lcd_bmp(uchar *logo_bmp) uchar *ptr; ushort *ptr2; ushort val; - unsigned char *dst; + unsigned char *dst = NULL; int x, y; int width, height, bpp, colors, line_size; int header_size; @@ -89,7 +89,6 @@ void lcd_bmp(uchar *logo_bmp) unsigned char r, g, b; BITMAPINFOHEADER *bm_info; ulong len; - int do_free = 0; /* * Check for bmp mark 'BM' @@ -99,12 +98,18 @@ void lcd_bmp(uchar *logo_bmp) /* * Decompress bmp image */ - len = CFG_LCD_LOGO_MAX_SIZE; - dst = malloc(CFG_LCD_LOGO_MAX_SIZE); - do_free = 1; - if (gunzip(dst, CFG_LCD_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) { + len = CFG_VIDEO_LOGO_MAX_SIZE; + dst = malloc(CFG_VIDEO_LOGO_MAX_SIZE); + if (dst == NULL) { + printf("Error: malloc in gunzip failed!\n"); return; } + if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) { + return; + } + if (len == CFG_VIDEO_LOGO_MAX_SIZE) { + printf("Image could be truncated (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n"); + } /* * Check for bmp mark 'BM' @@ -147,7 +152,9 @@ void lcd_bmp(uchar *logo_bmp) break; default: printf("LCD: Unknown bpp (%d) im image!\n", bpp); - free(dst); + if ((dst != NULL) && (dst != (uchar *)logo_bmp)) { + free(dst); + } return; } printf(" (%d*%d, %dbpp)\n", width, height, bpp); @@ -205,7 +212,7 @@ void lcd_bmp(uchar *logo_bmp) } } - if (do_free) { + if ((dst != NULL) && (dst != (uchar *)logo_bmp)) { free(dst); } } |