From bed68d069a0290f42cbf500d8190e5b9ce0d6c5a Mon Sep 17 00:00:00 2001 From: Christophe Grenier Date: Fri, 30 May 2008 18:04:54 +0200 Subject: [PATCH] Extract date/time from Digital Speech Standard dss files --- src/file_dss.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/file_dss.c b/src/file_dss.c index 6bc5f4b4..e3688de4 100644 --- a/src/file_dss.c +++ b/src/file_dss.c @@ -25,6 +25,9 @@ #ifdef HAVE_STRING_H #include #endif +#ifdef HAVE_TIME_H +#include +#endif #include #include "types.h" #include "filegen.h" @@ -66,10 +69,23 @@ static int header_check_dss(const unsigned char *buffer, const unsigned int buff { if(memcmp(buffer,dss_header,sizeof(dss_header))==0) { + struct tm tm_time; + const unsigned char *date_asc=&buffer[0x26]; reset_file_recovery(file_recovery_new); file_recovery_new->extension=file_hint_dss.extension; /* File should be big enough to hold the comments */ file_recovery_new->min_filesize=100+0x31E; + memset(&tm_time, 0, sizeof(tm_time)); + tm_time.tm_sec=(date_asc[10]-'0')*10+(date_asc[11]-'0'); /* seconds 0-59 */ + tm_time.tm_min=(date_asc[8]-'0')*10+(date_asc[9]-'0'); /* minutes 0-59 */ + tm_time.tm_hour=(date_asc[6]-'0')*10+(date_asc[7]-'0'); /* hours 0-23*/ + tm_time.tm_mday=(date_asc[4]-'0')*10+(date_asc[5]-'0'); /* day of the month 1-31 */ + tm_time.tm_mon=(date_asc[2]-'0')*10+(date_asc[3]-'0')-1; /* month 1-12 */ + tm_time.tm_year=(date_asc[0]-'0')*10+(date_asc[1]-'0'); /* year */ + if(tm_time.tm_year<80) + tm_time.tm_year+=100; /* year 2000 - 2079 */ + tm_time.tm_isdst=-1; /* unknown daylight saving time */ + file_recovery_new->time=mktime(&tm_time); return 1; } return 0;