diff options
Diffstat (limited to 'readcdf.c')
-rw-r--r-- | readcdf.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/readcdf.c b/readcdf.c index 0bcc116b98e3..9cd0ceb0de68 100644 --- a/readcdf.c +++ b/readcdf.c @@ -26,7 +26,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readcdf.c,v 1.26 2011/08/26 13:38:28 christos Exp $") +FILE_RCSID("@(#)$File: readcdf.c,v 1.29 2012/02/20 20:04:58 christos Exp $") #endif #include <stdlib.h> @@ -72,6 +72,16 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info, info[i].pi_u32) == -1) return -1; break; + case CDF_FLOAT: + if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf, + info[i].pi_f) == -1) + return -1; + break; + case CDF_DOUBLE: + if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf, + info[i].pi_d) == -1) + return -1; + break; case CDF_LENGTH32_STRING: case CDF_LENGTH32_WSTRING: len = info[i].pi_str.s_len; @@ -144,6 +154,8 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info, if (!NOTMIME(ms)) { if (str == NULL) return 0; + if (file_printf(ms, "application/%s", str) == -1) + return -1; } return 1; } @@ -161,30 +173,31 @@ cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h, return -1; if (NOTMIME(ms)) { - if (file_printf(ms, "Composite Document File V2 Document") == -1) + if (file_printf(ms, "Composite Document File V2 Document") + == -1) return -1; if (file_printf(ms, ", %s Endian", si.si_byte_order == 0xfffe ? "Little" : "Big") == -1) - return -1; + return -2; switch (si.si_os) { case 2: if (file_printf(ms, ", Os: Windows, Version %d.%d", si.si_os_version & 0xff, (uint32_t)si.si_os_version >> 8) == -1) - return -1; + return -2; break; case 1: if (file_printf(ms, ", Os: MacOS, Version %d.%d", (uint32_t)si.si_os_version >> 8, si.si_os_version & 0xff) == -1) - return -1; + return -2; break; default: if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os, si.si_os_version & 0xff, (uint32_t)si.si_os_version >> 8) == -1) - return -1; + return -2; break; } } @@ -192,7 +205,7 @@ cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h, m = cdf_file_property_info(ms, info, count); free(info); - return m; + return m == -1 ? -2 : m; } protected int @@ -261,7 +274,7 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf, #ifdef CDF_DEBUG cdf_dump_summary_info(&h, &scn); #endif - if ((i = cdf_file_summary_info(ms, &h, &scn)) == -1) + if ((i = cdf_file_summary_info(ms, &h, &scn)) < 0) expn = "Can't expand summary_info"; if (i == 0) { const char *str = "vnd.ms-office"; @@ -292,8 +305,10 @@ out1: free(sat.sat_tab); out0: if (i != 1) { - if (file_printf(ms, "Composite Document File V2 Document") == -1) - return -1; + if (i == -1) + if (file_printf(ms, "Composite Document File V2 Document") + == -1) + return -1; if (*expn) if (file_printf(ms, ", %s%s", corrupt, expn) == -1) return -1; |