mirror of
https://github.com/sheumann/hush.git
synced 2024-10-27 07:28:31 +00:00
- PPMs can have comments in the header.
Thanks to Denys for pointing that out. (~+7b)
This commit is contained in:
parent
8ad78e1ec7
commit
051fdb9e7a
@ -216,36 +216,36 @@ static void fb_drawprogressbar(unsigned percent)
|
|||||||
*/
|
*/
|
||||||
static void fb_drawimage(void)
|
static void fb_drawimage(void)
|
||||||
{
|
{
|
||||||
RESERVE_CONFIG_BUFFER(head, 256);
|
char *head, *ptr;
|
||||||
RESERVE_CONFIG_BUFFER(s, 80);
|
FILE *theme_file;
|
||||||
int theme_file;
|
|
||||||
unsigned char *pixline;
|
unsigned char *pixline;
|
||||||
unsigned i, j, width, height, line_size;
|
unsigned i, j, width, height, line_size;
|
||||||
|
|
||||||
memset(head, 0, sizeof(head));
|
theme_file = xfopen_stdin(G.image_filename);
|
||||||
theme_file = open_or_warn_stdin(G.image_filename);
|
head = xmalloc(256);
|
||||||
|
|
||||||
// parse ppm header
|
// parse ppm header
|
||||||
while (1) {
|
while (1) {
|
||||||
if (safe_read(theme_file, s, sizeof(s)) <= 0)
|
if (fgets(head, 256, theme_file) == NULL
|
||||||
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
/* do not overrun the buffer */
|
||||||
|
|| strlen(bb_common_bufsiz1) >= sizeof(bb_common_bufsiz1) - 256)
|
||||||
if (s[0] == '#')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strlen(head) + strlen(s) >= sizeof(head))
|
|
||||||
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
|
||||||
|
|
||||||
strcat(head, s);
|
|
||||||
if (head[0] != 'P' || head[1] != '6')
|
|
||||||
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
||||||
|
|
||||||
|
ptr = memchr(head, '#', 256);
|
||||||
|
if (ptr != NULL)
|
||||||
|
*ptr = 0; /* ignore comments */
|
||||||
|
strcat(bb_common_bufsiz1, head);
|
||||||
// width, height, max_color_val
|
// width, height, max_color_val
|
||||||
if (sscanf(head, "P6 %u %u %u", &width, &height, &i) == 3)
|
if (sscanf(bb_common_bufsiz1, "P6 %u %u %u", &width, &height, &i) == 3
|
||||||
|
&& i <= 255)
|
||||||
break;
|
break;
|
||||||
// TODO: i must be <= 255!
|
/* If we do not find a signature throughout the whole file then
|
||||||
|
we will diagnose this via EOF on read in the head of the loop. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ENABLE_FEATURE_CLEAN_UP)
|
||||||
|
free(head);
|
||||||
|
|
||||||
line_size = width*3;
|
line_size = width*3;
|
||||||
if (width > G.scr_var.xres)
|
if (width > G.scr_var.xres)
|
||||||
width = G.scr_var.xres;
|
width = G.scr_var.xres;
|
||||||
@ -257,7 +257,7 @@ static void fb_drawimage(void)
|
|||||||
unsigned char *pixel = pixline;
|
unsigned char *pixel = pixline;
|
||||||
DATA *src = (DATA *)(G.addr + j * G.scr_fix.line_length);
|
DATA *src = (DATA *)(G.addr + j * G.scr_fix.line_length);
|
||||||
|
|
||||||
if (safe_read(theme_file, pixline, line_size) != line_size)
|
if (fread(pixline, 1, line_size, theme_file) != line_size)
|
||||||
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
||||||
for (i = 0; i < width; i++) {
|
for (i = 0; i < width; i++) {
|
||||||
unsigned thispix;
|
unsigned thispix;
|
||||||
@ -268,12 +268,9 @@ static void fb_drawimage(void)
|
|||||||
pixel += 3;
|
pixel += 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ENABLE_FEATURE_CLEAN_UP) {
|
if (ENABLE_FEATURE_CLEAN_UP)
|
||||||
free(pixline);
|
free(pixline);
|
||||||
RELEASE_CONFIG_BUFFER(s);
|
fclose(theme_file);
|
||||||
RELEASE_CONFIG_BUFFER(head);
|
|
||||||
}
|
|
||||||
close(theme_file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user