diff options
Diffstat (limited to '')
32 files changed, 866 insertions, 595 deletions
diff --git a/libraries/evas/src/modules/loaders/Makefile.in b/libraries/evas/src/modules/loaders/Makefile.in index 2120a33..454dcd8 100644 --- a/libraries/evas/src/modules/loaders/Makefile.in +++ b/libraries/evas/src/modules/loaders/Makefile.in | |||
@@ -49,7 +49,7 @@ host_triplet = @host@ | |||
49 | @BUILD_LOADER_WBMP_TRUE@@EVAS_STATIC_BUILD_WBMP_FALSE@am__append_14 = wbmp | 49 | @BUILD_LOADER_WBMP_TRUE@@EVAS_STATIC_BUILD_WBMP_FALSE@am__append_14 = wbmp |
50 | @BUILD_LOADER_XPM_TRUE@@EVAS_STATIC_BUILD_XPM_FALSE@am__append_15 = xpm | 50 | @BUILD_LOADER_XPM_TRUE@@EVAS_STATIC_BUILD_XPM_FALSE@am__append_15 = xpm |
51 | subdir = src/modules/loaders | 51 | subdir = src/modules/loaders |
52 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO | 52 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
53 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 53 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
54 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 54 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ |
55 | $(top_srcdir)/m4/efl_coverage.m4 \ | 55 | $(top_srcdir)/m4/efl_coverage.m4 \ |
@@ -222,8 +222,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
222 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 222 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
223 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 223 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
224 | PKG_CONFIG = @PKG_CONFIG@ | 224 | PKG_CONFIG = @PKG_CONFIG@ |
225 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
226 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
227 | PNG_CFLAGS = @PNG_CFLAGS@ | 225 | PNG_CFLAGS = @PNG_CFLAGS@ |
228 | PNG_LIBS = @PNG_LIBS@ | 226 | PNG_LIBS = @PNG_LIBS@ |
229 | RANLIB = @RANLIB@ | 227 | RANLIB = @RANLIB@ |
@@ -240,6 +238,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
240 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 238 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
241 | VERSION = @VERSION@ | 239 | VERSION = @VERSION@ |
242 | VMAJ = @VMAJ@ | 240 | VMAJ = @VMAJ@ |
241 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
242 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
243 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 243 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
244 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 244 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
245 | XCB_CFLAGS = @XCB_CFLAGS@ | 245 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -321,6 +321,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
321 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 321 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
322 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 322 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
323 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 323 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
324 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
325 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
326 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
327 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
324 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 328 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
325 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 329 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
326 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 330 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/TODO b/libraries/evas/src/modules/loaders/TODO deleted file mode 100644 index 3b82543..0000000 --- a/libraries/evas/src/modules/loaders/TODO +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | DONE -> bmp tga ico | ||
2 | id3 gz bz2 <- extraction loaders | ||
3 | lbm <- aaah amiga days | ||
4 | ani <- why> | ||
5 | |||
diff --git a/libraries/evas/src/modules/loaders/bmp/Makefile.in b/libraries/evas/src/modules/loaders/bmp/Makefile.in index f2c3e20..943fb74 100644 --- a/libraries/evas/src/modules/loaders/bmp/Makefile.in +++ b/libraries/evas/src/modules/loaders/bmp/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/bmp/evas_image_load_bmp.c b/libraries/evas/src/modules/loaders/bmp/evas_image_load_bmp.c index 38e3680..6d15783 100644 --- a/libraries/evas/src/modules/loaders/bmp/evas_image_load_bmp.c +++ b/libraries/evas/src/modules/loaders/bmp/evas_image_load_bmp.c | |||
@@ -21,50 +21,91 @@ static Evas_Image_Load_Func evas_image_load_bmp_func = | |||
21 | EINA_TRUE, | 21 | EINA_TRUE, |
22 | evas_image_load_file_head_bmp, | 22 | evas_image_load_file_head_bmp, |
23 | evas_image_load_file_data_bmp, | 23 | evas_image_load_file_data_bmp, |
24 | NULL | 24 | NULL, |
25 | EINA_FALSE | ||
25 | }; | 26 | }; |
26 | 27 | ||
27 | static int | 28 | static Eina_Bool |
28 | read_short(FILE *file, short *ret) | 29 | read_short(unsigned char *map, size_t length, size_t *position, short *ret) |
29 | { | 30 | { |
30 | unsigned char b[2]; | 31 | unsigned char b[2]; |
31 | if (fread(b, sizeof(unsigned char), 2, file) != 2) return 0; | 32 | |
33 | if (*position + 2 > length) return EINA_FALSE; | ||
34 | b[0] = map[(*position)++]; | ||
35 | b[1] = map[(*position)++]; | ||
32 | *ret = (b[1] << 8) | b[0]; | 36 | *ret = (b[1] << 8) | b[0]; |
33 | return 1; | 37 | return EINA_TRUE; |
34 | } | 38 | } |
35 | 39 | ||
36 | static int | 40 | static Eina_Bool |
37 | read_ushort(FILE *file, unsigned short *ret) | 41 | read_ushort(unsigned char *map, size_t length, size_t *position, unsigned short *ret) |
38 | { | 42 | { |
39 | unsigned char b[2]; | 43 | unsigned char b[2]; |
40 | if (fread(b, sizeof(unsigned char), 2, file) != 2) return 0; | 44 | |
45 | if (*position + 2 > length) return EINA_FALSE; | ||
46 | b[0] = map[(*position)++]; | ||
47 | b[1] = map[(*position)++]; | ||
41 | *ret = (b[1] << 8) | b[0]; | 48 | *ret = (b[1] << 8) | b[0]; |
42 | return 1; | 49 | return EINA_TRUE; |
43 | } | 50 | } |
44 | 51 | ||
45 | static int | 52 | static Eina_Bool |
46 | read_int(FILE *file, int *ret) | 53 | read_int(unsigned char *map, size_t length, size_t *position, int *ret) |
47 | { | 54 | { |
48 | unsigned char b[4]; | 55 | unsigned char b[4]; |
49 | if (fread(b, sizeof(unsigned char), 4, file) != 4) return 0; | 56 | int i; |
57 | |||
58 | if (*position + 4 > length) return EINA_FALSE; | ||
59 | for (i = 0; i < 4; i++) | ||
60 | b[i] = map[(*position)++]; | ||
50 | *ret = ARGB_JOIN(b[3], b[2], b[1], b[0]); | 61 | *ret = ARGB_JOIN(b[3], b[2], b[1], b[0]); |
51 | return 1; | 62 | return EINA_TRUE; |
52 | } | 63 | } |
53 | 64 | ||
54 | static int | 65 | static Eina_Bool |
55 | read_uint(FILE *file, unsigned int *ret) | 66 | read_uint(unsigned char *map, size_t length, size_t *position, unsigned int *ret) |
56 | { | 67 | { |
57 | unsigned char b[4]; | 68 | unsigned char b[4]; |
58 | if (fread(b, sizeof(unsigned char), 4, file) != 4) return 0; | 69 | int i; |
70 | |||
71 | if (*position + 4 > length) return EINA_FALSE; | ||
72 | for (i = 0; i < 4; i++) | ||
73 | b[i] = map[(*position)++]; | ||
59 | *ret = ARGB_JOIN(b[3], b[2], b[1], b[0]); | 74 | *ret = ARGB_JOIN(b[3], b[2], b[1], b[0]); |
60 | return 1; | 75 | return EINA_TRUE; |
76 | } | ||
77 | |||
78 | static Eina_Bool | ||
79 | read_uchar(unsigned char *map, size_t length, size_t *position, unsigned char *ret) | ||
80 | { | ||
81 | if (*position + 1 > length) return EINA_FALSE; | ||
82 | *ret = map[(*position)++]; | ||
83 | return EINA_TRUE; | ||
84 | } | ||
85 | |||
86 | static Eina_Bool | ||
87 | read_skip(size_t length, size_t *position, int skip) | ||
88 | { | ||
89 | if (*position + skip > length) return EINA_FALSE; | ||
90 | *position += skip; | ||
91 | return EINA_TRUE; | ||
92 | } | ||
93 | |||
94 | static Eina_Bool | ||
95 | read_mem(unsigned char *map, size_t length, size_t *position, void *buffer, int size) | ||
96 | { | ||
97 | if (*position + size > length) return EINA_FALSE; | ||
98 | memcpy(buffer, map + *position, size); | ||
99 | *position += size; | ||
100 | return EINA_TRUE; | ||
61 | } | 101 | } |
62 | 102 | ||
63 | static Eina_Bool | 103 | static Eina_Bool |
64 | evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) | 104 | evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) |
65 | { | 105 | { |
66 | FILE *f; | 106 | Eina_File *f; |
67 | char buf[4096]; | 107 | void *map = NULL; |
108 | size_t position = 0; | ||
68 | char hasa = 0; | 109 | char hasa = 0; |
69 | int w = 0, h = 0, planes = 0, bit_count = 0, | 110 | int w = 0, h = 0, planes = 0, bit_count = 0, |
70 | image_size = 0, comp = 0, hdpi = 0, vdpi = 0, | 111 | image_size = 0, comp = 0, hdpi = 0, vdpi = 0, |
@@ -76,7 +117,7 @@ evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key | |||
76 | unsigned int bmpsize; | 117 | unsigned int bmpsize; |
77 | unsigned short res1, res2; | 118 | unsigned short res1, res2; |
78 | 119 | ||
79 | f = fopen(file, "rb"); | 120 | f = eina_file_open(file, 0); |
80 | if (!f) | 121 | if (!f) |
81 | { | 122 | { |
82 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 123 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
@@ -84,84 +125,85 @@ evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key | |||
84 | } | 125 | } |
85 | 126 | ||
86 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 127 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
87 | fseek(f, 0, SEEK_END); | 128 | fsize = eina_file_size_get(f); |
88 | fsize = ftell(f); | ||
89 | fseek(f, 0, SEEK_SET); | ||
90 | if (fsize < 2) goto close_file; | 129 | if (fsize < 2) goto close_file; |
91 | 130 | ||
92 | if (fread(buf, 2, 1, f) != 1) goto close_file; | 131 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); |
93 | if (strncmp(buf, "BM", 2)) goto close_file; // magic number | 132 | if (!map) goto close_file; |
133 | |||
134 | if (strncmp(map, "BM", 2)) goto close_file; // magic number | ||
135 | position += 2; | ||
94 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 136 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
95 | if (!read_uint(f, &bmpsize)) goto close_file; | 137 | if (!read_uint(map, fsize, &position, &bmpsize)) goto close_file; |
96 | if (!read_ushort(f, &res1)) goto close_file; | 138 | if (!read_ushort(map, fsize, &position, &res1)) goto close_file; |
97 | if (!read_ushort(f, &res2)) goto close_file; | 139 | if (!read_ushort(map, fsize, &position, &res2)) goto close_file; |
98 | if (!read_uint(f, &offset)) goto close_file; | 140 | if (!read_uint(map, fsize, &position, &offset)) goto close_file; |
99 | if (!read_uint(f, &head_size)) goto close_file; | 141 | if (!read_uint(map, fsize, &position, &head_size)) goto close_file; |
100 | if (head_size == 12) // OS/2 V1 + Windows 3.0 | 142 | if (head_size == 12) // OS/2 V1 + Windows 3.0 |
101 | { | 143 | { |
102 | short tmp; | 144 | short tmp; |
103 | 145 | ||
104 | if (!read_short(f, &tmp)) goto close_file; | 146 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
105 | w = tmp; // width | 147 | w = tmp; // width |
106 | if (!read_short(f, &tmp)) goto close_file; | 148 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
107 | h = tmp; // height | 149 | h = tmp; // height |
108 | if (!read_short(f, &tmp)) goto close_file; | 150 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
109 | planes = tmp; // must be 1 | 151 | planes = tmp; // must be 1 |
110 | if (!read_short(f, &tmp)) goto close_file; | 152 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
111 | bit_count = tmp; // bits per pixel: 1, 4, 8 & 24 | 153 | bit_count = tmp; // bits per pixel: 1, 4, 8 & 24 |
112 | } | 154 | } |
113 | else if (head_size == 64) // OS/2 V2 | 155 | else if (head_size == 64) // OS/2 V2 |
114 | { | 156 | { |
115 | short tmp; | 157 | short tmp; |
116 | int tmp2; | 158 | int tmp2; |
117 | 159 | ||
118 | if (!read_int(f, &tmp2)) goto close_file; | 160 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
119 | w = tmp2; // width | 161 | w = tmp2; // width |
120 | if (!read_int(f, &tmp2)) goto close_file; | 162 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
121 | h = tmp2; // height | 163 | h = tmp2; // height |
122 | if (!read_short(f, &tmp)) goto close_file; | 164 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
123 | planes = tmp; // must be 1 | 165 | planes = tmp; // must be 1 |
124 | if (!read_short(f, &tmp)) goto close_file; | 166 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
125 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 167 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
126 | if (!read_int(f, &tmp2)) goto close_file; | 168 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
127 | comp = tmp2; // compression method | 169 | comp = tmp2; // compression method |
128 | if (!read_int(f, &tmp2)) goto close_file; | 170 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
129 | image_size = tmp2; // bitmap data size | 171 | image_size = tmp2; // bitmap data size |
130 | if (!read_int(f, &tmp2)) goto close_file; | 172 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
131 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 173 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
132 | if (!read_int(f, &tmp2)) goto close_file; | 174 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
133 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 175 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
134 | if (!read_int(f, &tmp2)) goto close_file; | 176 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
135 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 177 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
136 | if (!read_int(f, &tmp2)) goto close_file; | 178 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
137 | important_colors = tmp2; // number of important colors - 0 if all | 179 | important_colors = tmp2; // number of important colors - 0 if all |
138 | if (fread(buf, 24, 1, f) != 1) goto close_file; // skip unused header | 180 | if (!read_skip(fsize, &position, 24)) goto close_file; // skip unused header |
139 | if (image_size == 0) image_size = fsize - offset; | 181 | if (image_size == 0) image_size = fsize - offset; |
140 | } | 182 | } |
141 | else if (head_size == 40) // Windows 3.0 + (v3) | 183 | else if (head_size == 40) // Windows 3.0 + (v3) |
142 | { | 184 | { |
143 | short tmp; | 185 | short tmp; |
144 | int tmp2; | 186 | int tmp2; |
145 | 187 | ||
146 | if (!read_int(f, &tmp2)) goto close_file; | 188 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
147 | w = tmp2; // width | 189 | w = tmp2; // width |
148 | if (!read_int(f, &tmp2)) goto close_file; | 190 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
149 | h = tmp2; // height | 191 | h = tmp2; // height |
150 | if (!read_short(f, &tmp)) goto close_file; | 192 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
151 | planes = tmp; // must be 1 | 193 | planes = tmp; // must be 1 |
152 | if (!read_short(f, &tmp)) goto close_file; | 194 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
153 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 195 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
154 | if (!read_int(f, &tmp2)) goto close_file; | 196 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
155 | comp = tmp2; // compression method | 197 | comp = tmp2; // compression method |
156 | if (!read_int(f, &tmp2)) goto close_file; | 198 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
157 | image_size = tmp2; // bitmap data size | 199 | image_size = tmp2; // bitmap data size |
158 | if (!read_int(f, &tmp2)) goto close_file; | 200 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
159 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 201 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
160 | if (!read_int(f, &tmp2)) goto close_file; | 202 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
161 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 203 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
162 | if (!read_int(f, &tmp2)) goto close_file; | 204 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
163 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 205 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
164 | if (!read_int(f, &tmp2)) goto close_file; | 206 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
165 | important_colors = tmp2; // number of important colors - 0 if all | 207 | important_colors = tmp2; // number of important colors - 0 if all |
166 | if (image_size == 0) image_size = fsize - offset; | 208 | if (image_size == 0) image_size = fsize - offset; |
167 | if ((comp == 0) && (bit_count == 32)) hasa = 1; // GIMP seems to store it this way | 209 | if ((comp == 0) && (bit_count == 32)) hasa = 1; // GIMP seems to store it this way |
@@ -170,37 +212,37 @@ evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key | |||
170 | { | 212 | { |
171 | short tmp; | 213 | short tmp; |
172 | int tmp2; | 214 | int tmp2; |
173 | 215 | ||
174 | if (!read_int(f, &tmp2)) goto close_file; | 216 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
175 | w = tmp2; // width | 217 | w = tmp2; // width |
176 | if (!read_int(f, &tmp2)) goto close_file; | 218 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
177 | h = tmp2; // height | 219 | h = tmp2; // height |
178 | if (!read_short(f, &tmp)) goto close_file; | 220 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
179 | planes = tmp; // must be 1 | 221 | planes = tmp; // must be 1 |
180 | if (!read_short(f, &tmp)) goto close_file; | 222 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
181 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 223 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
182 | if (!read_int(f, &tmp2)) goto close_file; | 224 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
183 | comp = tmp2; // compression method | 225 | comp = tmp2; // compression method |
184 | if (!read_int(f, &tmp2)) goto close_file; | 226 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
185 | image_size = tmp2; // bitmap data size | 227 | image_size = tmp2; // bitmap data size |
186 | if (!read_int(f, &tmp2)) goto close_file; | 228 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
187 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 229 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
188 | if (!read_int(f, &tmp2)) goto close_file; | 230 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
189 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 231 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
190 | if (!read_int(f, &tmp2)) goto close_file; | 232 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
191 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 233 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
192 | if (!read_int(f, &tmp2)) goto close_file; | 234 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
193 | important_colors = tmp2; // number of important colors - 0 if all | 235 | important_colors = tmp2; // number of important colors - 0 if all |
194 | if (!read_int(f, &tmp2)) goto close_file; | 236 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
195 | rmask = tmp2; // red mask | 237 | rmask = tmp2; // red mask |
196 | if (!read_int(f, &tmp2)) goto close_file; | 238 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
197 | gmask = tmp2; // green mask | 239 | gmask = tmp2; // green mask |
198 | if (!read_int(f, &tmp2)) goto close_file; | 240 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
199 | bmask = tmp2; // blue mask | 241 | bmask = tmp2; // blue mask |
200 | if (!read_int(f, &tmp2)) goto close_file; | 242 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
201 | amask = tmp2; // alpha mask | 243 | amask = tmp2; // alpha mask |
202 | if (fread(buf, 36, 1, f) != 1) goto close_file; // skip unused cie | 244 | if (!read_skip(fsize, &position, 36)) goto close_file; // skip unused cie |
203 | if (fread(buf, 12, 1, f) != 1) goto close_file; // skip unused gamma | 245 | if (!read_skip(fsize, &position, 12)) goto close_file; // skip unused gamma |
204 | if (image_size == 0) image_size = fsize - offset; | 246 | if (image_size == 0) image_size = fsize - offset; |
205 | if ((amask) && (bit_count == 32)) hasa = 1; | 247 | if ((amask) && (bit_count == 32)) hasa = 1; |
206 | } | 248 | } |
@@ -208,38 +250,38 @@ evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key | |||
208 | { | 250 | { |
209 | short tmp; | 251 | short tmp; |
210 | int tmp2; | 252 | int tmp2; |
211 | 253 | ||
212 | if (!read_int(f, &tmp2)) goto close_file; | 254 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
213 | w = tmp2; // width | 255 | w = tmp2; // width |
214 | if (!read_int(f, &tmp2)) goto close_file; | 256 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
215 | h = tmp2; // height | 257 | h = tmp2; // height |
216 | if (!read_short(f, &tmp)) goto close_file; | 258 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
217 | planes = tmp; // must be 1 | 259 | planes = tmp; // must be 1 |
218 | if (!read_short(f, &tmp)) goto close_file; | 260 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
219 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 261 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
220 | if (!read_int(f, &tmp2)) goto close_file; | 262 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
221 | comp = tmp2; // compression method | 263 | comp = tmp2; // compression method |
222 | if (!read_int(f, &tmp2)) goto close_file; | 264 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
223 | image_size = tmp2; // bitmap data size | 265 | image_size = tmp2; // bitmap data size |
224 | if (!read_int(f, &tmp2)) goto close_file; | 266 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
225 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 267 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
226 | if (!read_int(f, &tmp2)) goto close_file; | 268 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
227 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 269 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
228 | if (!read_int(f, &tmp2)) goto close_file; | 270 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
229 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 271 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
230 | if (!read_int(f, &tmp2)) goto close_file; | 272 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
231 | important_colors = tmp2; // number of important colors - 0 if all | 273 | important_colors = tmp2; // number of important colors - 0 if all |
232 | if (!read_int(f, &tmp2)) goto close_file; | 274 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
233 | rmask = tmp2; // red mask | 275 | rmask = tmp2; // red mask |
234 | if (!read_int(f, &tmp2)) goto close_file; | 276 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
235 | gmask = tmp2; // green mask | 277 | gmask = tmp2; // green mask |
236 | if (!read_int(f, &tmp2)) goto close_file; | 278 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
237 | bmask = tmp2; // blue mask | 279 | bmask = tmp2; // blue mask |
238 | if (!read_int(f, &tmp2)) goto close_file; | 280 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
239 | amask = tmp2; // alpha mask | 281 | amask = tmp2; // alpha mask |
240 | if (fread(buf, 36, 1, f) != 1) goto close_file; // skip unused cie | 282 | if (!read_skip(fsize, &position, 36)) goto close_file; // skip unused cie |
241 | if (fread(buf, 12, 1, f) != 1) goto close_file; // skip unused gamma | 283 | if (!read_skip(fsize, &position, 12)) goto close_file; // skip unused gamma |
242 | if (fread(buf, 16, 1, f) != 1) goto close_file; // skip others | 284 | if (!read_skip(fsize, &position, 16)) goto close_file; // skip others |
243 | if (image_size == 0) image_size = fsize - offset; | 285 | if (image_size == 0) image_size = fsize - offset; |
244 | if ((amask) && (bit_count == 32)) hasa = 1; | 286 | if ((amask) && (bit_count == 32)) hasa = 1; |
245 | } | 287 | } |
@@ -251,7 +293,7 @@ evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key | |||
251 | h = -h; | 293 | h = -h; |
252 | right_way_up = 1; | 294 | right_way_up = 1; |
253 | } | 295 | } |
254 | 296 | ||
255 | if ((w < 1) || (h < 1) || (w > IMG_MAX_SIZE) || (h > IMG_MAX_SIZE) || | 297 | if ((w < 1) || (h < 1) || (w > IMG_MAX_SIZE) || (h > IMG_MAX_SIZE) || |
256 | IMG_TOO_BIG(w, h)) | 298 | IMG_TOO_BIG(w, h)) |
257 | { | 299 | { |
@@ -327,21 +369,24 @@ evas_image_load_file_head_bmp(Image_Entry *ie, const char *file, const char *key | |||
327 | ie->w = w; | 369 | ie->w = w; |
328 | ie->h = h; | 370 | ie->h = h; |
329 | if (hasa) ie->flags.alpha = 1; | 371 | if (hasa) ie->flags.alpha = 1; |
330 | 372 | ||
331 | fclose(f); | 373 | eina_file_map_free(f, map); |
374 | eina_file_close(f); | ||
332 | *error = EVAS_LOAD_ERROR_NONE; | 375 | *error = EVAS_LOAD_ERROR_NONE; |
333 | return EINA_TRUE; | 376 | return EINA_TRUE; |
334 | 377 | ||
335 | close_file: | 378 | close_file: |
336 | fclose(f); | 379 | if (map) eina_file_map_free(f, map); |
380 | eina_file_close(f); | ||
337 | return EINA_FALSE; | 381 | return EINA_FALSE; |
338 | } | 382 | } |
339 | 383 | ||
340 | static Eina_Bool | 384 | static Eina_Bool |
341 | evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) | 385 | evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) |
342 | { | 386 | { |
343 | FILE *f; | 387 | Eina_File *f; |
344 | char buf[4096]; | 388 | void *map = NULL; |
389 | size_t position = 0; | ||
345 | unsigned char *buffer = NULL, *buffer_end = NULL, *p; | 390 | unsigned char *buffer = NULL, *buffer_end = NULL, *p; |
346 | char hasa = 0; | 391 | char hasa = 0; |
347 | int x = 0, y = 0, w = 0, h = 0, planes = 0, bit_count = 0, image_size = 0, | 392 | int x = 0, y = 0, w = 0, h = 0, planes = 0, bit_count = 0, image_size = 0, |
@@ -361,96 +406,96 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
361 | int row_size = 0; /* Row size is rounded up to a multiple of 4bytes */ | 406 | int row_size = 0; /* Row size is rounded up to a multiple of 4bytes */ |
362 | int read_line = 0; /* total read line */ | 407 | int read_line = 0; /* total read line */ |
363 | 408 | ||
364 | 409 | f = eina_file_open(file, 0); | |
365 | f = fopen(file, "rb"); | ||
366 | if (!f) | 410 | if (!f) |
367 | { | 411 | { |
368 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 412 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
369 | return EINA_FALSE; | 413 | return EINA_FALSE; |
370 | } | 414 | } |
371 | 415 | ||
372 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 416 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
373 | fseek(f, 0, SEEK_END); | 417 | fsize = eina_file_size_get(f); |
374 | fsize = ftell(f); | ||
375 | fseek(f, 0, SEEK_SET); | ||
376 | if (fsize < 2) goto close_file; | 418 | if (fsize < 2) goto close_file; |
419 | |||
420 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); | ||
421 | if (!map) goto close_file; | ||
377 | 422 | ||
378 | if (fread(buf, 2, 1, f) != 1) goto close_file; | 423 | if (strncmp(map, "BM", 2)) goto close_file; // magic number |
379 | if (strncmp(buf, "BM", 2)) goto close_file; // magic number | 424 | position += 2; |
380 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 425 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
381 | if (!read_uint(f, &bmpsize)) goto close_file; | 426 | if (!read_uint(map, fsize, &position, &bmpsize)) goto close_file; |
382 | if (!read_ushort(f, &res1)) goto close_file; | 427 | if (!read_ushort(map, fsize, &position, &res1)) goto close_file; |
383 | if (!read_ushort(f, &res2)) goto close_file; | 428 | if (!read_ushort(map, fsize, &position, &res2)) goto close_file; |
384 | if (!read_uint(f, &offset)) goto close_file; | 429 | if (!read_uint(map, fsize, &position, &offset)) goto close_file; |
385 | if (!read_uint(f, &head_size)) goto close_file; | 430 | if (!read_uint(map, fsize, &position, &head_size)) goto close_file; |
386 | image_size = fsize - offset; | 431 | image_size = fsize - offset; |
387 | if (image_size < 1) goto close_file; | 432 | if (image_size < 1) goto close_file; |
388 | 433 | ||
389 | if (head_size == 12) // OS/2 V1 + Windows 3.0 | 434 | if (head_size == 12) // OS/2 V1 + Windows 3.0 |
390 | { | 435 | { |
391 | short tmp; | 436 | short tmp; |
392 | 437 | ||
393 | if (!read_short(f, &tmp)) goto close_file; | 438 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
394 | w = tmp; // width | 439 | w = tmp; // width |
395 | if (!read_short(f, &tmp)) goto close_file; | 440 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
396 | h = tmp; // height | 441 | h = tmp; // height |
397 | if (!read_short(f, &tmp)) goto close_file; | 442 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
398 | planes = tmp; // must be 1 | 443 | planes = tmp; // must be 1 |
399 | if (!read_short(f, &tmp)) goto close_file; | 444 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
400 | bit_count = tmp; // bits per pixel: 1, 4, 8 & 24 | 445 | bit_count = tmp; // bits per pixel: 1, 4, 8 & 24 |
401 | } | 446 | } |
402 | else if (head_size == 64) // OS/2 V2 | 447 | else if (head_size == 64) // OS/2 V2 |
403 | { | 448 | { |
404 | short tmp; | 449 | short tmp; |
405 | int tmp2; | 450 | int tmp2; |
406 | 451 | ||
407 | if (!read_int(f, &tmp2)) goto close_file; | 452 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
408 | w = tmp2; // width | 453 | w = tmp2; // width |
409 | if (!read_int(f, &tmp2)) goto close_file; | 454 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
410 | h = tmp2; // height | 455 | h = tmp2; // height |
411 | if (!read_short(f, &tmp)) goto close_file; | 456 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
412 | planes = tmp; // must be 1 | 457 | planes = tmp; // must be 1 |
413 | if (!read_short(f, &tmp)) goto close_file; | 458 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
414 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 459 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
415 | if (!read_int(f, &tmp2)) goto close_file; | 460 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
416 | comp = tmp2; // compression method | 461 | comp = tmp2; // compression method |
417 | if (!read_int(f, &tmp2)) goto close_file; | 462 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
418 | image_size = tmp2; // bitmap data size | 463 | image_size = tmp2; // bitmap data size |
419 | if (!read_int(f, &tmp2)) goto close_file; | 464 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
420 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 465 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
421 | if (!read_int(f, &tmp2)) goto close_file; | 466 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
422 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 467 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
423 | if (!read_int(f, &tmp2)) goto close_file; | 468 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
424 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 469 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
425 | if (!read_int(f, &tmp2)) goto close_file; | 470 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
426 | important_colors = tmp2; // number of important colors - 0 if all | 471 | important_colors = tmp2; // number of important colors - 0 if all |
427 | if (fread(buf, 24, 1, f) != 1) goto close_file; // skip unused header | 472 | if (!read_skip(fsize, &position, 24)) goto close_file; // skip unused header |
428 | if (image_size == 0) image_size = fsize - offset; | 473 | if (image_size == 0) image_size = fsize - offset; |
429 | } | 474 | } |
430 | else if (head_size == 40) // Windows 3.0 + (v3) | 475 | else if (head_size == 40) // Windows 3.0 + (v3) |
431 | { | 476 | { |
432 | short tmp; | 477 | short tmp; |
433 | int tmp2; | 478 | int tmp2; |
434 | 479 | ||
435 | if (!read_int(f, &tmp2)) goto close_file; | 480 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
436 | w = tmp2; // width | 481 | w = tmp2; // width |
437 | if (!read_int(f, &tmp2)) goto close_file; | 482 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
438 | h = tmp2; // height | 483 | h = tmp2; // height |
439 | if (!read_short(f, &tmp)) goto close_file; | 484 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
440 | planes = tmp; // must be 1 | 485 | planes = tmp; // must be 1 |
441 | if (!read_short(f, &tmp)) goto close_file; | 486 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
442 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 487 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
443 | if (!read_int(f, &tmp2)) goto close_file; | 488 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
444 | comp = tmp2; // compression method | 489 | comp = tmp2; // compression method |
445 | if (!read_int(f, &tmp2)) goto close_file; | 490 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
446 | image_size = tmp2; // bitmap data size | 491 | image_size = tmp2; // bitmap data size |
447 | if (!read_int(f, &tmp2)) goto close_file; | 492 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
448 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 493 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
449 | if (!read_int(f, &tmp2)) goto close_file; | 494 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
450 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 495 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
451 | if (!read_int(f, &tmp2)) goto close_file; | 496 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
452 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 497 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
453 | if (!read_int(f, &tmp2)) goto close_file; | 498 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
454 | important_colors = tmp2; // number of important colors - 0 if all | 499 | important_colors = tmp2; // number of important colors - 0 if all |
455 | if (image_size == 0) image_size = fsize - offset; | 500 | if (image_size == 0) image_size = fsize - offset; |
456 | if ((comp == 0) && (bit_count == 32)) hasa = 1; // GIMP seems to store it this way | 501 | if ((comp == 0) && (bit_count == 32)) hasa = 1; // GIMP seems to store it this way |
@@ -459,37 +504,37 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
459 | { | 504 | { |
460 | short tmp; | 505 | short tmp; |
461 | int tmp2; | 506 | int tmp2; |
462 | 507 | ||
463 | if (!read_int(f, &tmp2)) goto close_file; | 508 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
464 | w = tmp2; // width | 509 | w = tmp2; // width |
465 | if (!read_int(f, &tmp2)) goto close_file; | 510 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
466 | h = tmp2; // height | 511 | h = tmp2; // height |
467 | if (!read_short(f, &tmp)) goto close_file; | 512 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
468 | planes = tmp; // must be 1 | 513 | planes = tmp; // must be 1 |
469 | if (!read_short(f, &tmp)) goto close_file; | 514 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
470 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 515 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
471 | if (!read_int(f, &tmp2)) goto close_file; | 516 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
472 | comp = tmp2; // compression method | 517 | comp = tmp2; // compression method |
473 | if (!read_int(f, &tmp2)) goto close_file; | 518 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
474 | image_size = tmp2; // bitmap data size | 519 | image_size = tmp2; // bitmap data size |
475 | if (!read_int(f, &tmp2)) goto close_file; | 520 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
476 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 521 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
477 | if (!read_int(f, &tmp2)) goto close_file; | 522 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
478 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 523 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
479 | if (!read_int(f, &tmp2)) goto close_file; | 524 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
480 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 525 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
481 | if (!read_int(f, &tmp2)) goto close_file; | 526 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
482 | important_colors = tmp2; // number of important colors - 0 if all | 527 | important_colors = tmp2; // number of important colors - 0 if all |
483 | if (!read_int(f, &tmp2)) goto close_file; | 528 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
484 | rmask = tmp2; // red mask | 529 | rmask = tmp2; // red mask |
485 | if (!read_int(f, &tmp2)) goto close_file; | 530 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
486 | gmask = tmp2; // green mask | 531 | gmask = tmp2; // green mask |
487 | if (!read_int(f, &tmp2)) goto close_file; | 532 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
488 | bmask = tmp2; // blue mask | 533 | bmask = tmp2; // blue mask |
489 | if (!read_int(f, &tmp2)) goto close_file; | 534 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
490 | amask = tmp2; // alpha mask | 535 | amask = tmp2; // alpha mask |
491 | if (fread(buf, 36, 1, f) != 1) goto close_file; // skip unused cie | 536 | if (!read_skip(fsize, &position, 36)) goto close_file; // skip unused cie |
492 | if (fread(buf, 12, 1, f) != 1) goto close_file; // skip unused gamma | 537 | if (!read_skip(fsize, &position, 12)) goto close_file; // skip unused gamma |
493 | if (image_size == 0) image_size = fsize - offset; | 538 | if (image_size == 0) image_size = fsize - offset; |
494 | if ((amask) && (bit_count == 32)) hasa = 1; | 539 | if ((amask) && (bit_count == 32)) hasa = 1; |
495 | } | 540 | } |
@@ -497,38 +542,38 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
497 | { | 542 | { |
498 | short tmp; | 543 | short tmp; |
499 | int tmp2; | 544 | int tmp2; |
500 | 545 | ||
501 | if (!read_int(f, &tmp2)) goto close_file; | 546 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
502 | w = tmp2; // width | 547 | w = tmp2; // width |
503 | if (!read_int(f, &tmp2)) goto close_file; | 548 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
504 | h = tmp2; // height | 549 | h = tmp2; // height |
505 | if (!read_short(f, &tmp)) goto close_file; | 550 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
506 | planes = tmp; // must be 1 | 551 | planes = tmp; // must be 1 |
507 | if (!read_short(f, &tmp)) goto close_file; | 552 | if (!read_short(map, fsize, &position, &tmp)) goto close_file; |
508 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 | 553 | bit_count = tmp; // bits per pixel: 1, 4, 8, 16, 24 & 32 |
509 | if (!read_int(f, &tmp2)) goto close_file; | 554 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
510 | comp = tmp2; // compression method | 555 | comp = tmp2; // compression method |
511 | if (!read_int(f, &tmp2)) goto close_file; | 556 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
512 | image_size = tmp2; // bitmap data size | 557 | image_size = tmp2; // bitmap data size |
513 | if (!read_int(f, &tmp2)) goto close_file; | 558 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
514 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter | 559 | hdpi = (tmp2 * 254) / 10000; // horizontal pixels/meter |
515 | if (!read_int(f, &tmp2)) goto close_file; | 560 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
516 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter | 561 | vdpi = (tmp2 * 254) / 10000; // vertical pixles/meter |
517 | if (!read_int(f, &tmp2)) goto close_file; | 562 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
518 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) | 563 | palette_size = tmp2; // number of palette colors power (2^n - so 0 - 8) |
519 | if (!read_int(f, &tmp2)) goto close_file; | 564 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
520 | important_colors = tmp2; // number of important colors - 0 if all | 565 | important_colors = tmp2; // number of important colors - 0 if all |
521 | if (!read_int(f, &tmp2)) goto close_file; | 566 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
522 | rmask = tmp2; // red mask | 567 | rmask = tmp2; // red mask |
523 | if (!read_int(f, &tmp2)) goto close_file; | 568 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
524 | gmask = tmp2; // green mask | 569 | gmask = tmp2; // green mask |
525 | if (!read_int(f, &tmp2)) goto close_file; | 570 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
526 | bmask = tmp2; // blue mask | 571 | bmask = tmp2; // blue mask |
527 | if (!read_int(f, &tmp2)) goto close_file; | 572 | if (!read_int(map, fsize, &position, &tmp2)) goto close_file; |
528 | amask = tmp2; // alpha mask | 573 | amask = tmp2; // alpha mask |
529 | if (fread(buf, 36, 1, f) != 1) goto close_file; // skip unused cie | 574 | if (!read_skip(fsize, &position, 36)) goto close_file; // skip unused cie |
530 | if (fread(buf, 12, 1, f) != 1) goto close_file; // skip unused gamma | 575 | if (!read_skip(fsize, &position, 12)) goto close_file; // skip unused gamma |
531 | if (fread(buf, 16, 1, f) != 1) goto close_file; // skip others | 576 | if (!read_skip(fsize, &position, 16)) goto close_file; // skip others |
532 | if (image_size == 0) image_size = fsize - offset; | 577 | if (image_size == 0) image_size = fsize - offset; |
533 | if ((amask) && (bit_count == 32)) hasa = 1; | 578 | if ((amask) && (bit_count == 32)) hasa = 1; |
534 | } | 579 | } |
@@ -605,17 +650,17 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
605 | pal = alloca(256 * 4); | 650 | pal = alloca(256 * 4); |
606 | for (i = 0; i < pal_num; i++) | 651 | for (i = 0; i < pal_num; i++) |
607 | { | 652 | { |
608 | if (fread(&b, 1, 1, f) != 1) goto close_file; | 653 | if (!read_uchar(map, fsize, &position, &b)) goto close_file; |
609 | if (fread(&g, 1, 1, f) != 1) goto close_file; | 654 | if (!read_uchar(map, fsize, &position, &g)) goto close_file; |
610 | if (fread(&r, 1, 1, f) != 1) goto close_file; | 655 | if (!read_uchar(map, fsize, &position, &r)) goto close_file; |
611 | if ((head_size != 12) /*&& (palette_size != 0)*/) | 656 | if ((head_size != 12) /*&& (palette_size != 0)*/) |
612 | { // OS/2 V1 doesn't do the pad byte | 657 | { // OS/2 V1 doesn't do the pad byte |
613 | if (fread(&a, 1, 1, f) != 1) goto close_file; | 658 | if (!read_uchar(map, fsize, &position, &a)) goto close_file; |
614 | } | 659 | } |
615 | a = 0xff; // fillin a as solid for paletted images | 660 | a = 0xff; // fillin a as solid for paletted images |
616 | pal[i] = ARGB_JOIN(a, r, g, b); | 661 | pal[i] = ARGB_JOIN(a, r, g, b); |
617 | } | 662 | } |
618 | fseek(f, offset, SEEK_SET); | 663 | position = offset; |
619 | 664 | ||
620 | if ((scale_ratio == 1) || (comp !=0)) | 665 | if ((scale_ratio == 1) || (comp !=0)) |
621 | buffer = malloc(image_size + 8); // add 8 for padding to avoid checks | 666 | buffer = malloc(image_size + 8); // add 8 for padding to avoid checks |
@@ -643,11 +688,11 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
643 | 688 | ||
644 | if ((scale_ratio == 1) || (comp !=0)) | 689 | if ((scale_ratio == 1) || (comp !=0)) |
645 | { | 690 | { |
646 | if (fread(buffer, image_size, 1, f) != 1) goto close_file; | 691 | if (!read_mem(map, fsize, &position, buffer, image_size)) goto close_file; |
647 | } | 692 | } |
648 | else | 693 | else |
649 | { | 694 | { |
650 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 695 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
651 | } | 696 | } |
652 | 697 | ||
653 | if (bit_count == 1) | 698 | if (bit_count == 1) |
@@ -715,8 +760,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
715 | read_line += scale_ratio; | 760 | read_line += scale_ratio; |
716 | if (read_line >= image_h) break; | 761 | if (read_line >= image_h) break; |
717 | 762 | ||
718 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 763 | position += row_size * (scale_ratio - 1); |
719 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 764 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
720 | p = buffer; | 765 | p = buffer; |
721 | buffer_end = buffer + row_size; | 766 | buffer_end = buffer + row_size; |
722 | } | 767 | } |
@@ -770,8 +815,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
770 | read_line += scale_ratio; | 815 | read_line += scale_ratio; |
771 | if (read_line >= image_h) break; | 816 | if (read_line >= image_h) break; |
772 | 817 | ||
773 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 818 | position += row_size * (scale_ratio - 1); |
774 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 819 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
775 | p = buffer; | 820 | p = buffer; |
776 | buffer_end = buffer + row_size; | 821 | buffer_end = buffer + row_size; |
777 | } | 822 | } |
@@ -960,8 +1005,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
960 | read_line += scale_ratio; | 1005 | read_line += scale_ratio; |
961 | if (read_line >= image_h) break; | 1006 | if (read_line >= image_h) break; |
962 | 1007 | ||
963 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1008 | position += row_size * (scale_ratio - 1); |
964 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1009 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
965 | p = buffer; | 1010 | p = buffer; |
966 | buffer_end = buffer + row_size; | 1011 | buffer_end = buffer + row_size; |
967 | } | 1012 | } |
@@ -1088,7 +1133,7 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1088 | { | 1133 | { |
1089 | if (comp == 0) // no compression | 1134 | if (comp == 0) // no compression |
1090 | { | 1135 | { |
1091 | fseek(f, offset, SEEK_SET); | 1136 | position = offset; |
1092 | if (scale_ratio == 1) | 1137 | if (scale_ratio == 1) |
1093 | buffer = malloc(image_size + 8); // add 8 for padding to avoid checks | 1138 | buffer = malloc(image_size + 8); // add 8 for padding to avoid checks |
1094 | else | 1139 | else |
@@ -1106,11 +1151,11 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1106 | p = buffer; | 1151 | p = buffer; |
1107 | if (scale_ratio == 1) | 1152 | if (scale_ratio == 1) |
1108 | { | 1153 | { |
1109 | if (fread(buffer, image_size, 1, f) != 1) goto close_file; | 1154 | if (!read_mem(map, fsize, &position, buffer, image_size)) goto close_file; |
1110 | } | 1155 | } |
1111 | else | 1156 | else |
1112 | { | 1157 | { |
1113 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1158 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
1114 | } | 1159 | } |
1115 | if (bit_count == 16) | 1160 | if (bit_count == 16) |
1116 | { | 1161 | { |
@@ -1139,8 +1184,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1139 | read_line += scale_ratio; | 1184 | read_line += scale_ratio; |
1140 | if (read_line >= image_h) break; | 1185 | if (read_line >= image_h) break; |
1141 | 1186 | ||
1142 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1187 | position += row_size * (scale_ratio - 1); |
1143 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1188 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
1144 | p = buffer; | 1189 | p = buffer; |
1145 | buffer_end = buffer + row_size; | 1190 | buffer_end = buffer + row_size; |
1146 | } | 1191 | } |
@@ -1173,8 +1218,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1173 | read_line += scale_ratio; | 1218 | read_line += scale_ratio; |
1174 | if (read_line >= image_h) break; | 1219 | if (read_line >= image_h) break; |
1175 | 1220 | ||
1176 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1221 | position += row_size * (scale_ratio - 1); |
1177 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1222 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
1178 | p = buffer; | 1223 | p = buffer; |
1179 | buffer_end = buffer + row_size; | 1224 | buffer_end = buffer + row_size; |
1180 | } | 1225 | } |
@@ -1212,8 +1257,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1212 | read_line += scale_ratio; | 1257 | read_line += scale_ratio; |
1213 | if (read_line >= image_h) break; | 1258 | if (read_line >= image_h) break; |
1214 | 1259 | ||
1215 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1260 | position += row_size * (scale_ratio - 1); |
1216 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1261 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
1217 | p = buffer; | 1262 | p = buffer; |
1218 | buffer_end = buffer + row_size; | 1263 | buffer_end = buffer + row_size; |
1219 | } | 1264 | } |
@@ -1230,7 +1275,7 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1230 | if (hasa) | 1275 | if (hasa) |
1231 | { | 1276 | { |
1232 | unsigned int *pixend = surface + (w * h); | 1277 | unsigned int *pixend = surface + (w * h); |
1233 | 1278 | ||
1234 | for (pix = surface; pix < pixend; pix++) | 1279 | for (pix = surface; pix < pixend; pix++) |
1235 | A_VAL(pix) = 0xff; | 1280 | A_VAL(pix) = 0xff; |
1236 | } | 1281 | } |
@@ -1241,11 +1286,11 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1241 | } | 1286 | } |
1242 | else if (comp == 3) // bit field | 1287 | else if (comp == 3) // bit field |
1243 | { | 1288 | { |
1244 | if (!read_uint(f, &rmask)) goto close_file; | 1289 | if (!read_uint(map, fsize, &position, &rmask)) goto close_file; |
1245 | if (!read_uint(f, &gmask)) goto close_file; | 1290 | if (!read_uint(map, fsize, &position, &gmask)) goto close_file; |
1246 | if (!read_uint(f, &bmask)) goto close_file; | 1291 | if (!read_uint(map, fsize, &position, &bmask)) goto close_file; |
1247 | 1292 | ||
1248 | fseek(f, offset, SEEK_SET); | 1293 | position = offset; |
1249 | if (scale_ratio == 1) | 1294 | if (scale_ratio == 1) |
1250 | buffer = malloc(image_size + 8); // add 8 for padding to avoid checks | 1295 | buffer = malloc(image_size + 8); // add 8 for padding to avoid checks |
1251 | else | 1296 | else |
@@ -1264,14 +1309,14 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1264 | p = buffer; | 1309 | p = buffer; |
1265 | if (scale_ratio == 1) | 1310 | if (scale_ratio == 1) |
1266 | { | 1311 | { |
1267 | if (fread(buffer, image_size, 1, f) != 1) goto close_file; | 1312 | if (!read_mem(map, fsize, &position, buffer, image_size)) goto close_file; |
1268 | } | 1313 | } |
1269 | else | 1314 | else |
1270 | { | 1315 | { |
1271 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1316 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; |
1272 | } | 1317 | } |
1273 | 1318 | ||
1274 | if ((bit_count == 16) && | 1319 | if ((bit_count == 16) && |
1275 | (rmask == 0xf800) && (gmask == 0x07e0) && (bmask == 0x001f) | 1320 | (rmask == 0xf800) && (gmask == 0x07e0) && (bmask == 0x001f) |
1276 | ) | 1321 | ) |
1277 | { | 1322 | { |
@@ -1299,8 +1344,9 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1299 | { | 1344 | { |
1300 | read_line += scale_ratio; | 1345 | read_line += scale_ratio; |
1301 | if (read_line >= image_h) break; | 1346 | if (read_line >= image_h) break; |
1302 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1347 | |
1303 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1348 | position += row_size * (scale_ratio - 1); |
1349 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; | ||
1304 | p = buffer; | 1350 | p = buffer; |
1305 | buffer_end = buffer + row_size; | 1351 | buffer_end = buffer + row_size; |
1306 | } | 1352 | } |
@@ -1338,8 +1384,9 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1338 | { | 1384 | { |
1339 | read_line += scale_ratio; | 1385 | read_line += scale_ratio; |
1340 | if (read_line >= image_h) break; | 1386 | if (read_line >= image_h) break; |
1341 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1387 | |
1342 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1388 | position += row_size * (scale_ratio - 1); |
1389 | if (!read_mem(map, fsize, &position, buffer_end, row_size)) goto close_file; | ||
1343 | p = buffer; | 1390 | p = buffer; |
1344 | buffer_end = buffer + row_size; | 1391 | buffer_end = buffer + row_size; |
1345 | } | 1392 | } |
@@ -1375,8 +1422,9 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1375 | { | 1422 | { |
1376 | read_line += scale_ratio; | 1423 | read_line += scale_ratio; |
1377 | if (read_line >= image_h) break; | 1424 | if (read_line >= image_h) break; |
1378 | fseek(f, row_size * (scale_ratio - 1), SEEK_CUR); | 1425 | |
1379 | if (fread(buffer, row_size, 1, f) != 1) goto close_file; | 1426 | position += row_size * (scale_ratio - 1); |
1427 | if (!read_mem(map, fsize, &position, buffer, row_size)) goto close_file; | ||
1380 | p = buffer; | 1428 | p = buffer; |
1381 | buffer_end = buffer + row_size; | 1429 | buffer_end = buffer + row_size; |
1382 | } | 1430 | } |
@@ -1404,10 +1452,12 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1404 | } | 1452 | } |
1405 | else | 1453 | else |
1406 | goto close_file; | 1454 | goto close_file; |
1407 | 1455 | ||
1408 | if (buffer) free(buffer); | 1456 | if (buffer) free(buffer); |
1409 | if (scale_surface) free(scale_surface); | 1457 | if (scale_surface) free(scale_surface); |
1410 | fclose(f); | 1458 | |
1459 | eina_file_map_free(f, map); | ||
1460 | eina_file_close(f); | ||
1411 | 1461 | ||
1412 | evas_common_image_premul(ie); | 1462 | evas_common_image_premul(ie); |
1413 | *error = EVAS_LOAD_ERROR_NONE; | 1463 | *error = EVAS_LOAD_ERROR_NONE; |
@@ -1416,7 +1466,8 @@ evas_image_load_file_data_bmp(Image_Entry *ie, const char *file, const char *key | |||
1416 | close_file: | 1466 | close_file: |
1417 | if (buffer) free(buffer); | 1467 | if (buffer) free(buffer); |
1418 | if (scale_surface) free(scale_surface); | 1468 | if (scale_surface) free(scale_surface); |
1419 | fclose(f); | 1469 | if (map) eina_file_map_free(f, map); |
1470 | eina_file_close(f); | ||
1420 | return EINA_FALSE; | 1471 | return EINA_FALSE; |
1421 | } | 1472 | } |
1422 | 1473 | ||
diff --git a/libraries/evas/src/modules/loaders/edb/Makefile.in b/libraries/evas/src/modules/loaders/edb/Makefile.in index 38c1fa2..87356b4 100644 --- a/libraries/evas/src/modules/loaders/edb/Makefile.in +++ b/libraries/evas/src/modules/loaders/edb/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/edb/evas_image_load_edb.c b/libraries/evas/src/modules/loaders/edb/evas_image_load_edb.c index 94b121e..521161f 100644 --- a/libraries/evas/src/modules/loaders/edb/evas_image_load_edb.c +++ b/libraries/evas/src/modules/loaders/edb/evas_image_load_edb.c | |||
@@ -16,7 +16,8 @@ static Evas_Image_Load_Func evas_image_load_edb_func = | |||
16 | EINA_TRUE, | 16 | EINA_TRUE, |
17 | evas_image_load_file_head_edb, | 17 | evas_image_load_file_head_edb, |
18 | evas_image_load_file_data_edb, | 18 | evas_image_load_file_data_edb, |
19 | NULL | 19 | NULL, |
20 | EINA_FALSE | ||
20 | }; | 21 | }; |
21 | 22 | ||
22 | static Eina_Bool | 23 | static Eina_Bool |
diff --git a/libraries/evas/src/modules/loaders/eet/Makefile.in b/libraries/evas/src/modules/loaders/eet/Makefile.in index 6a6c40e..25a30cf 100644 --- a/libraries/evas/src/modules/loaders/eet/Makefile.in +++ b/libraries/evas/src/modules/loaders/eet/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/eet/evas_image_load_eet.c b/libraries/evas/src/modules/loaders/eet/evas_image_load_eet.c index a187b9e..f86246a 100644 --- a/libraries/evas/src/modules/loaders/eet/evas_image_load_eet.c +++ b/libraries/evas/src/modules/loaders/eet/evas_image_load_eet.c | |||
@@ -16,7 +16,8 @@ Evas_Image_Load_Func evas_image_load_eet_func = | |||
16 | EINA_TRUE, | 16 | EINA_TRUE, |
17 | evas_image_load_file_head_eet, | 17 | evas_image_load_file_head_eet, |
18 | evas_image_load_file_data_eet, | 18 | evas_image_load_file_data_eet, |
19 | NULL | 19 | NULL, |
20 | EINA_FALSE | ||
20 | }; | 21 | }; |
21 | 22 | ||
22 | 23 | ||
diff --git a/libraries/evas/src/modules/loaders/generic/Makefile.in b/libraries/evas/src/modules/loaders/generic/Makefile.in index 65a0bac..dfd5294 100644 --- a/libraries/evas/src/modules/loaders/generic/Makefile.in +++ b/libraries/evas/src/modules/loaders/generic/Makefile.in | |||
@@ -232,8 +232,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
232 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 232 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
233 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 233 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
234 | PKG_CONFIG = @PKG_CONFIG@ | 234 | PKG_CONFIG = @PKG_CONFIG@ |
235 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
236 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
237 | PNG_CFLAGS = @PNG_CFLAGS@ | 235 | PNG_CFLAGS = @PNG_CFLAGS@ |
238 | PNG_LIBS = @PNG_LIBS@ | 236 | PNG_LIBS = @PNG_LIBS@ |
239 | RANLIB = @RANLIB@ | 237 | RANLIB = @RANLIB@ |
@@ -250,6 +248,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
250 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 248 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
251 | VERSION = @VERSION@ | 249 | VERSION = @VERSION@ |
252 | VMAJ = @VMAJ@ | 250 | VMAJ = @VMAJ@ |
251 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
252 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
253 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 253 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
254 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 254 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
255 | XCB_CFLAGS = @XCB_CFLAGS@ | 255 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -331,6 +331,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
331 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 331 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
332 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 332 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
333 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 333 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
334 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
335 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
336 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
337 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
334 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 338 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
335 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 339 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
336 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 340 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/generic/evas_image_load_generic.c b/libraries/evas/src/modules/loaders/generic/evas_image_load_generic.c index 88c189d..2bbfd3e 100644 --- a/libraries/evas/src/modules/loaders/generic/evas_image_load_generic.c +++ b/libraries/evas/src/modules/loaders/generic/evas_image_load_generic.c | |||
@@ -24,7 +24,8 @@ Evas_Image_Load_Func evas_image_load_generic_func = | |||
24 | EINA_TRUE, | 24 | EINA_TRUE, |
25 | evas_image_load_file_head_generic, | 25 | evas_image_load_file_head_generic, |
26 | evas_image_load_file_data_generic, | 26 | evas_image_load_file_data_generic, |
27 | NULL | 27 | NULL, |
28 | EINA_FALSE | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | static Eina_Bool | 31 | static Eina_Bool |
@@ -117,7 +118,7 @@ _load(Image_Entry *ie, const char *file, const char *key, int *error, Eina_Bool | |||
117 | int read_data = 0; | 118 | int read_data = 0; |
118 | char *tmpfname = NULL, *shmfname = NULL; | 119 | char *tmpfname = NULL, *shmfname = NULL; |
119 | DATA32 *body; | 120 | DATA32 *body; |
120 | FILE *f; | 121 | FILE *f = NULL; |
121 | 122 | ||
122 | libdir = _evas_module_libdir_get(); | 123 | libdir = _evas_module_libdir_get(); |
123 | cmd_len = strlen(libdir); | 124 | cmd_len = strlen(libdir); |
@@ -125,6 +126,7 @@ _load(Image_Entry *ie, const char *file, const char *key, int *error, Eina_Bool | |||
125 | img_loader = alloca(cmd_len + 1); | 126 | img_loader = alloca(cmd_len + 1); |
126 | strcpy(img_loader, libdir); | 127 | strcpy(img_loader, libdir); |
127 | strcat(img_loader, loader); | 128 | strcat(img_loader, loader); |
129 | |||
128 | // params excluding file, key and loadopts | 130 | // params excluding file, key and loadopts |
129 | cmd_len += 1024; | 131 | cmd_len += 1024; |
130 | cmd_len += strlen(file) * 2; | 132 | cmd_len += strlen(file) * 2; |
@@ -188,6 +190,8 @@ _load(Image_Entry *ie, const char *file, const char *key, int *error, Eina_Bool | |||
188 | // will interpret shell stuff and path hunt that will then exec the | 190 | // will interpret shell stuff and path hunt that will then exec the |
189 | // program itself that will dynamically link that will again | 191 | // program itself that will dynamically link that will again |
190 | // parse the arguments and finally do something... | 192 | // parse the arguments and finally do something... |
193 | if (access(decoders[try_count], X_OK)) continue; | ||
194 | |||
191 | strcpy(cmd, decoders[try_count]); | 195 | strcpy(cmd, decoders[try_count]); |
192 | strcat(cmd, " "); | 196 | strcat(cmd, " "); |
193 | // filename first arg | 197 | // filename first arg |
diff --git a/libraries/evas/src/modules/loaders/gif/Makefile.in b/libraries/evas/src/modules/loaders/gif/Makefile.in index 7fcd6a7..f32fcf4 100644 --- a/libraries/evas/src/modules/loaders/gif/Makefile.in +++ b/libraries/evas/src/modules/loaders/gif/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/gif/evas_image_load_gif.c b/libraries/evas/src/modules/loaders/gif/evas_image_load_gif.c index 976df0d..9cd6f6e 100644 --- a/libraries/evas/src/modules/loaders/gif/evas_image_load_gif.c +++ b/libraries/evas/src/modules/loaders/gif/evas_image_load_gif.c | |||
@@ -50,7 +50,8 @@ static Evas_Image_Load_Func evas_image_load_gif_func = | |||
50 | EINA_TRUE, | 50 | EINA_TRUE, |
51 | evas_image_load_file_head_gif, | 51 | evas_image_load_file_head_gif, |
52 | evas_image_load_file_data_gif, | 52 | evas_image_load_file_data_gif, |
53 | evas_image_load_frame_duration_gif | 53 | evas_image_load_frame_duration_gif, |
54 | EINA_FALSE | ||
54 | }; | 55 | }; |
55 | #define byte2_to_int(a,b) (((b)<<8)|(a)) | 56 | #define byte2_to_int(a,b) (((b)<<8)|(a)) |
56 | 57 | ||
diff --git a/libraries/evas/src/modules/loaders/ico/Makefile.in b/libraries/evas/src/modules/loaders/ico/Makefile.in index 5c26adf..f65ace0 100644 --- a/libraries/evas/src/modules/loaders/ico/Makefile.in +++ b/libraries/evas/src/modules/loaders/ico/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/ico/evas_image_load_ico.c b/libraries/evas/src/modules/loaders/ico/evas_image_load_ico.c index 17a7f7e..6e31191 100644 --- a/libraries/evas/src/modules/loaders/ico/evas_image_load_ico.c +++ b/libraries/evas/src/modules/loaders/ico/evas_image_load_ico.c | |||
@@ -19,32 +19,57 @@ static Evas_Image_Load_Func evas_image_load_ico_func = | |||
19 | EINA_TRUE, | 19 | EINA_TRUE, |
20 | evas_image_load_file_head_ico, | 20 | evas_image_load_file_head_ico, |
21 | evas_image_load_file_data_ico, | 21 | evas_image_load_file_data_ico, |
22 | NULL | 22 | NULL, |
23 | EINA_FALSE | ||
23 | }; | 24 | }; |
24 | 25 | ||
25 | static int | 26 | static Eina_Bool |
26 | read_ushort(FILE *file, unsigned short *ret) | 27 | read_ushort(unsigned char *map, size_t length, size_t *position, unsigned short *ret) |
27 | { | 28 | { |
28 | unsigned char b[2]; | 29 | unsigned char b[2]; |
29 | if (fread(b, sizeof(unsigned char), 2, file) != 2) return 0; | 30 | |
31 | if (*position + 2 > length) return EINA_FALSE; | ||
32 | b[0] = map[(*position)++]; | ||
33 | b[1] = map[(*position)++]; | ||
30 | *ret = (b[1] << 8) | b[0]; | 34 | *ret = (b[1] << 8) | b[0]; |
31 | return 1; | 35 | return EINA_TRUE; |
32 | } | 36 | } |
33 | 37 | ||
34 | static int | 38 | static Eina_Bool |
35 | read_uint(FILE *file, unsigned int *ret) | 39 | read_uint(unsigned char *map, size_t length, size_t *position, unsigned int *ret) |
36 | { | 40 | { |
37 | unsigned char b[4]; | 41 | unsigned char b[4]; |
38 | if (fread(b, sizeof(unsigned char), 4, file) != 4) return 0; | 42 | unsigned int i; |
43 | |||
44 | if (*position + 4 > length) return EINA_FALSE; | ||
45 | for (i = 0; i < 4; i++) | ||
46 | b[i] = map[(*position)++]; | ||
39 | *ret = ARGB_JOIN(b[3], b[2], b[1], b[0]); | 47 | *ret = ARGB_JOIN(b[3], b[2], b[1], b[0]); |
40 | return 1; | 48 | return EINA_TRUE; |
49 | } | ||
50 | |||
51 | static Eina_Bool | ||
52 | read_uchar(unsigned char *map, size_t length, size_t *position, unsigned char *ret) | ||
53 | { | ||
54 | if (*position + 1 > length) return EINA_FALSE; | ||
55 | *ret = map[(*position)++]; | ||
56 | return EINA_TRUE; | ||
57 | } | ||
58 | |||
59 | static Eina_Bool | ||
60 | read_mem(unsigned char *map, size_t length, size_t *position, void *buffer, int size) | ||
61 | { | ||
62 | if (*position + size > length) return EINA_FALSE; | ||
63 | memcpy(buffer, map + *position, size); | ||
64 | *position += size; | ||
65 | return EINA_TRUE; | ||
41 | } | 66 | } |
42 | 67 | ||
43 | enum | 68 | enum |
44 | { | 69 | { |
45 | SMALLEST, | 70 | SMALLEST, |
46 | BIGGEST, | 71 | BIGGEST, |
47 | SMALLER, | 72 | SMALLER, |
48 | BIGGER | 73 | BIGGER |
49 | }; | 74 | }; |
50 | 75 | ||
@@ -57,9 +82,11 @@ enum | |||
57 | static Eina_Bool | 82 | static Eina_Bool |
58 | evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key, int *error) | 83 | evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key, int *error) |
59 | { | 84 | { |
85 | Eina_File *f; | ||
86 | void *map = NULL; | ||
87 | size_t position = 0; | ||
60 | unsigned short word; | 88 | unsigned short word; |
61 | unsigned char byte; | 89 | unsigned char byte; |
62 | FILE *f; | ||
63 | int wanted_w = 0, wanted_h = 0, w, h, cols, i, planes = 0, | 90 | int wanted_w = 0, wanted_h = 0, w, h, cols, i, planes = 0, |
64 | hot_x = 0, hot_y = 0, bpp = 0, pdelta, search = -1, have_choice = 0, | 91 | hot_x = 0, hot_y = 0, bpp = 0, pdelta, search = -1, have_choice = 0, |
65 | hasa = 1; | 92 | hasa = 1; |
@@ -74,7 +101,7 @@ evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key | |||
74 | unsigned int bmoffset, bmsize; | 101 | unsigned int bmoffset, bmsize; |
75 | } chosen = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | 102 | } chosen = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; |
76 | 103 | ||
77 | f = fopen(file, "rb"); | 104 | f = eina_file_open(file, EINA_FALSE); |
78 | if (!f) | 105 | if (!f) |
79 | { | 106 | { |
80 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 107 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
@@ -82,16 +109,17 @@ evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key | |||
82 | } | 109 | } |
83 | 110 | ||
84 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 111 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
85 | fseek(f, 0, SEEK_END); | 112 | fsize = eina_file_size_get(f); |
86 | fsize = ftell(f); | ||
87 | fseek(f, 0, SEEK_SET); | ||
88 | if (fsize < (6 + 16 + 40)) goto close_file; | 113 | if (fsize < (6 + 16 + 40)) goto close_file; |
89 | 114 | ||
115 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); | ||
116 | if (!map) goto close_file; | ||
117 | |||
90 | // key: | 118 | // key: |
91 | // NULL == highest res | 119 | // NULL == highest res |
92 | // biggest == highest res | 120 | // biggest == highest res |
93 | // smallest == lowest res | 121 | // smallest == lowest res |
94 | // | 122 | // |
95 | // smaller == next size SMALLER than load opts WxH (if possible) | 123 | // smaller == next size SMALLER than load opts WxH (if possible) |
96 | // bigger == next size BIGGER than load opts WxH (if possible) | 124 | // bigger == next size BIGGER than load opts WxH (if possible) |
97 | // more ? | 125 | // more ? |
@@ -103,10 +131,10 @@ evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key | |||
103 | wanted_h = ie->load_opts.h; | 131 | wanted_h = ie->load_opts.h; |
104 | search = SMALLER; | 132 | search = SMALLER; |
105 | } | 133 | } |
106 | 134 | ||
107 | if (!read_ushort(f, &reserved)) goto close_file; | 135 | if (!read_ushort(map, fsize, &position, &reserved)) goto close_file; |
108 | if (!read_ushort(f, &type)) goto close_file; | 136 | if (!read_ushort(map, fsize, &position, &type)) goto close_file; |
109 | if (!read_ushort(f, &count)) goto close_file; | 137 | if (!read_ushort(map, fsize, &position, &count)) goto close_file; |
110 | if (!((reserved == 0) && | 138 | if (!((reserved == 0) && |
111 | ((type == ICON) || (type == CURSOR)) && (count > 0))) | 139 | ((type == ICON) || (type == CURSOR)) && (count > 0))) |
112 | goto close_file; | 140 | goto close_file; |
@@ -141,24 +169,25 @@ evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key | |||
141 | } | 169 | } |
142 | for (i = 0; i < count; i++) | 170 | for (i = 0; i < count; i++) |
143 | { | 171 | { |
144 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 172 | unsigned char tw = 0, th = 0, tcols = 0; |
145 | w = byte; | 173 | if (!read_uchar(map, fsize, &position, &tw)) goto close_file; |
174 | w = tw; | ||
146 | if (w <= 0) w = 256; | 175 | if (w <= 0) w = 256; |
147 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 176 | if (!read_uchar(map, fsize, &position, &th)) goto close_file; |
148 | h = byte; | 177 | h = th; |
149 | if (h <= 0) h = 256; | 178 | if (h <= 0) h = 256; |
150 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 179 | if (!read_uchar(map, fsize, &position, &tcols)) goto close_file; |
151 | cols = byte; | 180 | cols = tcols; |
152 | if (cols <= 0) cols = 256; | 181 | if (cols <= 0) cols = 256; |
153 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 182 | if (!read_uchar(map, fsize, &position, &byte)) goto close_file; |
154 | if (!read_ushort(f, &word)) goto close_file; | 183 | if (!read_ushort(map, fsize, &position, &word)) goto close_file; |
155 | if (type == CURSOR) planes = word; | 184 | if (type == CURSOR) planes = word; |
156 | else hot_x = word; | 185 | else hot_x = word; |
157 | if (!read_ushort(f, &word)) goto close_file; | 186 | if (!read_ushort(map, fsize, &position, &word)) goto close_file; |
158 | if (type == CURSOR) bpp = word; | 187 | if (type == CURSOR) bpp = word; |
159 | else hot_y = word; | 188 | else hot_y = word; |
160 | if (!read_uint(f, &bmsize)) goto close_file; | 189 | if (!read_uint(map, fsize, &position, &bmsize)) goto close_file; |
161 | if (!read_uint(f, &bmoffset)) goto close_file; | 190 | if (!read_uint(map, fsize, &position, &bmoffset)) goto close_file; |
162 | if ((bmsize <= 0) || (bmoffset <= 0) || (bmoffset >= fsize)) goto close_file; | 191 | if ((bmsize <= 0) || (bmoffset <= 0) || (bmoffset >= fsize)) goto close_file; |
163 | if (search == BIGGEST) | 192 | if (search == BIGGEST) |
164 | { | 193 | { |
@@ -245,7 +274,7 @@ evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key | |||
245 | } | 274 | } |
246 | } | 275 | } |
247 | if (chosen.bmoffset == 0) goto close_file; | 276 | if (chosen.bmoffset == 0) goto close_file; |
248 | if (fseek(f, chosen.bmoffset, SEEK_SET) != 0) goto close_file; | 277 | position = chosen.bmoffset; |
249 | 278 | ||
250 | w = chosen.w; | 279 | w = chosen.w; |
251 | h = chosen.h; | 280 | h = chosen.h; |
@@ -263,23 +292,28 @@ evas_image_load_file_head_ico(Image_Entry *ie, const char *file, const char *key | |||
263 | ie->w = w; | 292 | ie->w = w; |
264 | ie->h = h; | 293 | ie->h = h; |
265 | if (hasa) ie->flags.alpha = 1; | 294 | if (hasa) ie->flags.alpha = 1; |
266 | 295 | ||
267 | fclose(f); | 296 | eina_file_map_free(f, map); |
297 | eina_file_close(f); | ||
298 | |||
268 | *error = EVAS_LOAD_ERROR_NONE; | 299 | *error = EVAS_LOAD_ERROR_NONE; |
269 | return EINA_TRUE; | 300 | return EINA_TRUE; |
270 | 301 | ||
271 | close_file: | 302 | close_file: |
272 | fclose(f); | 303 | if (map) eina_file_map_free(f, map); |
304 | eina_file_close(f); | ||
273 | return EINA_FALSE; | 305 | return EINA_FALSE; |
274 | } | 306 | } |
275 | 307 | ||
276 | static Eina_Bool | 308 | static Eina_Bool |
277 | evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key, int *error) | 309 | evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key, int *error) |
278 | { | 310 | { |
311 | Eina_File *f; | ||
312 | void *map = NULL; | ||
313 | size_t position = 0; | ||
279 | unsigned short word; | 314 | unsigned short word; |
280 | unsigned char byte; | 315 | unsigned char byte; |
281 | unsigned int dword; | 316 | unsigned int dword; |
282 | FILE *f; | ||
283 | int wanted_w = 0, wanted_h = 0, w, h, cols, i, planes = 0, | 317 | int wanted_w = 0, wanted_h = 0, w, h, cols, i, planes = 0, |
284 | hot_x = 0, hot_y = 0, bpp = 0, pdelta, search = -1, have_choice = 0, | 318 | hot_x = 0, hot_y = 0, bpp = 0, pdelta, search = -1, have_choice = 0, |
285 | stride, pstride, j, right_way_up = 0, diff_size = 0, cols2; | 319 | stride, pstride, j, right_way_up = 0, diff_size = 0, cols2; |
@@ -296,7 +330,7 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
296 | unsigned int bmoffset, bmsize; | 330 | unsigned int bmoffset, bmsize; |
297 | } chosen = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | 331 | } chosen = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; |
298 | 332 | ||
299 | f = fopen(file, "rb"); | 333 | f = eina_file_open(file, EINA_FALSE); |
300 | if (!f) | 334 | if (!f) |
301 | { | 335 | { |
302 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 336 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
@@ -304,11 +338,12 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
304 | } | 338 | } |
305 | 339 | ||
306 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 340 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
307 | fseek(f, 0, SEEK_END); | 341 | fsize = eina_file_size_get(f); |
308 | fsize = ftell(f); | ||
309 | fseek(f, 0, SEEK_SET); | ||
310 | if (fsize < (6 + 16 + 40)) goto close_file; | 342 | if (fsize < (6 + 16 + 40)) goto close_file; |
311 | 343 | ||
344 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); | ||
345 | if (!map) goto close_file; | ||
346 | |||
312 | // key: | 347 | // key: |
313 | // NULL == highest res | 348 | // NULL == highest res |
314 | // biggest == highest res | 349 | // biggest == highest res |
@@ -325,11 +360,11 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
325 | wanted_h = ie->load_opts.h; | 360 | wanted_h = ie->load_opts.h; |
326 | search = SMALLER; | 361 | search = SMALLER; |
327 | } | 362 | } |
328 | 363 | ||
329 | if (!read_ushort(f, &reserved)) goto close_file; | 364 | if (!read_ushort(map, fsize, &position, &reserved)) goto close_file; |
330 | if (!read_ushort(f, &type)) goto close_file; | 365 | if (!read_ushort(map, fsize, &position, &type)) goto close_file; |
331 | if (!read_ushort(f, &count)) goto close_file; | 366 | if (!read_ushort(map, fsize, &position, &count)) goto close_file; |
332 | if (!((reserved == 0) && | 367 | if (!((reserved == 0) && |
333 | ((type == ICON) || (type == CURSOR)) && (count > 0))) | 368 | ((type == ICON) || (type == CURSOR)) && (count > 0))) |
334 | goto close_file; | 369 | goto close_file; |
335 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 370 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
@@ -363,24 +398,25 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
363 | } | 398 | } |
364 | for (i = 0; i < count; i++) | 399 | for (i = 0; i < count; i++) |
365 | { | 400 | { |
366 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 401 | unsigned char tw = 0, th = 0, tcols = 0; |
367 | w = byte; | 402 | if (!read_uchar(map, fsize, &position, &tw)) goto close_file; |
403 | w = tw; | ||
368 | if (w <= 0) w = 256; | 404 | if (w <= 0) w = 256; |
369 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 405 | if (!read_uchar(map, fsize, &position, &th)) goto close_file; |
370 | h = byte; | 406 | h = th; |
371 | if (h <= 0) h = 256; | 407 | if (h <= 0) h = 256; |
372 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 408 | if (!read_uchar(map, fsize, &position, &tcols)) goto close_file; |
373 | cols = byte; | 409 | cols = tcols; |
374 | if (cols <= 0) cols = 256; | 410 | if (cols <= 0) cols = 256; |
375 | if (fread(&byte, 1, 1, f) != 1) goto close_file; | 411 | if (!read_uchar(map, fsize, &position, &byte)) goto close_file; |
376 | if (!read_ushort(f, &word)) goto close_file; | 412 | if (!read_ushort(map, fsize, &position, &word)) goto close_file; |
377 | if (type == 1) planes = word; | 413 | if (type == 1) planes = word; |
378 | else hot_x = word; | 414 | else hot_x = word; |
379 | if (!read_ushort(f, &word)) goto close_file; | 415 | if (!read_ushort(map, fsize, &position, &word)) goto close_file; |
380 | if (type == 1) bpp = word; | 416 | if (type == 1) bpp = word; |
381 | else hot_y = word; | 417 | else hot_y = word; |
382 | if (!read_uint(f, &bmsize)) goto close_file; | 418 | if (!read_uint(map, fsize, &position, &bmsize)) goto close_file; |
383 | if (!read_uint(f, &bmoffset)) goto close_file; | 419 | if (!read_uint(map, fsize, &position, &bmoffset)) goto close_file; |
384 | if ((bmsize <= 0) || (bmoffset <= 0) || (bmoffset >= fsize)) goto close_file; | 420 | if ((bmsize <= 0) || (bmoffset <= 0) || (bmoffset >= fsize)) goto close_file; |
385 | if (search == BIGGEST) | 421 | if (search == BIGGEST) |
386 | { | 422 | { |
@@ -467,7 +503,7 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
467 | } | 503 | } |
468 | } | 504 | } |
469 | if (chosen.bmoffset == 0) goto close_file; | 505 | if (chosen.bmoffset == 0) goto close_file; |
470 | if (fseek(f, chosen.bmoffset, SEEK_SET) != 0) goto close_file; | 506 | position = chosen.bmoffset; |
471 | 507 | ||
472 | w = chosen.w; | 508 | w = chosen.w; |
473 | h = chosen.h; | 509 | h = chosen.h; |
@@ -477,8 +513,8 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
477 | if (((int)ie->w != w) || ((int)ie->h != h)) goto close_file; | 513 | if (((int)ie->w != w) || ((int)ie->h != h)) goto close_file; |
478 | 514 | ||
479 | // read bmp header time... let's do some checking | 515 | // read bmp header time... let's do some checking |
480 | if (!read_uint(f, &dword)) goto close_file; // headersize - dont care | 516 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // headersize - dont care |
481 | if (!read_uint(f, &dword)) goto close_file; // width | 517 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // width |
482 | if (dword > 0) | 518 | if (dword > 0) |
483 | { | 519 | { |
484 | if ((int)dword != w) | 520 | if ((int)dword != w) |
@@ -487,7 +523,7 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
487 | diff_size = 1; | 523 | diff_size = 1; |
488 | } | 524 | } |
489 | } | 525 | } |
490 | if (!read_uint(f, &dword)) goto close_file; // height | 526 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // height |
491 | if (dword > 0) | 527 | if (dword > 0) |
492 | { | 528 | { |
493 | if ((int)dword != (h * 2)) | 529 | if ((int)dword != (h * 2)) |
@@ -503,19 +539,19 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
503 | " May be expanded or cropped.", | 539 | " May be expanded or cropped.", |
504 | file, ie->w, ie->h, w, h); | 540 | file, ie->w, ie->h, w, h); |
505 | } | 541 | } |
506 | if (!read_ushort(f, &word)) goto close_file; // planes | 542 | if (!read_ushort(map, fsize, &position, &word)) goto close_file; // planes |
507 | planes2 = word; | 543 | planes2 = word; |
508 | if (!read_ushort(f, &word)) goto close_file; // bitcount | 544 | if (!read_ushort(map, fsize, &position, &word)) goto close_file; // bitcount |
509 | bitcount = word; | 545 | bitcount = word; |
510 | if (!read_uint(f, &dword)) goto close_file; // compression | 546 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // compression |
511 | compression = dword; | 547 | compression = dword; |
512 | if (!read_uint(f, &dword)) goto close_file; // imagesize | 548 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // imagesize |
513 | imagesize = dword; | 549 | imagesize = dword; |
514 | if (!read_uint(f, &dword)) goto close_file; // z pixels per m | 550 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // z pixels per m |
515 | if (!read_uint(f, &dword)) goto close_file; // y pizels per m | 551 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // y pizels per m |
516 | if (!read_uint(f, &dword)) goto close_file; // colors used | 552 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // colors used |
517 | colorsused = dword; | 553 | colorsused = dword; |
518 | if (!read_uint(f, &dword)) goto close_file; // colors important | 554 | if (!read_uint(map, fsize, &position, &dword)) goto close_file; // colors important |
519 | colorsimportant = dword; | 555 | colorsimportant = dword; |
520 | 556 | ||
521 | evas_cache_image_surface_alloc(ie, ie->w, ie->h); | 557 | evas_cache_image_surface_alloc(ie, ie->w, ie->h); |
@@ -545,11 +581,11 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
545 | for (i = 0; i < cols; i++) | 581 | for (i = 0; i < cols; i++) |
546 | { | 582 | { |
547 | unsigned char a, r, g, b; | 583 | unsigned char a, r, g, b; |
548 | 584 | ||
549 | if (fread(&b, 1, 1, f) != 1) goto close_file; | 585 | if (!read_uchar(map, fsize, &position, &b)) goto close_file; |
550 | if (fread(&g, 1, 1, f) != 1) goto close_file; | 586 | if (!read_uchar(map, fsize, &position, &g)) goto close_file; |
551 | if (fread(&r, 1, 1, f) != 1) goto close_file; | 587 | if (!read_uchar(map, fsize, &position, &r)) goto close_file; |
552 | if (fread(&a, 1, 1, f) != 1) goto close_file; | 588 | if (!read_uchar(map, fsize, &position, &a)) goto close_file; |
553 | a = 0xff; | 589 | a = 0xff; |
554 | pal[i] = ARGB_JOIN(a, r, g, b); | 590 | pal[i] = ARGB_JOIN(a, r, g, b); |
555 | } | 591 | } |
@@ -563,7 +599,7 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
563 | { | 599 | { |
564 | pix = surface + (i * ie->w); | 600 | pix = surface + (i * ie->w); |
565 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); | 601 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); |
566 | if (fread(pixbuf, pstride, 1, f) != 1) goto close_file; | 602 | if (!read_mem(map, fsize, &position, pixbuf, pstride)) goto close_file; |
567 | p = pixbuf; | 603 | p = pixbuf; |
568 | if (i >= (int)ie->h) continue; | 604 | if (i >= (int)ie->h) continue; |
569 | for (j = 0; j < w; j++) | 605 | for (j = 0; j < w; j++) |
@@ -613,7 +649,7 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
613 | { | 649 | { |
614 | pix = surface + (i * ie->w); | 650 | pix = surface + (i * ie->w); |
615 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); | 651 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); |
616 | if (fread(pixbuf, pstride, 1, f) != 1) goto close_file; | 652 | if (!read_mem(map, fsize, &position, pixbuf, pstride)) goto close_file; |
617 | p = pixbuf; | 653 | p = pixbuf; |
618 | if (i >= (int)ie->h) continue; | 654 | if (i >= (int)ie->h) continue; |
619 | for (j = 0; j < w; j++) | 655 | for (j = 0; j < w; j++) |
@@ -639,7 +675,7 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
639 | { | 675 | { |
640 | pix = surface + (i * ie->w); | 676 | pix = surface + (i * ie->w); |
641 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); | 677 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); |
642 | if (fread(pixbuf, pstride, 1, f) != 1) goto close_file; | 678 | if (!read_mem(map, fsize, &position, pixbuf, pstride)) goto close_file; |
643 | p = pixbuf; | 679 | p = pixbuf; |
644 | if (i >= (int)ie->h) continue; | 680 | if (i >= (int)ie->h) continue; |
645 | for (j = 0; j < w; j++) | 681 | for (j = 0; j < w; j++) |
@@ -658,13 +694,13 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
658 | { | 694 | { |
659 | pix = surface + (i * ie->w); | 695 | pix = surface + (i * ie->w); |
660 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); | 696 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); |
661 | if (fread(pixbuf, pstride, 1, f) != 1) goto close_file; | 697 | if (!read_mem(map, fsize, &position, pixbuf, pstride)) goto close_file; |
662 | p = pixbuf; | 698 | p = pixbuf; |
663 | if (i >= (int)ie->h) continue; | 699 | if (i >= (int)ie->h) continue; |
664 | for (j = 0; j < w; j++) | 700 | for (j = 0; j < w; j++) |
665 | { | 701 | { |
666 | unsigned char a, r, g, b; | 702 | unsigned char a, r, g, b; |
667 | 703 | ||
668 | if (j >= (int)ie->w) break; | 704 | if (j >= (int)ie->w) break; |
669 | b = p[0]; | 705 | b = p[0]; |
670 | g = p[1]; | 706 | g = p[1]; |
@@ -683,13 +719,13 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
683 | { | 719 | { |
684 | pix = surface + (i * ie->w); | 720 | pix = surface + (i * ie->w); |
685 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); | 721 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); |
686 | if (fread(pixbuf, pstride, 1, f) != 1) goto close_file; | 722 | if (!read_mem(map, fsize, &position, pixbuf, pstride)) goto close_file; |
687 | p = pixbuf; | 723 | p = pixbuf; |
688 | if (i >= (int)ie->h) continue; | 724 | if (i >= (int)ie->h) continue; |
689 | for (j = 0; j < w; j++) | 725 | for (j = 0; j < w; j++) |
690 | { | 726 | { |
691 | unsigned char a, r, g, b; | 727 | unsigned char a, r, g, b; |
692 | 728 | ||
693 | if (j >= (int)ie->w) break; | 729 | if (j >= (int)ie->w) break; |
694 | b = p[0]; | 730 | b = p[0]; |
695 | g = p[1]; | 731 | g = p[1]; |
@@ -704,13 +740,13 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
704 | } | 740 | } |
705 | if (!none_zero_alpha) | 741 | if (!none_zero_alpha) |
706 | { | 742 | { |
707 | if (fread(maskbuf, stride * 4 * h, 1, f) != 1) goto close_file; | 743 | if (!read_mem(map, fsize, &position, maskbuf, stride * 4 * h)) goto close_file; |
708 | // apply mask | 744 | // apply mask |
709 | pix = surface; | 745 | pix = surface; |
710 | for (i = 0; i < h; i++) | 746 | for (i = 0; i < h; i++) |
711 | { | 747 | { |
712 | unsigned char *m; | 748 | unsigned char *m; |
713 | 749 | ||
714 | pix = surface + (i * ie->w); | 750 | pix = surface + (i * ie->w); |
715 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); | 751 | if (!right_way_up) pix = surface + ((ie->h - 1 - i) * ie->w); |
716 | m = maskbuf + (stride * i * 4); | 752 | m = maskbuf + (stride * i * 4); |
@@ -727,15 +763,17 @@ evas_image_load_file_data_ico(Image_Entry *ie, const char *file, const char *key | |||
727 | } | 763 | } |
728 | } | 764 | } |
729 | } | 765 | } |
730 | 766 | ||
731 | fclose(f); | 767 | eina_file_map_free(f, map); |
732 | 768 | eina_file_close(f); | |
769 | |||
733 | evas_common_image_premul(ie); | 770 | evas_common_image_premul(ie); |
734 | *error = EVAS_LOAD_ERROR_NONE; | 771 | *error = EVAS_LOAD_ERROR_NONE; |
735 | return EINA_TRUE; | 772 | return EINA_TRUE; |
736 | 773 | ||
737 | close_file: | 774 | close_file: |
738 | fclose(f); | 775 | if (map) eina_file_map_free(f, map); |
776 | eina_file_close(f); | ||
739 | return EINA_FALSE; | 777 | return EINA_FALSE; |
740 | } | 778 | } |
741 | 779 | ||
diff --git a/libraries/evas/src/modules/loaders/jpeg/Makefile.in b/libraries/evas/src/modules/loaders/jpeg/Makefile.in index ce4b194..7c0ca18 100644 --- a/libraries/evas/src/modules/loaders/jpeg/Makefile.in +++ b/libraries/evas/src/modules/loaders/jpeg/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c b/libraries/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c index 0dbabab..797c76d 100644 --- a/libraries/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c +++ b/libraries/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c | |||
@@ -46,7 +46,8 @@ static Evas_Image_Load_Func evas_image_load_jpeg_func = | |||
46 | EINA_TRUE, | 46 | EINA_TRUE, |
47 | evas_image_load_file_head_jpeg, | 47 | evas_image_load_file_head_jpeg, |
48 | evas_image_load_file_data_jpeg, | 48 | evas_image_load_file_data_jpeg, |
49 | NULL | 49 | NULL, |
50 | EINA_TRUE | ||
50 | }; | 51 | }; |
51 | 52 | ||
52 | 53 | ||
diff --git a/libraries/evas/src/modules/loaders/pmaps/Makefile.in b/libraries/evas/src/modules/loaders/pmaps/Makefile.in index de7b779..745e79b 100644 --- a/libraries/evas/src/modules/loaders/pmaps/Makefile.in +++ b/libraries/evas/src/modules/loaders/pmaps/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/pmaps/evas_image_load_pmaps.c b/libraries/evas/src/modules/loaders/pmaps/evas_image_load_pmaps.c index 9ba8f81..393e407 100644 --- a/libraries/evas/src/modules/loaders/pmaps/evas_image_load_pmaps.c +++ b/libraries/evas/src/modules/loaders/pmaps/evas_image_load_pmaps.c | |||
@@ -19,7 +19,8 @@ Evas_Image_Load_Func evas_image_load_pmaps_func = { | |||
19 | EINA_TRUE, | 19 | EINA_TRUE, |
20 | evas_image_load_file_head_pmaps, | 20 | evas_image_load_file_head_pmaps, |
21 | evas_image_load_file_data_pmaps, | 21 | evas_image_load_file_data_pmaps, |
22 | NULL | 22 | NULL, |
23 | EINA_FALSE | ||
23 | }; | 24 | }; |
24 | 25 | ||
25 | /* The buffer to load pmaps images */ | 26 | /* The buffer to load pmaps images */ |
@@ -27,7 +28,9 @@ typedef struct Pmaps_Buffer Pmaps_Buffer; | |||
27 | 28 | ||
28 | struct Pmaps_Buffer | 29 | struct Pmaps_Buffer |
29 | { | 30 | { |
30 | FILE *file; | 31 | Eina_File *file; |
32 | void *map; | ||
33 | size_t position; | ||
31 | 34 | ||
32 | /* the buffer */ | 35 | /* the buffer */ |
33 | DATA8 buffer[FILE_BUFFER_SIZE]; | 36 | DATA8 buffer[FILE_BUFFER_SIZE]; |
@@ -160,13 +163,23 @@ pmaps_buffer_open(Pmaps_Buffer *b, const char *filename, int *error) | |||
160 | { | 163 | { |
161 | size_t len; | 164 | size_t len; |
162 | 165 | ||
163 | b->file = fopen(filename, "rb"); | 166 | b->file = eina_file_open(filename, EINA_FALSE); |
164 | if (!b->file) | 167 | if (!b->file) |
165 | { | 168 | { |
166 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 169 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
167 | return EINA_FALSE; | 170 | return EINA_FALSE; |
168 | } | 171 | } |
169 | 172 | ||
173 | b->map = eina_file_map_all(b->file, EINA_FILE_SEQUENTIAL); | ||
174 | if (!b->map) | ||
175 | { | ||
176 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | ||
177 | eina_file_close(b->file); | ||
178 | b->file = NULL; | ||
179 | return EINA_FALSE; | ||
180 | } | ||
181 | |||
182 | b->position = 0; | ||
170 | *b->buffer = 0; | 183 | *b->buffer = 0; |
171 | *b->unread = 0; | 184 | *b->unread = 0; |
172 | b->last_buffer = 0; | 185 | b->last_buffer = 0; |
@@ -177,7 +190,9 @@ pmaps_buffer_open(Pmaps_Buffer *b, const char *filename, int *error) | |||
177 | if (len < 3) | 190 | if (len < 3) |
178 | { | 191 | { |
179 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 192 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
180 | fclose(b->file); | 193 | eina_file_map_free(b->file, b->map); |
194 | eina_file_close(b->file); | ||
195 | b->map = NULL; | ||
181 | b->file = NULL; | 196 | b->file = NULL; |
182 | return EINA_FALSE; | 197 | return EINA_FALSE; |
183 | } | 198 | } |
@@ -197,7 +212,12 @@ static void | |||
197 | pmaps_buffer_close(Pmaps_Buffer *b) | 212 | pmaps_buffer_close(Pmaps_Buffer *b) |
198 | { | 213 | { |
199 | if (b->file) | 214 | if (b->file) |
200 | fclose(b->file); | 215 | { |
216 | if (b->map) eina_file_map_free(b->file, b->map); | ||
217 | b->map = NULL; | ||
218 | eina_file_close(b->file); | ||
219 | b->file = NULL; | ||
220 | } | ||
201 | } | 221 | } |
202 | 222 | ||
203 | static Eina_Bool | 223 | static Eina_Bool |
@@ -295,6 +315,7 @@ static size_t | |||
295 | pmaps_buffer_plain_update(Pmaps_Buffer *b) | 315 | pmaps_buffer_plain_update(Pmaps_Buffer *b) |
296 | { | 316 | { |
297 | size_t r; | 317 | size_t r; |
318 | size_t max; | ||
298 | 319 | ||
299 | /* if we already are in the last buffer we can not update it */ | 320 | /* if we already are in the last buffer we can not update it */ |
300 | if (b->last_buffer) | 321 | if (b->last_buffer) |
@@ -304,9 +325,14 @@ pmaps_buffer_plain_update(Pmaps_Buffer *b) | |||
304 | * stuff */ | 325 | * stuff */ |
305 | if (b->unread_len) | 326 | if (b->unread_len) |
306 | memcpy(b->buffer, b->unread, b->unread_len); | 327 | memcpy(b->buffer, b->unread, b->unread_len); |
307 | 328 | ||
308 | r = fread(&b->buffer[b->unread_len], 1, | 329 | max = FILE_BUFFER_SIZE - b->unread_len - 1; |
309 | FILE_BUFFER_SIZE - b->unread_len - 1, b->file) + b->unread_len; | 330 | if (b->position + max > eina_file_size_get(b->file)) |
331 | max = eina_file_size_get(b->file) - b->position; | ||
332 | |||
333 | memcpy(&b->buffer[b->unread_len], b->map + b->position, max); | ||
334 | b->position += max; | ||
335 | r = max + b->unread_len; | ||
310 | 336 | ||
311 | /* we haven't read anything nor have we bytes in the unread buffer */ | 337 | /* we haven't read anything nor have we bytes in the unread buffer */ |
312 | if (r == 0) | 338 | if (r == 0) |
@@ -324,7 +350,7 @@ pmaps_buffer_plain_update(Pmaps_Buffer *b) | |||
324 | } | 350 | } |
325 | 351 | ||
326 | b->buffer[r] = 0; | 352 | b->buffer[r] = 0; |
327 | 353 | ||
328 | b->unread[0] = '\0'; | 354 | b->unread[0] = '\0'; |
329 | b->unread_len = 0; | 355 | b->unread_len = 0; |
330 | 356 | ||
@@ -339,6 +365,7 @@ static size_t | |||
339 | pmaps_buffer_raw_update(Pmaps_Buffer *b) | 365 | pmaps_buffer_raw_update(Pmaps_Buffer *b) |
340 | { | 366 | { |
341 | size_t r; | 367 | size_t r; |
368 | size_t max; | ||
342 | 369 | ||
343 | if (b->last_buffer) | 370 | if (b->last_buffer) |
344 | return 0; | 371 | return 0; |
@@ -346,8 +373,13 @@ pmaps_buffer_raw_update(Pmaps_Buffer *b) | |||
346 | if (b->unread_len) | 373 | if (b->unread_len) |
347 | memcpy(b->buffer, b->unread, b->unread_len); | 374 | memcpy(b->buffer, b->unread, b->unread_len); |
348 | 375 | ||
349 | r = fread(&b->buffer[b->unread_len], 1, FILE_BUFFER_SIZE - b->unread_len, | 376 | max = FILE_BUFFER_SIZE - b->unread_len; |
350 | b->file) + b->unread_len; | 377 | if (b->position + max > eina_file_size_get(b->file)) |
378 | max = eina_file_size_get(b->file) - b->position; | ||
379 | |||
380 | memcpy(&b->buffer[b->unread_len], b->map + b->position, max); | ||
381 | b->position += max; | ||
382 | r = max + b->unread_len; | ||
351 | 383 | ||
352 | if (r < FILE_BUFFER_SIZE) | 384 | if (r < FILE_BUFFER_SIZE) |
353 | { | 385 | { |
diff --git a/libraries/evas/src/modules/loaders/png/Makefile.in b/libraries/evas/src/modules/loaders/png/Makefile.in index 0717299..3bd4919 100644 --- a/libraries/evas/src/modules/loaders/png/Makefile.in +++ b/libraries/evas/src/modules/loaders/png/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/png/evas_image_load_png.c b/libraries/evas/src/modules/loaders/png/evas_image_load_png.c index a1480ae..3007a57 100644 --- a/libraries/evas/src/modules/loaders/png/evas_image_load_png.c +++ b/libraries/evas/src/modules/loaders/png/evas_image_load_png.c | |||
@@ -35,7 +35,8 @@ static Evas_Image_Load_Func evas_image_load_png_func = | |||
35 | EINA_TRUE, | 35 | EINA_TRUE, |
36 | evas_image_load_file_head_png, | 36 | evas_image_load_file_head_png, |
37 | evas_image_load_file_data_png, | 37 | evas_image_load_file_data_png, |
38 | NULL | 38 | NULL, |
39 | EINA_FALSE | ||
39 | }; | 40 | }; |
40 | 41 | ||
41 | static Eina_Bool | 42 | static Eina_Bool |
diff --git a/libraries/evas/src/modules/loaders/psd/Makefile.in b/libraries/evas/src/modules/loaders/psd/Makefile.in index 98d340a..3dc9c38 100644 --- a/libraries/evas/src/modules/loaders/psd/Makefile.in +++ b/libraries/evas/src/modules/loaders/psd/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/psd/evas_image_load_psd.c b/libraries/evas/src/modules/loaders/psd/evas_image_load_psd.c index 5a85e17..27f5f24 100644 --- a/libraries/evas/src/modules/loaders/psd/evas_image_load_psd.c +++ b/libraries/evas/src/modules/loaders/psd/evas_image_load_psd.c | |||
@@ -61,48 +61,57 @@ enum { | |||
61 | }; | 61 | }; |
62 | 62 | ||
63 | static Eina_Bool get_compressed_channels_length(PSD_Header *Head, | 63 | static Eina_Bool get_compressed_channels_length(PSD_Header *Head, |
64 | FILE *file, | 64 | const unsigned char *map, size_t length, size_t *position, |
65 | unsigned short *rle_table, | 65 | unsigned short *rle_table, |
66 | unsigned int *chanlen); | 66 | unsigned int *chanlen); |
67 | 67 | ||
68 | static int | 68 | static int |
69 | read_ushort(FILE *file, unsigned short *ret) | 69 | read_ushort(const unsigned char *map, size_t length, size_t *position, unsigned short *ret) |
70 | { | 70 | { |
71 | unsigned char b[2]; | 71 | if (*position + 2 > length) return 0; |
72 | if (fread(b, sizeof(unsigned char), 2, file) != 2) return 0; | ||
73 | // FIXME: need to check order | 72 | // FIXME: need to check order |
74 | *ret = (b[0] << 8) | b[1]; | 73 | *ret = (map[(*position) + 0] << 8) | map[(*position) + 1]; |
74 | *position += 2; | ||
75 | return 1; | 75 | return 1; |
76 | } | 76 | } |
77 | 77 | ||
78 | static int | 78 | static int |
79 | read_uint(FILE *file, unsigned int *ret) | 79 | read_uint(const unsigned char *map, size_t length, size_t *position, unsigned int *ret) |
80 | { | 80 | { |
81 | unsigned char b[4]; | 81 | if (*position + 4 > length) return 0; |
82 | if (fread(b, sizeof(unsigned char), 4, file) != 4) return 0; | ||
83 | // FIXME: need to check order | 82 | // FIXME: need to check order |
84 | *ret = ARGB_JOIN(b[0], b[1], b[2], b[3]); | 83 | *ret = ARGB_JOIN(map[(*position) + 0], map[(*position) + 1], map[(*position) + 2], map[(*position) + 3]); |
84 | *position += 4; | ||
85 | return 1; | ||
86 | } | ||
87 | |||
88 | static int | ||
89 | read_block(const unsigned char *map, size_t length, size_t *position, void *target, size_t size) | ||
90 | { | ||
91 | if (*position + size > length) return 0; | ||
92 | memcpy(target, map + *position, size); | ||
93 | *position += size; | ||
85 | return 1; | 94 | return 1; |
86 | } | 95 | } |
87 | 96 | ||
88 | // Internal function used to get the Psd header from the current file. | 97 | // Internal function used to get the Psd header from the current file. |
89 | Eina_Bool | 98 | Eina_Bool |
90 | psd_get_header(PSD_Header *header, FILE * file) | 99 | psd_get_header(PSD_Header *header, const unsigned char *map, size_t length, size_t *position) |
91 | { | 100 | { |
92 | unsigned short tmp; | 101 | unsigned short tmp; |
93 | 102 | ||
94 | #define CHECK_RET(Call, Value) \ | 103 | #define CHECK_RET(Call) \ |
95 | if (Call != Value) return EINA_FALSE; | 104 | if (!Call) return EINA_FALSE; |
96 | 105 | ||
97 | CHECK_RET(fread(header->signature, sizeof (unsigned char), 4, file), 4); | 106 | CHECK_RET(read_block(map, length, position, header->signature, 4)); |
98 | CHECK_RET(read_ushort(file, &header->version), 1); | 107 | CHECK_RET(read_ushort(map, length, position, &header->version)); |
99 | CHECK_RET(fread(header->reserved, sizeof (unsigned char), 6, file), 6); | 108 | CHECK_RET(read_block(map, length, position, header->reserved, 6)); |
100 | CHECK_RET(read_ushort(file, &header->channels), 1); | 109 | CHECK_RET(read_ushort(map, length, position, &header->channels)); |
101 | CHECK_RET(read_uint(file, &header->height), 1); | 110 | CHECK_RET(read_uint(map, length, position, &header->height)); |
102 | CHECK_RET(read_uint(file, &header->width), 1); | 111 | CHECK_RET(read_uint(map, length, position, &header->width)); |
103 | CHECK_RET(read_ushort(file, &header->depth), 1); | 112 | CHECK_RET(read_ushort(map, length, position, &header->depth)); |
104 | 113 | ||
105 | CHECK_RET(read_ushort(file, &tmp), 1); | 114 | CHECK_RET(read_ushort(map, length, position, &tmp)); |
106 | header->mode = tmp; | 115 | header->mode = tmp; |
107 | 116 | ||
108 | #undef CHECK_RET | 117 | #undef CHECK_RET |
@@ -144,20 +153,35 @@ static Eina_Bool | |||
144 | evas_image_load_file_head_psd(Image_Entry *ie, const char *FileName, | 153 | evas_image_load_file_head_psd(Image_Entry *ie, const char *FileName, |
145 | const char *key __UNUSED__, int *error) | 154 | const char *key __UNUSED__, int *error) |
146 | { | 155 | { |
147 | FILE *f; | 156 | Eina_File *f; |
157 | void *map; | ||
158 | size_t length; | ||
159 | size_t position; | ||
148 | PSD_Header header; | 160 | PSD_Header header; |
149 | Eina_Bool correct; | 161 | Eina_Bool correct; |
150 | 162 | ||
151 | *error = EVAS_LOAD_ERROR_NONE; | 163 | *error = EVAS_LOAD_ERROR_NONE; |
152 | 164 | ||
153 | f = fopen(FileName, "rb"); | 165 | f = eina_file_open(FileName, 0); |
154 | if (f == NULL) | 166 | if (f == NULL) |
155 | { | 167 | { |
156 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 168 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
157 | return EINA_FALSE; | 169 | return EINA_FALSE; |
158 | } | 170 | } |
159 | correct = psd_get_header(&header, f); | 171 | |
160 | fclose(f); | 172 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); |
173 | length = eina_file_size_get(f); | ||
174 | position = 0; | ||
175 | if (!map || length < 1) | ||
176 | { | ||
177 | eina_file_close(f); | ||
178 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | ||
179 | return EINA_FALSE; | ||
180 | } | ||
181 | correct = psd_get_header(&header, map, length, &position); | ||
182 | |||
183 | eina_file_map_free(f, map); | ||
184 | eina_file_close(f); | ||
161 | 185 | ||
162 | if (!correct || !is_psd(&header)) | 186 | if (!correct || !is_psd(&header)) |
163 | { | 187 | { |
@@ -174,7 +198,7 @@ evas_image_load_file_head_psd(Image_Entry *ie, const char *FileName, | |||
174 | } | 198 | } |
175 | 199 | ||
176 | static unsigned int | 200 | static unsigned int |
177 | read_compressed_channel(FILE* file, | 201 | read_compressed_channel(const unsigned char *map, size_t length, size_t *position, |
178 | const unsigned int channel_length __UNUSED__, | 202 | const unsigned int channel_length __UNUSED__, |
179 | unsigned int size, | 203 | unsigned int size, |
180 | unsigned char* channel) | 204 | unsigned char* channel) |
@@ -183,19 +207,18 @@ read_compressed_channel(FILE* file, | |||
183 | unsigned int i; | 207 | unsigned int i; |
184 | char headbyte, c; | 208 | char headbyte, c; |
185 | 209 | ||
186 | #define CHECK_RET(Call, Value) \ | 210 | #define CHECK_RET(Call) \ |
187 | if (Call != Value) return READ_COMPRESSED_ERROR_FILE_READ_ERROR; | 211 | if (!Call) return READ_COMPRESSED_ERROR_FILE_READ_ERROR; \ |
188 | 212 | ||
189 | for (i = 0; i < size; ) | 213 | for (i = 0; i < size; ) |
190 | { | 214 | { |
191 | CHECK_RET(fread(&headbyte, 1, 1, file), 1); | 215 | CHECK_RET(read_block(map, length, position, &headbyte, 1)); |
192 | 216 | ||
193 | if (headbyte >= 0) | 217 | if (headbyte >= 0) |
194 | { | 218 | { |
195 | if (i + headbyte > size) | 219 | if (i + headbyte > size) |
196 | return READ_COMPRESSED_ERROR_FILE_CORRUPT; | 220 | return READ_COMPRESSED_ERROR_FILE_CORRUPT; |
197 | 221 | CHECK_RET(read_block(map, length, position, channel + i, headbyte + 1)); | |
198 | CHECK_RET(fread(channel + i, headbyte + 1, 1, file), 1); | ||
199 | 222 | ||
200 | i += headbyte + 1; | 223 | i += headbyte + 1; |
201 | } | 224 | } |
@@ -203,14 +226,14 @@ read_compressed_channel(FILE* file, | |||
203 | { | 226 | { |
204 | int run; | 227 | int run; |
205 | 228 | ||
206 | CHECK_RET(fread(&c, 1, 1, file), 1); | 229 | CHECK_RET(read_block(map, length, position, &c, 1)); |
207 | 230 | ||
208 | run = c; | 231 | run = c; |
209 | /* if (run == -1) */ | 232 | /* if (run == -1) */ |
210 | /* return READ_COMPRESSED_ERROR_FILE_READ_ERROR; */ | 233 | /* return READ_COMPRESSED_ERROR_FILE_READ_ERROR; */ |
211 | 234 | ||
212 | if (i + (-headbyte + 1) > size) | 235 | if (i + (-headbyte + 1) > size) |
213 | return READ_COMPRESSED_ERROR_FILE_CORRUPT; | 236 | return READ_COMPRESSED_ERROR_FILE_CORRUPT; |
214 | 237 | ||
215 | memset(channel + i, run, -headbyte + 1); | 238 | memset(channel + i, run, -headbyte + 1); |
216 | i += -headbyte + 1; | 239 | i += -headbyte + 1; |
@@ -226,7 +249,7 @@ read_compressed_channel(FILE* file, | |||
226 | Eina_Bool | 249 | Eina_Bool |
227 | psd_get_data(Image_Entry *ie __UNUSED__, | 250 | psd_get_data(Image_Entry *ie __UNUSED__, |
228 | PSD_Header *head, | 251 | PSD_Header *head, |
229 | FILE *f, | 252 | const unsigned char *map, size_t length, size_t *position, |
230 | unsigned char *buffer, Eina_Bool compressed, | 253 | unsigned char *buffer, Eina_Bool compressed, |
231 | int *error) | 254 | int *error) |
232 | { | 255 | { |
@@ -268,13 +291,12 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
268 | { | 291 | { |
269 | free(data); | 292 | free(data); |
270 | free(channel); | 293 | free(channel); |
271 | fprintf(stderr, "unsupported file format.\n"); | ||
272 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 294 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
273 | return EINA_FALSE; | 295 | return EINA_FALSE; |
274 | } | 296 | } |
275 | 297 | ||
276 | #define CHECK_RET(Call, Value) \ | 298 | #define CHECK_RET(Call) \ |
277 | if (Call != Value) \ | 299 | if (!Call) \ |
278 | { \ | 300 | { \ |
279 | free(data); \ | 301 | free(data); \ |
280 | free(channel); \ | 302 | free(channel); \ |
@@ -289,7 +311,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
289 | { | 311 | { |
290 | unsigned char *tmp = channel; | 312 | unsigned char *tmp = channel; |
291 | 313 | ||
292 | CHECK_RET(fread(tmp, pixels_count, 1, f), 1); | 314 | CHECK_RET(read_block(map, length, position, tmp, pixels_count)); |
293 | 315 | ||
294 | for (y = 0; y < head->height * bps; y += bps) | 316 | for (y = 0; y < head->height * bps; y += bps) |
295 | { | 317 | { |
@@ -306,7 +328,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
306 | { | 328 | { |
307 | unsigned char *tmp = channel; | 329 | unsigned char *tmp = channel; |
308 | 330 | ||
309 | CHECK_RET(fread(channel, pixels_count, 1, f), 1); | 331 | CHECK_RET(read_block(map, length, position, channel, pixels_count)); |
310 | 332 | ||
311 | for (y = 0; y < head->height * bps; y += bps) | 333 | for (y = 0; y < head->height * bps; y += bps) |
312 | { | 334 | { |
@@ -333,7 +355,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
333 | { | 355 | { |
334 | unsigned short *shortptr = (unsigned short*) channel; | 356 | unsigned short *shortptr = (unsigned short*) channel; |
335 | 357 | ||
336 | CHECK_RET(fread(channel, pixels_count * 2, 1, f), 1); | 358 | CHECK_RET(read_block(map, length, position, channel, pixels_count * 2)); |
337 | 359 | ||
338 | for (y = 0; y < head->height * bps2; y += bps2) | 360 | for (y = 0; y < head->height * bps2; y += bps2) |
339 | { | 361 | { |
@@ -350,7 +372,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
350 | { | 372 | { |
351 | unsigned short *shortptr = (unsigned short*) channel; | 373 | unsigned short *shortptr = (unsigned short*) channel; |
352 | 374 | ||
353 | CHECK_RET(fread(channel, pixels_count * 2, 1, f), 1); | 375 | CHECK_RET(read_block(map, length, position, channel, pixels_count * 2)); |
354 | 376 | ||
355 | for (y = 0; y < head->height * bps2; y += bps2) | 377 | for (y = 0; y < head->height * bps2; y += bps2) |
356 | { | 378 | { |
@@ -373,7 +395,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
373 | 395 | ||
374 | rle_table = alloca(head->height * head->channel_num * sizeof (unsigned short)); | 396 | rle_table = alloca(head->height * head->channel_num * sizeof (unsigned short)); |
375 | chanlen = alloca(head->channel_num * sizeof (unsigned int)); | 397 | chanlen = alloca(head->channel_num * sizeof (unsigned int)); |
376 | if (!get_compressed_channels_length(head, f, rle_table, chanlen)) | 398 | if (!get_compressed_channels_length(head, map, length, position, rle_table, chanlen)) |
377 | goto file_read_error; | 399 | goto file_read_error; |
378 | 400 | ||
379 | for (c = 0; c < numchan; c++) | 401 | for (c = 0; c < numchan; c++) |
@@ -381,7 +403,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
381 | unsigned char *tmp = channel; | 403 | unsigned char *tmp = channel; |
382 | int err; | 404 | int err; |
383 | 405 | ||
384 | err = read_compressed_channel(f, | 406 | err = read_compressed_channel(map, length, position, |
385 | chanlen[c], | 407 | chanlen[c], |
386 | pixels_count, | 408 | pixels_count, |
387 | channel); | 409 | channel); |
@@ -416,7 +438,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
416 | unsigned char *tmp = channel; | 438 | unsigned char *tmp = channel; |
417 | int err; | 439 | int err; |
418 | 440 | ||
419 | err = read_compressed_channel(f, | 441 | err = read_compressed_channel(map, length, position, |
420 | chanlen[c], | 442 | chanlen[c], |
421 | pixels_count, | 443 | pixels_count, |
422 | channel); | 444 | channel); |
@@ -482,7 +504,7 @@ psd_get_data(Image_Entry *ie __UNUSED__, | |||
482 | Eina_Bool | 504 | Eina_Bool |
483 | get_single_channel(Image_Entry *ie __UNUSED__, | 505 | get_single_channel(Image_Entry *ie __UNUSED__, |
484 | PSD_Header *head, | 506 | PSD_Header *head, |
485 | FILE *f, | 507 | const unsigned char *map, size_t length, size_t *position, |
486 | unsigned char *buffer, | 508 | unsigned char *buffer, |
487 | Eina_Bool compressed) | 509 | Eina_Bool compressed) |
488 | { | 510 | { |
@@ -496,29 +518,29 @@ get_single_channel(Image_Entry *ie __UNUSED__, | |||
496 | bpc = (head->depth / 8); | 518 | bpc = (head->depth / 8); |
497 | pixels_count = head->width * head->height; | 519 | pixels_count = head->width * head->height; |
498 | 520 | ||
499 | #define CHECK_RET(Call, Value) \ | 521 | #define CHECK_RET(Call) \ |
500 | if (Call != Value) return EINA_FALSE; | 522 | if (!Call) return EINA_FALSE; |
501 | 523 | ||
502 | if (!compressed) | 524 | if (!compressed) |
503 | { | 525 | { |
504 | if (bpc == 1) | 526 | if (bpc == 1) |
505 | { | 527 | { |
506 | CHECK_RET(fread(buffer, pixels_count, 1, f), 1); | 528 | CHECK_RET(read_block(map, length, position, buffer, pixels_count)); |
507 | } | 529 | } |
508 | else | 530 | else |
509 | { // Bpc == 2 | 531 | { // Bpc == 2 |
510 | CHECK_RET(fread(buffer, pixels_count * 2, 1, f), 1); | 532 | CHECK_RET(read_block(map, length, position, buffer, pixels_count * 2)); |
511 | } | 533 | } |
512 | } | 534 | } |
513 | else | 535 | else |
514 | { | 536 | { |
515 | for (i = 0; i < (unsigned int)pixels_count; ) | 537 | for (i = 0; i < (unsigned int)pixels_count; ) |
516 | { | 538 | { |
517 | CHECK_RET(fread(&headbyte, 1, 1, f), 1); | 539 | CHECK_RET(read_block(map, length, position, &headbyte, 1)); |
518 | 540 | ||
519 | if (headbyte >= 0) | 541 | if (headbyte >= 0) |
520 | { // && HeadByte <= 127 | 542 | { // && HeadByte <= 127 |
521 | CHECK_RET(fread(buffer + i, headbyte + 1, 1, f), 1); | 543 | CHECK_RET(read_block(map, length, position, buffer + i, headbyte + 1)); |
522 | 544 | ||
523 | i += headbyte + 1; | 545 | i += headbyte + 1; |
524 | } | 546 | } |
@@ -526,7 +548,7 @@ get_single_channel(Image_Entry *ie __UNUSED__, | |||
526 | { | 548 | { |
527 | int run; | 549 | int run; |
528 | 550 | ||
529 | CHECK_RET(fread(&c, 1, 1, f), 1); | 551 | CHECK_RET(read_block(map, length, position, &c, 1)); |
530 | 552 | ||
531 | run = c; | 553 | run = c; |
532 | if (run == -1) return EINA_FALSE; | 554 | if (run == -1) return EINA_FALSE; |
@@ -543,7 +565,7 @@ get_single_channel(Image_Entry *ie __UNUSED__, | |||
543 | } | 565 | } |
544 | 566 | ||
545 | Eina_Bool | 567 | Eina_Bool |
546 | read_psd_grey(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | 568 | read_psd_grey(Image_Entry *ie, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error) |
547 | { | 569 | { |
548 | unsigned int color_mode, resource_size, misc_info; | 570 | unsigned int color_mode, resource_size, misc_info; |
549 | unsigned short compressed; | 571 | unsigned short compressed; |
@@ -552,22 +574,21 @@ read_psd_grey(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
552 | 574 | ||
553 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 575 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
554 | 576 | ||
555 | #define CHECK_RET(Call, Value) \ | 577 | #define CHECK_RET(Call) \ |
556 | if (Call != Value) return EINA_FALSE; | 578 | if (!Call) return EINA_FALSE; |
557 | 579 | ||
558 | CHECK_RET(read_uint(f, &color_mode), 1); | 580 | CHECK_RET(read_uint(map, length, position, &color_mode)); |
559 | // Skip over the 'color mode data section' | 581 | // Skip over the 'color mode data section' |
560 | CHECK_RET(fseek(f, color_mode, SEEK_CUR), 0); | 582 | *position += color_mode; |
561 | 583 | ||
562 | CHECK_RET(read_uint(f, &resource_size), 1); | 584 | CHECK_RET(read_uint(map, length, position, &resource_size)); |
563 | // Read the 'image resources section' | 585 | // Read the 'image resources section' |
586 | *position += resource_size; | ||
564 | 587 | ||
565 | CHECK_RET(fseek(f, resource_size, SEEK_CUR), 0); | 588 | CHECK_RET(read_uint(map, length, position, &misc_info)); |
589 | *position += misc_info; | ||
566 | 590 | ||
567 | CHECK_RET(read_uint(f, &misc_info), 1); | 591 | CHECK_RET(read_ushort(map, length, position, &compressed)); |
568 | CHECK_RET(fseek(f, misc_info, SEEK_CUR), 0); | ||
569 | |||
570 | CHECK_RET(read_ushort(f, &compressed), 1); | ||
571 | 592 | ||
572 | ie->w = head->width; | 593 | ie->w = head->width; |
573 | ie->h = head->height; | 594 | ie->h = head->height; |
@@ -599,7 +620,7 @@ read_psd_grey(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
599 | goto cleanup_error; | 620 | goto cleanup_error; |
600 | } | 621 | } |
601 | 622 | ||
602 | if (!psd_get_data(ie, head, f, surface, compressed, error)) | 623 | if (!psd_get_data(ie, head, map, length, position, surface, compressed, error)) |
603 | goto cleanup_error; | 624 | goto cleanup_error; |
604 | 625 | ||
605 | return EINA_TRUE; | 626 | return EINA_TRUE; |
@@ -612,7 +633,7 @@ read_psd_grey(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
612 | 633 | ||
613 | 634 | ||
614 | Eina_Bool | 635 | Eina_Bool |
615 | read_psd_indexed(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | 636 | read_psd_indexed(Image_Entry *ie, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error) |
616 | { | 637 | { |
617 | unsigned int color_mode, resource_size, misc_info; | 638 | unsigned int color_mode, resource_size, misc_info; |
618 | unsigned short compressed; | 639 | unsigned short compressed; |
@@ -620,11 +641,11 @@ read_psd_indexed(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
620 | 641 | ||
621 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 642 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
622 | 643 | ||
623 | #define CHECK_RET(Call, Value) \ | 644 | #define CHECK_RET(Call) \ |
624 | if (Call != Value) return EINA_FALSE; | 645 | if (!(Call)) return EINA_FALSE; |
625 | 646 | ||
626 | CHECK_RET(read_uint(f, &color_mode), 1); | 647 | CHECK_RET(read_uint(map, length, position, &color_mode)); |
627 | CHECK_RET((color_mode % 3), 0); | 648 | CHECK_RET(!(color_mode % 3)); |
628 | /* | 649 | /* |
629 | Palette = (unsigned char*)malloc(Colormode); | 650 | Palette = (unsigned char*)malloc(Colormode); |
630 | if (Palette == NULL) | 651 | if (Palette == NULL) |
@@ -633,16 +654,16 @@ read_psd_indexed(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
633 | goto cleanup_error; | 654 | goto cleanup_error; |
634 | */ | 655 | */ |
635 | // Skip over the 'color mode data section' | 656 | // Skip over the 'color mode data section' |
636 | CHECK_RET(fseek(f, color_mode, SEEK_CUR), 0); | 657 | *position += color_mode; |
637 | 658 | ||
638 | // Read the 'image resources section' | 659 | // Read the 'image resources section' |
639 | CHECK_RET(read_uint(f, &resource_size), 1); | 660 | CHECK_RET(read_uint(map, length, position, &resource_size)); |
640 | CHECK_RET(fseek(f, resource_size, SEEK_CUR), 0); | 661 | *position += resource_size; |
641 | 662 | ||
642 | CHECK_RET(read_uint(f, &misc_info), 1); | 663 | CHECK_RET(read_uint(map, length, position, &misc_info)); |
643 | CHECK_RET(fseek(f, misc_info, SEEK_CUR), 0); | 664 | *position += misc_info; |
644 | 665 | ||
645 | CHECK_RET(read_ushort(f, &compressed), 1); | 666 | CHECK_RET(read_ushort(map, length, position, &compressed)); |
646 | 667 | ||
647 | if (head->channels != 1 || head->depth != 8) | 668 | if (head->channels != 1 || head->depth != 8) |
648 | { | 669 | { |
@@ -664,7 +685,7 @@ read_psd_indexed(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
664 | return EINA_FALSE; | 685 | return EINA_FALSE; |
665 | } | 686 | } |
666 | 687 | ||
667 | if (!psd_get_data(ie, head, f, surface, compressed, error)) | 688 | if (!psd_get_data(ie, head, map, length, position, surface, compressed, error)) |
668 | return EINA_FALSE; | 689 | return EINA_FALSE; |
669 | return EINA_TRUE; | 690 | return EINA_TRUE; |
670 | 691 | ||
@@ -672,28 +693,28 @@ read_psd_indexed(Image_Entry *ie, PSD_Header *head, FILE * f, int *error) | |||
672 | } | 693 | } |
673 | 694 | ||
674 | Eina_Bool | 695 | Eina_Bool |
675 | read_psd_rgb(Image_Entry *ie, PSD_Header *head, FILE *f, int *error) | 696 | read_psd_rgb(Image_Entry *ie, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error) |
676 | { | 697 | { |
677 | unsigned int color_mode, resource_size, misc_info; | 698 | unsigned int color_mode, resource_size, misc_info; |
678 | unsigned short compressed; | 699 | unsigned short compressed; |
679 | unsigned int type; | 700 | unsigned int type; |
680 | void *surface; | 701 | void *surface; |
681 | 702 | ||
682 | #define CHECK_RET(Call, Value) \ | 703 | #define CHECK_RET(Call) \ |
683 | if (Call != Value) return EINA_FALSE; | 704 | if (!Call) return EINA_FALSE; |
684 | 705 | ||
685 | CHECK_RET(read_uint(f, &color_mode), 1); | 706 | CHECK_RET(read_uint(map, length, position, &color_mode)); |
686 | // Skip over the 'color mode data section' | 707 | // Skip over the 'color mode data section' |
687 | CHECK_RET(fseek(f, color_mode, SEEK_CUR), 0); | 708 | *position += color_mode; |
688 | 709 | ||
689 | // Read the 'image resources section' | 710 | // Read the 'image resources section' |
690 | CHECK_RET(read_uint(f, &resource_size), 1); | 711 | CHECK_RET(read_uint(map, length, position, &resource_size)); |
691 | CHECK_RET(fseek(f, resource_size, SEEK_CUR), 0); | 712 | *position += resource_size; |
692 | 713 | ||
693 | CHECK_RET(read_uint(f, &misc_info), 1); | 714 | CHECK_RET(read_uint(map, length, position, &misc_info)); |
694 | CHECK_RET(fseek(f, misc_info, SEEK_CUR), 0); | 715 | *position += misc_info; |
695 | 716 | ||
696 | CHECK_RET(read_ushort(f, &compressed), 1); | 717 | CHECK_RET(read_ushort(map, length, position, &compressed)); |
697 | 718 | ||
698 | head->channel_num = head->channels; | 719 | head->channel_num = head->channels; |
699 | 720 | ||
@@ -722,7 +743,7 @@ read_psd_rgb(Image_Entry *ie, PSD_Header *head, FILE *f, int *error) | |||
722 | goto cleanup_error; | 743 | goto cleanup_error; |
723 | } | 744 | } |
724 | 745 | ||
725 | if (!psd_get_data(ie, head, f, surface, compressed, error)) | 746 | if (!psd_get_data(ie, head, map, length, position, surface, compressed, error)) |
726 | goto cleanup_error; | 747 | goto cleanup_error; |
727 | 748 | ||
728 | evas_common_image_premul(ie); | 749 | evas_common_image_premul(ie); |
@@ -735,7 +756,7 @@ read_psd_rgb(Image_Entry *ie, PSD_Header *head, FILE *f, int *error) | |||
735 | } | 756 | } |
736 | 757 | ||
737 | Eina_Bool | 758 | Eina_Bool |
738 | read_psd_cmyk(Image_Entry *ie, PSD_Header *head, FILE *f, int *error) | 759 | read_psd_cmyk(Image_Entry *ie, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error) |
739 | { | 760 | { |
740 | unsigned int color_mode, resource_size, misc_info, size, i, j, data_size; | 761 | unsigned int color_mode, resource_size, misc_info, size, i, j, data_size; |
741 | unsigned short compressed; | 762 | unsigned short compressed; |
@@ -745,21 +766,21 @@ read_psd_cmyk(Image_Entry *ie, PSD_Header *head, FILE *f, int *error) | |||
745 | 766 | ||
746 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 767 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
747 | 768 | ||
748 | #define CHECK_RET(Call, Value) \ | 769 | #define CHECK_RET(Call) \ |
749 | if (Call != Value) return EINA_FALSE; | 770 | if (!Call) return EINA_FALSE; |
750 | 771 | ||
751 | CHECK_RET(read_uint(f, &color_mode), 1); | 772 | CHECK_RET(read_uint(map, length, position, &color_mode)); |
752 | // Skip over the 'color mode data section' | 773 | // Skip over the 'color mode data section' |
753 | CHECK_RET(fseek(f, color_mode, SEEK_CUR), 0); | 774 | *position += color_mode; |
754 | 775 | ||
755 | CHECK_RET(read_uint(f, &resource_size), 1); | 776 | CHECK_RET(read_uint(map, length, position, &resource_size)); |
756 | // Read the 'image resources section' | 777 | // Read the 'image resources section' |
757 | CHECK_RET(fseek(f, resource_size, SEEK_CUR), 0); | 778 | *position += resource_size; |
758 | 779 | ||
759 | CHECK_RET(read_uint(f, &misc_info), 1); | 780 | CHECK_RET(read_uint(map, length, position, &misc_info)); |
760 | CHECK_RET(fseek(f, misc_info, SEEK_CUR), 0); | 781 | *position += misc_info; |
761 | 782 | ||
762 | CHECK_RET(read_ushort(f, &compressed), 1); | 783 | CHECK_RET(read_ushort(map, length, position, &compressed)); |
763 | 784 | ||
764 | switch (head->channels) | 785 | switch (head->channels) |
765 | { | 786 | { |
@@ -804,14 +825,14 @@ read_psd_cmyk(Image_Entry *ie, PSD_Header *head, FILE *f, int *error) | |||
804 | goto cleanup_error; | 825 | goto cleanup_error; |
805 | } | 826 | } |
806 | 827 | ||
807 | if (!psd_get_data(ie, head, f, surface, compressed, error)) | 828 | if (!psd_get_data(ie, head, map, length, position, surface, compressed, error)) |
808 | goto cleanup_error; | 829 | goto cleanup_error; |
809 | 830 | ||
810 | size = type * ie->w * ie->h; | 831 | size = type * ie->w * ie->h; |
811 | kchannel = malloc(size); | 832 | kchannel = malloc(size); |
812 | if (kchannel == NULL) | 833 | if (kchannel == NULL) |
813 | goto cleanup_error; | 834 | goto cleanup_error; |
814 | if (!get_single_channel(ie, head, f, kchannel, compressed)) | 835 | if (!get_single_channel(ie, head, map, length, position, kchannel, compressed)) |
815 | goto cleanup_error; | 836 | goto cleanup_error; |
816 | 837 | ||
817 | data_size = head->channels * type * ie->w * ie->h; | 838 | data_size = head->channels * type * ie->w * ie->h; |
@@ -861,20 +882,34 @@ evas_image_load_file_data_psd(Image_Entry *ie, | |||
861 | const char *key __UNUSED__, | 882 | const char *key __UNUSED__, |
862 | int *error) | 883 | int *error) |
863 | { | 884 | { |
864 | FILE *f; | 885 | Eina_File *f; |
886 | void *map; | ||
887 | size_t length; | ||
888 | size_t position; | ||
865 | PSD_Header header; | 889 | PSD_Header header; |
866 | Eina_Bool bpsd = EINA_FALSE; | 890 | Eina_Bool bpsd = EINA_FALSE; |
867 | 891 | ||
868 | f = fopen(file, "rb"); | 892 | f = eina_file_open(file, 0); |
869 | if (f == NULL) | 893 | if (f == NULL) |
870 | { | 894 | { |
871 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 895 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
872 | return bpsd; | 896 | return bpsd; |
873 | } | 897 | } |
874 | 898 | ||
875 | if (!psd_get_header(&header, f) || !is_psd(&header)) | 899 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); |
900 | length = eina_file_size_get(f); | ||
901 | position = 0; | ||
902 | if (!map || length < 1) | ||
903 | { | ||
904 | eina_file_close(f); | ||
905 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | ||
906 | return EINA_FALSE; | ||
907 | } | ||
908 | |||
909 | if (!psd_get_header(&header, map, length, &position) || !is_psd(&header)) | ||
876 | { | 910 | { |
877 | fclose(f); | 911 | eina_file_map_free(f, map); |
912 | eina_file_close(f); | ||
878 | *error = EVAS_LOAD_ERROR_GENERIC; | 913 | *error = EVAS_LOAD_ERROR_GENERIC; |
879 | return EINA_FALSE; | 914 | return EINA_FALSE; |
880 | } | 915 | } |
@@ -887,39 +922,39 @@ evas_image_load_file_data_psd(Image_Entry *ie, | |||
887 | switch (header.mode) | 922 | switch (header.mode) |
888 | { | 923 | { |
889 | case PSD_GREYSCALE: // Greyscale | 924 | case PSD_GREYSCALE: // Greyscale |
890 | bpsd = read_psd_grey(ie, &header, f, error); | 925 | bpsd = read_psd_grey(ie, &header, map, length, &position, error); |
891 | break; | 926 | break; |
892 | case PSD_INDEXED: // Indexed | 927 | case PSD_INDEXED: // Indexed |
893 | bpsd = read_psd_indexed(ie, &header, f, error); | 928 | bpsd = read_psd_indexed(ie, &header, map, length, &position, error); |
894 | break; | 929 | break; |
895 | case PSD_RGB: // RGB | 930 | case PSD_RGB: // RGB |
896 | bpsd = read_psd_rgb(ie, &header, f, error); | 931 | bpsd = read_psd_rgb(ie, &header, map, length, &position, error); |
897 | break; | 932 | break; |
898 | case PSD_CMYK: // CMYK | 933 | case PSD_CMYK: // CMYK |
899 | bpsd = read_psd_cmyk(ie, &header, f, error); | 934 | bpsd = read_psd_cmyk(ie, &header, map, length, &position, error); |
900 | break; | 935 | break; |
901 | default : | 936 | default : |
902 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 937 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
903 | bpsd = EINA_FALSE; | 938 | bpsd = EINA_FALSE; |
904 | } | 939 | } |
905 | fclose(f); | 940 | |
941 | eina_file_map_free(f, map); | ||
942 | eina_file_close(f); | ||
906 | 943 | ||
907 | return bpsd; | 944 | return bpsd; |
908 | } | 945 | } |
909 | 946 | ||
910 | static Eina_Bool | 947 | static Eina_Bool |
911 | get_compressed_channels_length(PSD_Header *head, | 948 | get_compressed_channels_length(PSD_Header *head, |
912 | FILE * file, | 949 | const unsigned char *map, size_t length, size_t *position, |
913 | unsigned short *rle_table, | 950 | unsigned short *rle_table, |
914 | unsigned int *chanlen) | 951 | unsigned int *chanlen) |
915 | { | 952 | { |
916 | unsigned int j; | 953 | unsigned int j; |
917 | unsigned int c; | 954 | unsigned int c; |
918 | 955 | ||
919 | if (fread(rle_table, | 956 | if (!read_block(map, length, position, rle_table, |
920 | sizeof(unsigned short), | 957 | sizeof (unsigned short) * head->height * head->channel_num)) |
921 | head->height * head->channel_num, | ||
922 | file) != head->height * head->channel_num) | ||
923 | return EINA_FALSE; | 958 | return EINA_FALSE; |
924 | 959 | ||
925 | memset(chanlen, 0, head->channel_num * sizeof(unsigned int)); | 960 | memset(chanlen, 0, head->channel_num * sizeof(unsigned int)); |
@@ -941,7 +976,8 @@ static const Evas_Image_Load_Func evas_image_load_psd_func = { | |||
941 | EINA_TRUE, | 976 | EINA_TRUE, |
942 | evas_image_load_file_head_psd, | 977 | evas_image_load_file_head_psd, |
943 | evas_image_load_file_data_psd, | 978 | evas_image_load_file_data_psd, |
944 | NULL | 979 | NULL, |
980 | EINA_FALSE | ||
945 | }; | 981 | }; |
946 | 982 | ||
947 | static int | 983 | static int |
diff --git a/libraries/evas/src/modules/loaders/svg/Makefile.in b/libraries/evas/src/modules/loaders/svg/Makefile.in index f81a3c3..b742842 100644 --- a/libraries/evas/src/modules/loaders/svg/Makefile.in +++ b/libraries/evas/src/modules/loaders/svg/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/svg/evas_image_load_svg.c b/libraries/evas/src/modules/loaders/svg/evas_image_load_svg.c index f1c8452..dc0fc8d 100644 --- a/libraries/evas/src/modules/loaders/svg/evas_image_load_svg.c +++ b/libraries/evas/src/modules/loaders/svg/evas_image_load_svg.c | |||
@@ -13,7 +13,8 @@ Evas_Image_Load_Func evas_image_load_svg_func = | |||
13 | EINA_FALSE, | 13 | EINA_FALSE, |
14 | evas_image_load_file_head_svg, | 14 | evas_image_load_file_head_svg, |
15 | evas_image_load_file_data_svg, | 15 | evas_image_load_file_data_svg, |
16 | NULL | 16 | NULL, |
17 | EINA_FALSE | ||
17 | }; | 18 | }; |
18 | 19 | ||
19 | static int rsvg_initialized = 0; | 20 | static int rsvg_initialized = 0; |
diff --git a/libraries/evas/src/modules/loaders/tga/Makefile.in b/libraries/evas/src/modules/loaders/tga/Makefile.in index 645c77a..4d822d1 100644 --- a/libraries/evas/src/modules/loaders/tga/Makefile.in +++ b/libraries/evas/src/modules/loaders/tga/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/tga/evas_image_load_tga.c b/libraries/evas/src/modules/loaders/tga/evas_image_load_tga.c index 61b99f6..9b4073c 100644 --- a/libraries/evas/src/modules/loaders/tga/evas_image_load_tga.c +++ b/libraries/evas/src/modules/loaders/tga/evas_image_load_tga.c | |||
@@ -65,7 +65,8 @@ static Evas_Image_Load_Func evas_image_load_tga_func = | |||
65 | EINA_TRUE, | 65 | EINA_TRUE, |
66 | evas_image_load_file_head_tga, | 66 | evas_image_load_file_head_tga, |
67 | evas_image_load_file_data_tga, | 67 | evas_image_load_file_data_tga, |
68 | NULL | 68 | NULL, |
69 | EINA_FALSE | ||
69 | }; | 70 | }; |
70 | 71 | ||
71 | static Eina_Bool | 72 | static Eina_Bool |
diff --git a/libraries/evas/src/modules/loaders/tiff/Makefile.in b/libraries/evas/src/modules/loaders/tiff/Makefile.in index a2deea7..2b102a1 100644 --- a/libraries/evas/src/modules/loaders/tiff/Makefile.in +++ b/libraries/evas/src/modules/loaders/tiff/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/tiff/evas_image_load_tiff.c b/libraries/evas/src/modules/loaders/tiff/evas_image_load_tiff.c index b9bea91..e17d5a6 100644 --- a/libraries/evas/src/modules/loaders/tiff/evas_image_load_tiff.c +++ b/libraries/evas/src/modules/loaders/tiff/evas_image_load_tiff.c | |||
@@ -34,7 +34,8 @@ static Evas_Image_Load_Func evas_image_load_tiff_func = | |||
34 | EINA_TRUE, | 34 | EINA_TRUE, |
35 | evas_image_load_file_head_tiff, | 35 | evas_image_load_file_head_tiff, |
36 | evas_image_load_file_data_tiff, | 36 | evas_image_load_file_data_tiff, |
37 | NULL | 37 | NULL, |
38 | EINA_FALSE | ||
38 | }; | 39 | }; |
39 | 40 | ||
40 | typedef struct TIFFRGBAImage_Extra TIFFRGBAImage_Extra; | 41 | typedef struct TIFFRGBAImage_Extra TIFFRGBAImage_Extra; |
diff --git a/libraries/evas/src/modules/loaders/wbmp/Makefile.in b/libraries/evas/src/modules/loaders/wbmp/Makefile.in index 41a3bb9..5c01e1c 100644 --- a/libraries/evas/src/modules/loaders/wbmp/Makefile.in +++ b/libraries/evas/src/modules/loaders/wbmp/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/wbmp/evas_image_load_wbmp.c b/libraries/evas/src/modules/loaders/wbmp/evas_image_load_wbmp.c index fa6fab2..54e28d5 100644 --- a/libraries/evas/src/modules/loaders/wbmp/evas_image_load_wbmp.c +++ b/libraries/evas/src/modules/loaders/wbmp/evas_image_load_wbmp.c | |||
@@ -19,21 +19,22 @@ static Evas_Image_Load_Func evas_image_load_wbmp_func = | |||
19 | EINA_TRUE, | 19 | EINA_TRUE, |
20 | evas_image_load_file_head_wbmp, | 20 | evas_image_load_file_head_wbmp, |
21 | evas_image_load_file_data_wbmp, | 21 | evas_image_load_file_data_wbmp, |
22 | NULL | 22 | NULL, |
23 | EINA_FALSE | ||
23 | }; | 24 | }; |
24 | 25 | ||
25 | 26 | ||
26 | static int | 27 | static int |
27 | read_mb(unsigned int *data, FILE *f) | 28 | read_mb(unsigned int *data, void *map, size_t length, size_t *position) |
28 | { | 29 | { |
29 | int ac = 0, ct; | 30 | int ac = 0, ct; |
30 | unsigned char buf; | 31 | unsigned char buf; |
31 | 32 | ||
32 | for (ct = 0;;) | 33 | for (ct = 0;;) |
33 | { | 34 | { |
34 | if ((ct++) == 5) return -1; | 35 | if ((ct++) == 5) return -1; |
35 | if ((fread(&buf, 1, 1, f)) < 1) | 36 | if (*position > length) return -1; |
36 | return -1; | 37 | buf = ((unsigned char *) map)[(*position)++]; |
37 | ac = (ac << 7) | (buf & 0x7f); | 38 | ac = (ac << 7) | (buf & 0x7f); |
38 | if ((buf & 0x80) == 0) break; | 39 | if ((buf & 0x80) == 0) break; |
39 | } | 40 | } |
@@ -44,70 +45,105 @@ read_mb(unsigned int *data, FILE *f) | |||
44 | static Eina_Bool | 45 | static Eina_Bool |
45 | evas_image_load_file_head_wbmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) | 46 | evas_image_load_file_head_wbmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) |
46 | { | 47 | { |
47 | FILE *f; | 48 | Eina_File *f; |
49 | void *map = NULL; | ||
50 | size_t position = 0; | ||
51 | size_t length; | ||
48 | unsigned int type, w, h; | 52 | unsigned int type, w, h; |
49 | unsigned char fixed_header; | 53 | |
50 | struct stat statbuf; | ||
51 | |||
52 | *error = EVAS_LOAD_ERROR_GENERIC; | 54 | *error = EVAS_LOAD_ERROR_GENERIC; |
53 | f = fopen(file, "rb"); | 55 | f = eina_file_open(file, 0); |
54 | if (!f) | 56 | if (!f) |
55 | { | 57 | { |
56 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 58 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
57 | return EINA_FALSE; | 59 | return EINA_FALSE; |
58 | } | 60 | } |
59 | 61 | ||
60 | if (stat(file, &statbuf) == -1) goto bail; | 62 | length = eina_file_size_get(f); |
61 | if (read_mb(&type, f) < 0) goto bail; | 63 | if (length <= 4) goto bail; |
62 | 64 | ||
65 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); | ||
66 | if (!map) goto bail; | ||
67 | |||
68 | if (read_mb(&type, map, length, &position) < 0) goto bail; | ||
69 | |||
63 | if (type != 0) | 70 | if (type != 0) |
64 | { | 71 | { |
65 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 72 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
66 | goto bail; | 73 | goto bail; |
67 | } | 74 | } |
68 | 75 | ||
69 | if (fread(&fixed_header, 1, 1, f) != 1) goto bail; | 76 | position++; /* skipping one byte */ |
70 | if (read_mb(&w, f) < 0) goto bail; | 77 | if (read_mb(&w, map, length, &position) < 0) goto bail; |
71 | if (read_mb(&h, f) < 0) goto bail; | 78 | if (read_mb(&h, map, length, &position) < 0) goto bail; |
72 | if ((w < 1) || (h < 1) || (w > IMG_MAX_SIZE) || (h > IMG_MAX_SIZE) || | 79 | if ((w < 1) || (h < 1) || (w > IMG_MAX_SIZE) || (h > IMG_MAX_SIZE) || |
73 | IMG_TOO_BIG(w, h)) | 80 | IMG_TOO_BIG(w, h)) |
74 | { | 81 | { |
75 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | 82 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; |
76 | goto bail; | 83 | goto bail; |
77 | } | 84 | } |
78 | 85 | ||
79 | fclose(f); | 86 | eina_file_map_free(f, map); |
87 | eina_file_close(f); | ||
80 | ie->w = w; | 88 | ie->w = w; |
81 | ie->h = h; | 89 | ie->h = h; |
82 | 90 | ||
83 | *error = EVAS_LOAD_ERROR_NONE; | 91 | *error = EVAS_LOAD_ERROR_NONE; |
84 | return EINA_TRUE; | 92 | return EINA_TRUE; |
85 | bail: | 93 | bail: |
86 | fclose(f); | 94 | if (map) eina_file_map_free(f, map); |
95 | eina_file_close(f); | ||
87 | return EINA_FALSE; | 96 | return EINA_FALSE; |
88 | } | 97 | } |
89 | 98 | ||
90 | static Eina_Bool | 99 | static Eina_Bool |
91 | evas_image_load_file_data_wbmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) | 100 | evas_image_load_file_data_wbmp(Image_Entry *ie, const char *file, const char *key __UNUSED__, int *error) |
92 | { | 101 | { |
93 | FILE *f; | 102 | Eina_File *f; |
94 | unsigned int dummy, line_length; | 103 | void *map = NULL; |
104 | size_t position = 0; | ||
105 | size_t length; | ||
106 | unsigned int type, w, h; | ||
107 | unsigned int line_length; | ||
95 | unsigned char *line = NULL; | 108 | unsigned char *line = NULL; |
96 | int cur = 0, x, y; | 109 | int cur = 0, x, y; |
97 | DATA32 *dst_data; | 110 | DATA32 *dst_data; |
98 | 111 | ||
99 | *error = EVAS_LOAD_ERROR_GENERIC; | 112 | *error = EVAS_LOAD_ERROR_GENERIC; |
100 | f = fopen(file, "rb"); | 113 | f = eina_file_open(file, EINA_FALSE); |
101 | if (!f) | 114 | if (!f) |
102 | { | 115 | { |
103 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 116 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
104 | return EINA_FALSE; | 117 | return EINA_FALSE; |
105 | } | 118 | } |
106 | if (read_mb(&dummy, f) < 0) goto bail; | 119 | |
107 | if (fread(&dummy, 1, 1, f) != 1) goto bail; | 120 | length = eina_file_size_get(f); |
108 | if (read_mb(&dummy, f) < 0) goto bail; | 121 | if (length <= 4) goto bail; |
109 | if (read_mb(&dummy, f) < 0) goto bail; | 122 | |
110 | 123 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); | |
124 | if (!map) goto bail; | ||
125 | |||
126 | if (read_mb(&type, map, length, &position) < 0) goto bail; | ||
127 | position++; /* skipping one byte */ | ||
128 | if (read_mb(&w, map, length, &position) < 0) goto bail; | ||
129 | if (read_mb(&h, map, length, &position) < 0) goto bail; | ||
130 | |||
131 | if (type != 0) | ||
132 | { | ||
133 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | ||
134 | goto bail; | ||
135 | } | ||
136 | |||
137 | if ((w < 1) || (h < 1) || (w > IMG_MAX_SIZE) || (h > IMG_MAX_SIZE) || | ||
138 | IMG_TOO_BIG(w, h)) | ||
139 | { | ||
140 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | ||
141 | goto bail; | ||
142 | } | ||
143 | |||
144 | ie->w = w; | ||
145 | ie->h = h; | ||
146 | |||
111 | evas_cache_image_surface_alloc(ie, ie->w, ie->h); | 147 | evas_cache_image_surface_alloc(ie, ie->w, ie->h); |
112 | dst_data = evas_cache_image_pixels(ie); | 148 | dst_data = evas_cache_image_pixels(ie); |
113 | if (!dst_data) | 149 | if (!dst_data) |
@@ -115,13 +151,14 @@ evas_image_load_file_data_wbmp(Image_Entry *ie, const char *file, const char *ke | |||
115 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | 151 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; |
116 | goto bail; | 152 | goto bail; |
117 | } | 153 | } |
118 | 154 | ||
119 | line_length = (ie->w + 7) >> 3; | 155 | line_length = (ie->w + 7) >> 3; |
120 | line = alloca(line_length); | 156 | |
121 | |||
122 | for (y = 0; y < (int)ie->h; y++) | 157 | for (y = 0; y < (int)ie->h; y++) |
123 | { | 158 | { |
124 | if (fread(line, 1, line_length, f) != line_length) goto bail; | 159 | if (position + line_length > length) goto bail; |
160 | line = ((unsigned char*) map) + position; | ||
161 | position += line_length; | ||
125 | for (x = 0; x < (int)ie->w; x++) | 162 | for (x = 0; x < (int)ie->w; x++) |
126 | { | 163 | { |
127 | int idx = x >> 3; | 164 | int idx = x >> 3; |
@@ -131,11 +168,13 @@ evas_image_load_file_data_wbmp(Image_Entry *ie, const char *file, const char *ke | |||
131 | cur++; | 168 | cur++; |
132 | } | 169 | } |
133 | } | 170 | } |
134 | fclose(f); | 171 | eina_file_map_free(f, map); |
172 | eina_file_close(f); | ||
135 | *error = EVAS_LOAD_ERROR_NONE; | 173 | *error = EVAS_LOAD_ERROR_NONE; |
136 | return EINA_TRUE; | 174 | return EINA_TRUE; |
137 | bail: | 175 | bail: |
138 | fclose(f); | 176 | if (map) eina_file_map_free(f, map); |
177 | eina_file_close(f); | ||
139 | return EINA_FALSE; | 178 | return EINA_FALSE; |
140 | } | 179 | } |
141 | 180 | ||
diff --git a/libraries/evas/src/modules/loaders/xpm/Makefile.in b/libraries/evas/src/modules/loaders/xpm/Makefile.in index eba8f60..6383d9e 100644 --- a/libraries/evas/src/modules/loaders/xpm/Makefile.in +++ b/libraries/evas/src/modules/loaders/xpm/Makefile.in | |||
@@ -231,8 +231,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | 231 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ |
232 | PIXMAN_LIBS = @PIXMAN_LIBS@ | 232 | PIXMAN_LIBS = @PIXMAN_LIBS@ |
233 | PKG_CONFIG = @PKG_CONFIG@ | 233 | PKG_CONFIG = @PKG_CONFIG@ |
234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
236 | PNG_CFLAGS = @PNG_CFLAGS@ | 234 | PNG_CFLAGS = @PNG_CFLAGS@ |
237 | PNG_LIBS = @PNG_LIBS@ | 235 | PNG_LIBS = @PNG_LIBS@ |
238 | RANLIB = @RANLIB@ | 236 | RANLIB = @RANLIB@ |
@@ -249,6 +247,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |||
249 | VALGRIND_LIBS = @VALGRIND_LIBS@ | 247 | VALGRIND_LIBS = @VALGRIND_LIBS@ |
250 | VERSION = @VERSION@ | 248 | VERSION = @VERSION@ |
251 | VMAJ = @VMAJ@ | 249 | VMAJ = @VMAJ@ |
250 | WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@ | ||
251 | WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@ | ||
252 | WIN32_CFLAGS = @WIN32_CFLAGS@ | 252 | WIN32_CFLAGS = @WIN32_CFLAGS@ |
253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | 253 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ |
254 | XCB_CFLAGS = @XCB_CFLAGS@ | 254 | XCB_CFLAGS = @XCB_CFLAGS@ |
@@ -330,6 +330,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | |||
330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | 330 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ |
331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | 331 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ |
332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | 332 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ |
333 | evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@ | ||
334 | evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@ | ||
335 | evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@ | ||
336 | evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@ | ||
333 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | 337 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ |
334 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | 338 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ |
335 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | 339 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ |
diff --git a/libraries/evas/src/modules/loaders/xpm/evas_image_load_xpm.c b/libraries/evas/src/modules/loaders/xpm/evas_image_load_xpm.c index 3a04f84..c764f6d 100644 --- a/libraries/evas/src/modules/loaders/xpm/evas_image_load_xpm.c +++ b/libraries/evas/src/modules/loaders/xpm/evas_image_load_xpm.c | |||
@@ -24,16 +24,20 @@ static Evas_Image_Load_Func evas_image_load_xpm_func = | |||
24 | EINA_FALSE, | 24 | EINA_FALSE, |
25 | evas_image_load_file_head_xpm, | 25 | evas_image_load_file_head_xpm, |
26 | evas_image_load_file_data_xpm, | 26 | evas_image_load_file_data_xpm, |
27 | NULL | 27 | NULL, |
28 | EINA_FALSE | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | // TODO: REWRITE THIS WITH THREAD SAFE VERSION NOT USING THIS HANDLE!!!! | 31 | static Eina_File *rgb_txt; |
31 | static FILE *rgb_txt = NULL; | 32 | static void *rgb_txt_map; |
32 | 33 | ||
33 | static void | 34 | static void |
34 | xpm_parse_color(char *color, int *r, int *g, int *b) | 35 | xpm_parse_color(char *color, int *r, int *g, int *b) |
35 | { | 36 | { |
36 | char buf[4096]; | 37 | char *tmp; |
38 | char *max; | ||
39 | char *endline; | ||
40 | char buf[4096]; | ||
37 | 41 | ||
38 | /* is a #ff00ff like color */ | 42 | /* is a #ff00ff like color */ |
39 | if (color[0] == '#') | 43 | if (color[0] == '#') |
@@ -75,20 +79,23 @@ xpm_parse_color(char *color, int *r, int *g, int *b) | |||
75 | return; | 79 | return; |
76 | } | 80 | } |
77 | /* look in rgb txt database */ | 81 | /* look in rgb txt database */ |
78 | if (!rgb_txt) rgb_txt = fopen("/usr/lib/X11/rgb.txt", "r"); | ||
79 | if (!rgb_txt) rgb_txt = fopen("/usr/X11/lib/X11/rgb.txt", "r"); | ||
80 | if (!rgb_txt) rgb_txt = fopen("/usr/X11R6/lib/X11/rgb.txt", "r"); | ||
81 | if (!rgb_txt) rgb_txt = fopen("/usr/openwin/lib/X11/rgb.txt", "r"); | ||
82 | if (!rgb_txt) return; | 82 | if (!rgb_txt) return; |
83 | fseek(rgb_txt, 0, SEEK_SET); | 83 | tmp = rgb_txt_map; |
84 | while (fgets(buf, sizeof(buf), rgb_txt)) | 84 | max = tmp + eina_file_size_get(rgb_txt); |
85 | |||
86 | while (tmp < max) | ||
85 | { | 87 | { |
86 | buf[sizeof(buf) - 1] = 0; | 88 | endline = memchr(tmp, '\n', max - tmp); |
87 | if (buf[0] != '!') | 89 | if (!endline) endline = max; |
90 | if ((*tmp != '!') && ((endline - tmp) < (int) (sizeof(buf) - 1))) | ||
88 | { | 91 | { |
89 | int rr, gg, bb; | 92 | int rr, gg, bb; |
90 | char name[4096]; | 93 | char name[4096]; |
91 | 94 | ||
95 | /* FIXME: not really efficient */ | ||
96 | memcpy(buf, tmp, endline - tmp); | ||
97 | buf[endline - tmp + 1] = '\0'; | ||
98 | |||
92 | if (sscanf(buf, "%i %i %i %[^\n]", &rr, &gg, &bb, name) == 4) | 99 | if (sscanf(buf, "%i %i %i %[^\n]", &rr, &gg, &bb, name) == 4) |
93 | { | 100 | { |
94 | if (!strcasecmp(name, color)) | 101 | if (!strcasecmp(name, color)) |
@@ -100,33 +107,30 @@ xpm_parse_color(char *color, int *r, int *g, int *b) | |||
100 | } | 107 | } |
101 | } | 108 | } |
102 | } | 109 | } |
110 | tmp = endline + 1; | ||
103 | } | 111 | } |
104 | } | 112 | } |
105 | 113 | ||
106 | static void | ||
107 | xpm_parse_done(void) | ||
108 | { | ||
109 | if (rgb_txt) fclose(rgb_txt); | ||
110 | rgb_txt = NULL; | ||
111 | } | ||
112 | |||
113 | |||
114 | /** FIXME: clean this up and make more efficient **/ | 114 | /** FIXME: clean this up and make more efficient **/ |
115 | static Eina_Bool | 115 | static Eina_Bool |
116 | evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UNUSED__, int load_data, int *error) | 116 | evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UNUSED__, int load_data, int *error) |
117 | { | 117 | { |
118 | DATA32 *ptr, *end; | 118 | DATA32 *ptr, *end; |
119 | FILE *f; | 119 | Eina_File *f; |
120 | const char *map; | ||
121 | size_t length; | ||
122 | size_t position; | ||
120 | 123 | ||
121 | int pc, c, i, j, k, w, h, ncolors, cpp, comment, transp, | 124 | int pc, c, i, j, k, w, h, ncolors, cpp, comment, transp, |
122 | quote, context, len, done, r, g, b, backslash, lu1, lu2; | 125 | quote, context, len, done, r, g, b, backslash, lu1, lu2; |
123 | char *line, s[256], tok[128], col[256], *tl; | 126 | char *line = NULL; |
127 | char s[256], tok[128], col[256], *tl; | ||
124 | int lsz = 256; | 128 | int lsz = 256; |
125 | struct _cmap { | 129 | struct _cmap { |
126 | char str[6]; | 130 | char str[6]; |
127 | unsigned char transp; | 131 | unsigned char transp; |
128 | short r, g, b; | 132 | short r, g, b; |
129 | } *cmap; | 133 | } *cmap = NULL; |
130 | 134 | ||
131 | short lookup[128 - 32][128 - 32]; | 135 | short lookup[128 - 32][128 - 32]; |
132 | int count, pixels; | 136 | int count, pixels; |
@@ -138,30 +142,39 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
138 | /* if immediate_load is 1, then dont delay image laoding as below, or */ | 142 | /* if immediate_load is 1, then dont delay image laoding as below, or */ |
139 | /* already data in this image - dont load it again */ | 143 | /* already data in this image - dont load it again */ |
140 | 144 | ||
141 | f = fopen(file, "rb"); | 145 | f = eina_file_open(file, 0); |
142 | if (!f) | 146 | if (!f) |
143 | { | 147 | { |
144 | xpm_parse_done(); | 148 | ERR("XPM ERROR: file failed to open"); |
145 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; | 149 | *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; |
146 | return EINA_FALSE; | 150 | return EINA_FALSE; |
147 | } | 151 | } |
148 | if (fread(s, 9, 1, f) != 1) | 152 | length = eina_file_size_get(f); |
153 | position = 0; | ||
154 | if (length < 9) | ||
149 | { | 155 | { |
150 | fclose(f); | 156 | ERR("XPM ERROR: file size, %i, is to small", length); |
151 | xpm_parse_done(); | 157 | eina_file_close(f); |
152 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 158 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
153 | return EINA_FALSE; | 159 | return EINA_FALSE; |
154 | } | 160 | } |
155 | rewind(f); | 161 | |
156 | s[9] = 0; | 162 | map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); |
157 | if (strcmp("/* XPM */", s)) | 163 | if (!map) |
158 | { | 164 | { |
159 | fclose(f); | 165 | ERR("XPM ERROR: file failed to mmap"); |
160 | xpm_parse_done(); | 166 | eina_file_close(f); |
161 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 167 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
162 | return EINA_FALSE; | 168 | return EINA_FALSE; |
163 | } | 169 | } |
164 | 170 | ||
171 | if (strncmp("/* XPM */", map, 9)) | ||
172 | { | ||
173 | ERR("XPM ERROR: header not found"); | ||
174 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | ||
175 | goto on_error; | ||
176 | } | ||
177 | |||
165 | i = 0; | 178 | i = 0; |
166 | j = 0; | 179 | j = 0; |
167 | cmap = NULL; | 180 | cmap = NULL; |
@@ -178,10 +191,8 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
178 | line = malloc(lsz); | 191 | line = malloc(lsz); |
179 | if (!line) | 192 | if (!line) |
180 | { | 193 | { |
181 | fclose(f); | ||
182 | xpm_parse_done(); | ||
183 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | 194 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; |
184 | return EINA_FALSE; | 195 | goto on_error; |
185 | } | 196 | } |
186 | 197 | ||
187 | backslash = 0; | 198 | backslash = 0; |
@@ -189,8 +200,8 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
189 | while (!done) | 200 | while (!done) |
190 | { | 201 | { |
191 | pc = c; | 202 | pc = c; |
192 | c = fgetc(f); | 203 | if (position == length) break ; |
193 | if (c == EOF) break; | 204 | c = (char) map[position++]; |
194 | if (!quote) | 205 | if (!quote) |
195 | { | 206 | { |
196 | if ((pc == '/') && (c == '*')) | 207 | if ((pc == '/') && (c == '*')) |
@@ -215,56 +226,38 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
215 | if (sscanf(line, "%i %i %i %i", &w, &h, &ncolors, &cpp) != 4) | 226 | if (sscanf(line, "%i %i %i %i", &w, &h, &ncolors, &cpp) != 4) |
216 | { | 227 | { |
217 | ERR("XPM ERROR: XPM file malformed header"); | 228 | ERR("XPM ERROR: XPM file malformed header"); |
218 | free(line); | ||
219 | fclose(f); | ||
220 | xpm_parse_done(); | ||
221 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; | 229 | *error = EVAS_LOAD_ERROR_CORRUPT_FILE; |
222 | return EINA_FALSE; | 230 | goto on_error; |
223 | } | 231 | } |
224 | if ((ncolors > 32766) || (ncolors < 1)) | 232 | if ((ncolors > 32766) || (ncolors < 1)) |
225 | { | 233 | { |
226 | ERR("XPM ERROR: XPM files with colors > 32766 or < 1 not supported"); | 234 | ERR("XPM ERROR: XPM files with colors > 32766 or < 1 not supported"); |
227 | free(line); | ||
228 | fclose(f); | ||
229 | xpm_parse_done(); | ||
230 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 235 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
231 | return EINA_FALSE; | 236 | goto on_error; |
232 | } | 237 | } |
233 | if ((cpp > 5) || (cpp < 1)) | 238 | if ((cpp > 5) || (cpp < 1)) |
234 | { | 239 | { |
235 | ERR("XPM ERROR: XPM files with characters per pixel > 5 or < 1not supported"); | 240 | ERR("XPM ERROR: XPM files with characters per pixel > 5 or < 1not supported"); |
236 | free(line); | ||
237 | fclose(f); | ||
238 | xpm_parse_done(); | ||
239 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; | 241 | *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; |
240 | return EINA_FALSE; | 242 | goto on_error; |
241 | } | 243 | } |
242 | if ((w > IMG_MAX_SIZE) || (w < 1)) | 244 | if ((w > IMG_MAX_SIZE) || (w < 1)) |
243 | { | 245 | { |
244 | ERR("XPM ERROR: Image width > IMG_MAX_SIZE or < 1 pixels for file"); | 246 | ERR("XPM ERROR: Image width > IMG_MAX_SIZE or < 1 pixels for file"); |
245 | free(line); | ||
246 | fclose(f); | ||
247 | xpm_parse_done(); | ||
248 | *error = EVAS_LOAD_ERROR_GENERIC; | 247 | *error = EVAS_LOAD_ERROR_GENERIC; |
249 | return EINA_FALSE; | 248 | goto on_error; |
250 | } | 249 | } |
251 | if ((h > IMG_MAX_SIZE) || (h < 1)) | 250 | if ((h > IMG_MAX_SIZE) || (h < 1)) |
252 | { | 251 | { |
253 | ERR("XPM ERROR: Image height > IMG_MAX_SIZE or < 1 pixels for file"); | 252 | ERR("XPM ERROR: Image height > IMG_MAX_SIZE or < 1 pixels for file"); |
254 | free(line); | ||
255 | fclose(f); | ||
256 | xpm_parse_done(); | ||
257 | *error = EVAS_LOAD_ERROR_GENERIC; | 253 | *error = EVAS_LOAD_ERROR_GENERIC; |
258 | return EINA_FALSE; | 254 | goto on_error; |
259 | } | 255 | } |
260 | if (IMG_TOO_BIG(w, h)) | 256 | if (IMG_TOO_BIG(w, h)) |
261 | { | 257 | { |
262 | ERR("XPM ERROR: Image just too big to ever allocate"); | 258 | ERR("XPM ERROR: Image just too big to ever allocate"); |
263 | free(line); | ||
264 | fclose(f); | ||
265 | xpm_parse_done(); | ||
266 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | 259 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; |
267 | return EINA_FALSE; | 260 | goto on_error; |
268 | } | 261 | } |
269 | 262 | ||
270 | if (!cmap) | 263 | if (!cmap) |
@@ -272,11 +265,8 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
272 | cmap = malloc(sizeof(struct _cmap) * ncolors); | 265 | cmap = malloc(sizeof(struct _cmap) * ncolors); |
273 | if (!cmap) | 266 | if (!cmap) |
274 | { | 267 | { |
275 | free(line); | ||
276 | fclose(f); | ||
277 | xpm_parse_done(); | ||
278 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | 268 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; |
279 | return EINA_FALSE; | 269 | goto on_error; |
280 | } | 270 | } |
281 | } | 271 | } |
282 | ie->w = w; | 272 | ie->w = w; |
@@ -398,24 +388,16 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
398 | ptr = evas_cache_image_pixels(ie); | 388 | ptr = evas_cache_image_pixels(ie); |
399 | if (!ptr) | 389 | if (!ptr) |
400 | { | 390 | { |
401 | free(cmap); | ||
402 | free(line); | ||
403 | fclose(f); | ||
404 | xpm_parse_done(); | ||
405 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; | 391 | *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; |
406 | return EINA_FALSE; | 392 | goto on_error; |
407 | } | 393 | } |
408 | pixels = w * h; | 394 | pixels = w * h; |
409 | end = ptr + pixels; | 395 | end = ptr + pixels; |
410 | } | 396 | } |
411 | else | 397 | else |
412 | { | 398 | { |
413 | free(cmap); | ||
414 | free(line); | ||
415 | fclose(f); | ||
416 | xpm_parse_done(); | ||
417 | *error = EVAS_LOAD_ERROR_NONE; | 399 | *error = EVAS_LOAD_ERROR_NONE; |
418 | return EINA_TRUE; | 400 | goto on_success; |
419 | } | 401 | } |
420 | } | 402 | } |
421 | else | 403 | else |
@@ -631,13 +613,21 @@ evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key __UN | |||
631 | break; | 613 | break; |
632 | } | 614 | } |
633 | 615 | ||
616 | on_success: | ||
634 | free(cmap); | 617 | free(cmap); |
635 | free(line); | 618 | free(line); |
636 | fclose(f); | ||
637 | 619 | ||
638 | xpm_parse_done(); | 620 | eina_file_map_free(f, (void*) map); |
621 | eina_file_close(f); | ||
622 | |||
639 | *error = EVAS_LOAD_ERROR_NONE; | 623 | *error = EVAS_LOAD_ERROR_NONE; |
640 | return EINA_TRUE; | 624 | return EINA_TRUE; |
625 | |||
626 | on_error: | ||
627 | free(line); | ||
628 | eina_file_map_free(f, (void*) map); | ||
629 | eina_file_close(f); | ||
630 | return EINA_FALSE; | ||
641 | } | 631 | } |
642 | 632 | ||
643 | static Eina_Bool | 633 | static Eina_Bool |
@@ -663,6 +653,14 @@ module_open(Evas_Module *em) | |||
663 | EINA_LOG_ERR("Can not create a module log domain."); | 653 | EINA_LOG_ERR("Can not create a module log domain."); |
664 | return 0; | 654 | return 0; |
665 | } | 655 | } |
656 | |||
657 | /* Shouldn't we make that PATH configurable ? */ | ||
658 | rgb_txt = eina_file_open("/usr/lib/X11/rgb.txt", 0); | ||
659 | if (!rgb_txt) rgb_txt = eina_file_open("/usr/X11/lib/X11/rgb.txt", 0); | ||
660 | if (!rgb_txt) rgb_txt = eina_file_open("/usr/X11R6/lib/X11/rgb.txt", 0); | ||
661 | if (!rgb_txt) rgb_txt = eina_file_open("/usr/openwin/lib/X11/rgb.txt", 0); | ||
662 | if (rgb_txt) | ||
663 | rgb_txt_map = eina_file_map_all(rgb_txt, EINA_FILE_SEQUENTIAL); | ||
666 | em->functions = (void *)(&evas_image_load_xpm_func); | 664 | em->functions = (void *)(&evas_image_load_xpm_func); |
667 | return 1; | 665 | return 1; |
668 | } | 666 | } |
@@ -670,6 +668,12 @@ module_open(Evas_Module *em) | |||
670 | static void | 668 | static void |
671 | module_close(Evas_Module *em __UNUSED__) | 669 | module_close(Evas_Module *em __UNUSED__) |
672 | { | 670 | { |
671 | if (rgb_txt) | ||
672 | { | ||
673 | eina_file_map_free(rgb_txt, rgb_txt_map); | ||
674 | eina_file_close(rgb_txt); | ||
675 | rgb_txt = NULL; | ||
676 | } | ||
673 | eina_log_domain_unregister(_evas_loader_xpm_log_dom); | 677 | eina_log_domain_unregister(_evas_loader_xpm_log_dom); |
674 | } | 678 | } |
675 | 679 | ||