Mercurial > geeqie
comparison src/image-overlay.c @ 865:8d0c91a0f461
do not read keywords and comment between exif_read_fd and exif_free_fd
calls (fd->exif does not have reference counting)
author | nadvornik |
---|---|
date | Fri, 27 Jun 2008 21:35:21 +0000 |
parents | 30e1f4370215 |
children | c879a9a4f186 |
comparison
equal
deleted
inserted
replaced
864:f40509d56fe3 | 865:8d0c91a0f461 |
---|---|
212 guint pos, prev; | 212 guint pos, prev; |
213 guint last; | 213 guint last; |
214 gchar *name, *data; | 214 gchar *name, *data; |
215 GString *new; | 215 GString *new; |
216 gchar *ret; | 216 gchar *ret; |
217 ExifData *exif; | |
218 | 217 |
219 if (!str || !*str) return g_strdup(""); | 218 if (!str || !*str) return g_strdup(""); |
220 | 219 |
221 new = g_string_new(str); | 220 new = g_string_new(str); |
222 | 221 |
223 exif = exif_read_fd(imd->image_fd); | |
224 prev = 0; | 222 prev = 0; |
225 last = FALSE; | 223 last = FALSE; |
226 | 224 |
227 while (TRUE) | 225 while (TRUE) |
228 { | 226 { |
279 { | 277 { |
280 comment_read(imd->image_fd, NULL, &data); | 278 comment_read(imd->image_fd, NULL, &data); |
281 } | 279 } |
282 else | 280 else |
283 { | 281 { |
282 /* | |
283 keywords and comment can't be read between exif_read_fd and exif_free_fd calls | |
284 because fd->exif does not count references | |
285 on the other hand, it is OK to call it in the loop because it is cached | |
286 */ | |
287 | |
288 ExifData *exif; | |
289 exif = exif_read_fd(imd->image_fd); | |
290 | |
284 data = g_strdup(g_hash_table_lookup(vars, name)); | 291 data = g_strdup(g_hash_table_lookup(vars, name)); |
285 if (data && strcmp(name, "zoom") == 0) imd->overlay_show_zoom = TRUE; | 292 if (data && strcmp(name, "zoom") == 0) imd->overlay_show_zoom = TRUE; |
286 if (!data && exif) | 293 if (!data && exif) |
287 data = exif_get_data_as_text(exif, name); | 294 data = exif_get_data_as_text(exif, name); |
295 exif_free_fd(imd->image_fd, exif); | |
288 } | 296 } |
289 if (data && *data && limit > 0 && strlen(data) > limit + 3) | 297 if (data && *data && limit > 0 && strlen(data) > limit + 3) |
290 { | 298 { |
291 gchar *new_data = g_strdup_printf("%-*.*s...", limit, limit, data); | 299 gchar *new_data = g_strdup_printf("%-*.*s...", limit, limit, data); |
292 g_free(data); | 300 g_free(data); |
373 last = data ? TRUE : last; | 381 last = data ? TRUE : last; |
374 g_free(name); | 382 g_free(name); |
375 g_free(data); | 383 g_free(data); |
376 } | 384 } |
377 | 385 |
378 exif_free_fd(imd->image_fd, exif); | |
379 /* search and destroy empty lines */ | 386 /* search and destroy empty lines */ |
380 end = new->str; | 387 end = new->str; |
381 while ((start = strchr(end, '\n'))) | 388 while ((start = strchr(end, '\n'))) |
382 { | 389 { |
383 end = start; | 390 end = start; |