From: Jan P. <pa...@us...> - 2004-05-11 14:25:30
|
Update of /cvsroot/libexif/libexif/libjpeg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8087 Modified Files: jpeg-data.c jpeg-data.h Log Message: jpeg_data_set_exif_data unreferences previous exif info to prevent memory leak. jpeg_data_save_file now returns 1 if success and 0 if failure. Incomplete file is now deleted. Index: jpeg-data.c =================================================================== RCS file: /cvsroot/libexif/libexif/libjpeg/jpeg-data.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- jpeg-data.c 28 Oct 2003 18:53:44 -0000 1.15 +++ jpeg-data.c 11 May 2004 14:25:15 -0000 1.16 @@ -69,26 +69,32 @@ data->count++; } -void +/* jpeg_data_save_file returns 1 on succes, 0 on failure */ +int jpeg_data_save_file (JPEGData *data, const char *path) { FILE *f; unsigned char *d = NULL; - unsigned int size = 0; + unsigned int size = 0, written; jpeg_data_save_data (data, &d, &size); if (!d) - return; + return 0; remove (path); f = fopen (path, "wb"); if (!f) { free (d); - return; + return 0; } - fwrite (d, sizeof (char), size, f); + written = fwrite (d, 1, size, f); fclose (f); free (d); + if (written == size) { + return 1; + } + remove(path); + return 0; } void @@ -422,6 +428,8 @@ memmove (&data->sections[2], &data->sections[1], sizeof (JPEGSection) * (data->count - 2)); section = &data->sections[1]; + } else { + exif_data_unref (section->content.app1); } section->marker = JPEG_MARKER_APP1; section->content.app1 = exif_data; Index: jpeg-data.h =================================================================== RCS file: /cvsroot/libexif/libexif/libjpeg/jpeg-data.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- jpeg-data.h 15 Dec 2002 11:41:11 -0000 1.4 +++ jpeg-data.h 11 May 2004 14:25:15 -0000 1.5 @@ -76,7 +76,7 @@ unsigned int *size); void jpeg_data_load_file (JPEGData *data, const char *path); -void jpeg_data_save_file (JPEGData *data, const char *path); +int jpeg_data_save_file (JPEGData *data, const char *path); void jpeg_data_set_exif_data (JPEGData *data, ExifData *exif_data); ExifData *jpeg_data_get_exif_data (JPEGData *data); |