big endian fix
This commit is contained in:
parent
7ffee77e6d
commit
196bfa81d6
@ -335,7 +335,9 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, char* filename, int* palette)
|
|||||||
char type1[3];
|
char type1[3];
|
||||||
char* data;
|
char* data;
|
||||||
struct xrdp_bmp_header header;
|
struct xrdp_bmp_header header;
|
||||||
|
struct stream* s;
|
||||||
|
|
||||||
|
s = 0;
|
||||||
fd = g_file_open(filename);
|
fd = g_file_open(filename);
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
{
|
{
|
||||||
@ -355,9 +357,23 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, char* filename, int* palette)
|
|||||||
g_file_read(fd, (char*)&size, 4);
|
g_file_read(fd, (char*)&size, 4);
|
||||||
/* read bmp header */
|
/* read bmp header */
|
||||||
g_file_seek(fd, 14);
|
g_file_seek(fd, 14);
|
||||||
g_file_read(fd, (char*)&header, sizeof(header));
|
make_stream(s);
|
||||||
|
init_stream(s, 8192);
|
||||||
|
g_file_read(fd, s->data, 40); /* size better be 40 */
|
||||||
|
in_uint32_le(s, header.size);
|
||||||
|
in_uint32_le(s, header.image_width);
|
||||||
|
in_uint32_le(s, header.image_height);
|
||||||
|
in_uint16_le(s, header.planes);
|
||||||
|
in_uint16_le(s, header.bit_count);
|
||||||
|
in_uint32_le(s, header.compression);
|
||||||
|
in_uint32_le(s, header.image_size);
|
||||||
|
in_uint32_le(s, header.x_pels_per_meter);
|
||||||
|
in_uint32_le(s, header.y_pels_per_meter);
|
||||||
|
in_uint32_le(s, header.clr_used);
|
||||||
|
in_uint32_le(s, header.clr_important);
|
||||||
if (header.bit_count != 8 && header.bit_count != 24)
|
if (header.bit_count != 8 && header.bit_count != 24)
|
||||||
{
|
{
|
||||||
|
free_stream(s);
|
||||||
g_file_close(fd);
|
g_file_close(fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -369,7 +385,12 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, char* filename, int* palette)
|
|||||||
{
|
{
|
||||||
/* read palette */
|
/* read palette */
|
||||||
g_file_seek(fd, 14 + header.size);
|
g_file_seek(fd, 14 + header.size);
|
||||||
g_file_read(fd, (char*)palette1, 256 * sizeof(int));
|
init_stream(s, 8192);
|
||||||
|
g_file_read(fd, s->data, 256 * sizeof(int));
|
||||||
|
for (i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
in_uint32_le(s, palette1[i]);
|
||||||
|
}
|
||||||
/* read data */
|
/* read data */
|
||||||
xrdp_bitmap_resize(self, header.image_width, header.image_height);
|
xrdp_bitmap_resize(self, header.image_width, header.image_height);
|
||||||
data = (char*)g_malloc(header.image_width * header.image_height, 1);
|
data = (char*)g_malloc(header.image_width * header.image_height, 1);
|
||||||
@ -412,6 +433,7 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, char* filename, int* palette)
|
|||||||
}
|
}
|
||||||
g_file_close(fd);
|
g_file_close(fd);
|
||||||
}
|
}
|
||||||
|
free_stream(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user