break;
}
entry = exif_entry_new_mem (data->priv->mem);
+ if (!entry) {
+ exif_log (data->priv->log, EXIF_LOG_CODE_NO_MEMORY, "ExifData",
+ "Could not allocate memory");
+ return;
+ }
if (exif_data_load_data_entry (data, entry, d, ds,
offset + 12 * i))
exif_content_add_entry (data->ifd[ifd], entry);
}
}
+static void
+clear_entry (ExifEntry *e)
+{
+ e->components = 0;
+ e->size = 0;
+}
+
/*! Get a value and convert it to an ExifShort.
* \bug Not all types are converted that could be converted and no indication
* is made when that occurs
if (e->size < 8) {
e->data = exif_entry_realloc (e, e->data, 8 + e->size);
if (!e->data) {
- e->size = 0;
- e->components = 0;
+ clear_entry(e);
return;
}
memcmp (e->data, "\0\0\0\0\0\0\0\0", 8)) {
e->data = exif_entry_realloc (e, e->data, 8 + e->size);
if (!e->data) {
- e->size = 0;
- e->components = 0;
+ clear_entry(e);
break;
}
e->format = EXIF_FORMAT_LONG;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
break;
/* SHORT, 1 component, no default */
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 0);
break;
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 1);
break;
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 2);
break;
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 3);
break;
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 0xffff);
break;
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 8);
exif_set_short (
e->data + exif_format_get_size (e->format),
e->format = EXIF_FORMAT_SHORT;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
exif_set_short (e->data, o, 2);
exif_set_short (
e->data + exif_format_get_size (e->format),
e->format = EXIF_FORMAT_SRATIONAL;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
break;
/* RATIONAL, 1 component, no default */
e->format = EXIF_FORMAT_RATIONAL;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
break;
/* RATIONAL, 1 component, default 72/1 */
e->format = EXIF_FORMAT_RATIONAL;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
r.numerator = 72;
r.denominator = 1;
exif_set_rational (e->data, o, r);
e->format = EXIF_FORMAT_RATIONAL;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
break;
/* RATIONAL, 6 components */
e->format = EXIF_FORMAT_RATIONAL;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
r.denominator = 1;
r.numerator = 0;
exif_set_rational (e->data, o, r);
e->format = EXIF_FORMAT_ASCII;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
snprintf ((char *) e->data, e->size,
"%04i:%02i:%02i %02i:%02i:%02i",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
e->format = EXIF_FORMAT_ASCII;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
strncpy ((char *)e->data, _("[None]"), e->size);
break;
/* ASCII, default "[None]\0[None]\0" */
e->format = EXIF_FORMAT_ASCII;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
strcpy (((char *)e->data) + 0, _("[None]"));
strcpy (((char *)e->data) + strlen (_("[None]")) + 1, _("[None]"));
break;
e->format = EXIF_FORMAT_UNDEFINED;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
e->data[0] = 0x01;
break;
e->format = EXIF_FORMAT_UNDEFINED;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
e->data[0] = 0x03;
break;
e->format = EXIF_FORMAT_UNDEFINED;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
memcpy (e->data, "0100", 4);
break;
e->format = EXIF_FORMAT_UNDEFINED;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
memcpy (e->data, "0210", 4);
break;
e->format = EXIF_FORMAT_UNDEFINED;
e->size = exif_format_get_size (e->format) * e->components;
e->data = exif_entry_alloc (e, e->size);
- if (!e->data) break;
+ if (!e->data) { clear_entry(e); break; }
e->data[0] = 1;
e->data[1] = 2;
e->data[2] = 3;
printf ("Creating EXIF data...\n");
ed = exif_data_new ();
+ if (!ed) {
+ fprintf(stderr, "Out of memory\n");
+ exit(13);
+ }
+
exif_data_set_data_type (ed, EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY);
printf ("Fill EXIF data with all necessary entries to follow specs...\n");
/* Add a dummy thumbnail */
ed->size = 4;
ed->data = calloc(1, ed->size);
+ if (!ed->data) {
+ fprintf(stderr, "Out of memory\n");
+ exif_data_unref (ed);
+ exit(13);
+ }
exif_data_dump (ed);
printf ("Writing %i byte(s) EXIF data to loader...\n", ebs);
loader = exif_loader_new ();
+ if (!loader) {
+ fprintf(stderr, "Out of memory\n");
+ free (eb);
+ exit(13);
+ }
size[0] = (unsigned char) ebs;
size[1] = (unsigned char) (ebs >> 8);
exif_loader_write (loader, size, 2);
printf ("Wrote %i byte(s).\n", i);
free (eb);
ed = exif_loader_get_data (loader);
+ if (!ed) {
+ fprintf(stderr, "Out of memory\n");
+ exit(13);
+ }
exif_loader_unref (loader);
exif_data_dump (ed);
exif_data_unref (ed);
char v[1024], *p;
ExifMnoteData *md;
- fprintf (stdout, "Byte order: %s\n",
+ printf("Byte order: %s\n",
exif_byte_order_get_name (exif_data_get_byte_order (d)));
- fprintf (stdout, "Parsing maker note...\n");
+ printf("Parsing maker note...\n");
md = exif_data_get_mnote_data (d);
if (!md) {
fprintf (stderr, "Could not parse maker note!\n");
return 1;
}
- fprintf (stdout, "Increasing ref-count...\n");
+ printf("Increasing ref-count...\n");
exif_mnote_data_ref (md);
- fprintf (stdout, "Decreasing ref-count...\n");
+ printf("Decreasing ref-count...\n");
exif_mnote_data_unref (md);
- fprintf (stdout, "Counting entries...\n");
+ printf("Counting entries...\n");
c = exif_mnote_data_count (md);
- fprintf (stdout, "Found %i entries.\n", c);
+ printf("Found %i entries.\n", c);
for (i = 0; i < c; i++) {
- fprintf (stdout, "Dumping entry number %i...\n", i);
- fprintf (stdout, " Name: '%s'\n",
+ printf("Dumping entry number %i...\n", i);
+ printf(" Name: '%s'\n",
exif_mnote_data_get_name (md, i));
- fprintf (stdout, " Title: '%s'\n",
+ printf(" Title: '%s'\n",
exif_mnote_data_get_title (md, i));
- fprintf (stdout, " Description: '%s'\n",
+ printf(" Description: '%s'\n",
exif_mnote_data_get_description (md, i));
p = exif_mnote_data_get_value (md, i, v, sizeof (v));
- if (p) { fprintf (stdout, " Value: '%s'\n", v); }
+ if (p) { printf(" Value: '%s'\n", v); }
}
return 0;
return 1;
}
- fprintf (stdout, "Loading '%s'...\n", argv[1]);
+ printf("Loading '%s'...\n", argv[1]);
d = exif_data_new_from_file (argv[1]);
if (!d) {
fprintf (stderr, "Could not load data from '%s'!\n", argv[1]);
return 1;
}
- fprintf (stdout, "Loaded '%s'.\n", argv[1]);
+ printf("Loaded '%s'.\n", argv[1]);
- fprintf (stdout, "######### Test 1 #########\n");
+ printf("######### Test 1 #########\n");
r = test_exif_data (d);
if (r) return r;
exif_data_save_data (d, &buf, &buf_size);
exif_data_unref (d);
d = exif_data_new_from_data (buf, buf_size);
+ if (!d) {
+ fprintf (stderr, "Could not load data from buf!\n");
+ return 1;
+ }
free (buf);
- fprintf (stdout, "######### Test 2 #########\n");
+ printf ("######### Test 2 #########\n");
r = test_exif_data (d);
if (r) return r;
- fprintf (stdout, "Test successful!\n");
+ printf ("Test successful!\n");
return 1;
}
printf("File %s\n", fn);
d = exif_data_new_from_file(filename);
+ if (!d) {
+ fprintf (stderr, "Could not load data from '%s'!\n", filename);
+ return;
+ }
printf("Byte order: %s\n",
exif_byte_order_get_name(exif_data_get_byte_order(d)));
data = exif_data_new ();
if (!data) {
- printf ("Error running exif_data_new()\n");
+ fprintf (stderr, "Error running exif_data_new()\n");
exit(13);
}
for (i=0; i < sizeof(trunc_test_tags)/sizeof(trunc_test_tags[0]); ++i) {
e = exif_entry_new ();
if (!e) {
- printf ("Error running exif_entry_new()\n");
+ fprintf (stderr, "Error running exif_entry_new()\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
++i) {
e = exif_entry_new ();
if (!e) {
- printf ("Error running exif_entry_new()\n");
+ fprintf (stderr, "Error running exif_entry_new()\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
++i) {
e = exif_entry_new ();
if (!e) {
- printf ("Error running exif_entry_new()\n");
+ fprintf (stderr, "Error running exif_entry_new()\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
/* Create a memory allocator to manage the remaining ExifEntry structs */
mem = exif_mem_new_default();
if (!mem) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
/* EXIF_TAG_SUB_SEC_TIME initialization/truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
memcpy(e->data, subsec, e->size);
/* EXIF_TAG_USER_COMMENT initialization/truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
memcpy(e->data, user_comment, e->size);
/* EXIF_TAG_XP_COMMENT truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
memcpy(e->data, xp_comment, e->size);
/* EXIF_TAG_INTEROPERABILITY_VERSION truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_INTEROPERABILITY], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
memcpy(e->data, interop, e->size);
/* EXIF_TAG_GPS_VERSION_ID truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_GPS], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
e->data[0] = 2;
/* EXIF_TAG_GPS_ALTITUDE_REF truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_GPS], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
e->data[0] = 1;
/* EXIF_TAG_GPS_TIME_STAMP truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_GPS], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_set_rational(e->data, exif_data_get_byte_order (data), gpsh);
/* EXIF_TAG_SUBJECT_AREA truncation tests */
e = exif_entry_new_mem (mem);
if (!e) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_content_add_entry (data->ifd[EXIF_IFD_0], e);
/* Allocate memory to use for holding the tag data */
e->data = exif_mem_alloc(mem, e->size);
if (!e->data) {
- printf ("Out of memory\n");
+ fprintf (stderr, "Out of memory\n");
exit(13);
}
exif_set_short(e->data, exif_data_get_byte_order (data), 123);