fprintf(msg_tmp_fp, " - elapsed time: %3.5lf sec\n", end_time - start_time); \
fflush(msg_tmp_fp); fclose(msg_tmp_fp); } }
+#define SAFE_FREE(src) { if (src) {free(src); src = NULL; } }
+
typedef struct _mmfile_value {
int len;
union {
#define READ_FROM_FILE(FILE_PATH, data, size) \
do { \
FILE *fp = fopen(FILE_PATH, "r"); \
+ long lsize = 0; \
if (fp) { \
if (fseek(fp, 0, SEEK_END) < 0) { printf("fseek failed\n"); fclose(fp); break; } \
- size = ftell(fp); \
+ lsize = ftell(fp); \
+ if (lsize <= 0) { printf("ftell failed\n"); fclose(fp); break; } \
if (fseek(fp, 0, SEEK_SET) < 0) { printf("fseek failed\n"); fclose(fp); break; } \
- if (size > 0) data = malloc(size); \
- if (data != NULL) { if (fread(data, sizeof(char), size, fp) != size) { printf("fread error\n"); } } \
+ data = malloc(lsize); \
+ if (!data) { printf("ftell failed\n"); fclose(fp); break; } \
+ if (fread(data, sizeof(char), lsize, fp) != (size_t)lsize) { printf("fread error\n"); SAFE_FREE(data); fclose(fp); break; } \
fclose(fp); \
+ size = (unsigned int)lsize; \
printf("file size = %d\n", size); \
} \
} while (0)
READ_FROM_FILE(filename, buffer, file_size);
ret = mm_file_create_content_attrs_from_memory(&content_attrs, buffer, file_size, MM_FILE_FORMAT_3GP);
+ SAFE_FREE(buffer);
}
if (ret == FILEINFO_ERROR_NONE && content_attrs) {
READ_FROM_FILE(filename, buffer, file_size);
ret = mm_file_create_tag_attrs_from_memory(&tag_attrs, buffer, file_size, MM_FILE_FORMAT_3GP);
+ SAFE_FREE(buffer);
}
if (ret == FILEINFO_ERROR_NONE && tag_attrs) {
READ_FROM_FILE(filename, buffer, file_size);
ret = mm_file_get_video_frame_from_memory(buffer, file_size, time_stamp, is_accurate, (unsigned char **)&_frame, &_frame_size, &width, &height);
+ SAFE_FREE(buffer);
}
if (ret != FILEINFO_ERROR_NONE)