fixed a memleak, fixed a bug in get date and time on a openfilehandle
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1703
This commit is contained in:
parent
fe74bebe4d
commit
f86f45110c
3 changed files with 24 additions and 14 deletions
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: dos_files.cpp,v 1.52 2004-02-02 19:20:38 qbix79 Exp $ */
|
||||
/* $Id: dos_files.cpp,v 1.53 2004-03-04 19:49:14 qbix79 Exp $ */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -966,19 +966,12 @@ bool DOS_GetFileDate(Bit16u entry, Bit16u* otime, Bit16u* odate)
|
|||
DOS_SetError(DOSERR_INVALID_HANDLE);
|
||||
return false;
|
||||
};
|
||||
struct stat stat_block;
|
||||
if (fstat(handle, &stat_block)!=0) {
|
||||
if (!Files[handle]->UpdateDateTimeFromHost()) {
|
||||
DOS_SetError(DOSERR_INVALID_HANDLE);
|
||||
return false;
|
||||
}
|
||||
struct tm *time;
|
||||
if ((time=localtime(&stat_block.st_mtime))!=0) {
|
||||
*otime = (time->tm_hour<<11)+(time->tm_min<<5)+(time->tm_sec/2); /* standard way. */
|
||||
*odate = ((time->tm_year-80)<<9)+((time->tm_mon+1)<<5)+(time->tm_mday);
|
||||
} else {
|
||||
*otime = 6;
|
||||
*odate = 4;
|
||||
}
|
||||
*otime = Files[handle]->time;
|
||||
*odate = Files[handle]->date;
|
||||
return true;
|
||||
};
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: drive_local.cpp,v 1.44 2004-01-11 16:48:32 qbix79 Exp $ */
|
||||
/* $Id: drive_local.cpp,v 1.45 2004-03-04 19:49:21 qbix79 Exp $ */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -39,6 +39,7 @@ public:
|
|||
bool Seek(Bit32u * pos,Bit32u type);
|
||||
bool Close();
|
||||
Bit16u GetInformation(void);
|
||||
bool UpdateDateTimeFromHost(void);
|
||||
private:
|
||||
FILE * fhandle;
|
||||
enum { NONE,READ,WRITE } last_action;
|
||||
|
@ -437,6 +438,21 @@ localFile::localFile(const char* _name, FILE * handle,Bit16u devinfo) {
|
|||
SetName(_name);
|
||||
}
|
||||
|
||||
bool localFile::UpdateDateTimeFromHost(void) {
|
||||
if(!open) return false;
|
||||
struct stat temp_stat;
|
||||
fstat(fileno(fhandle),&temp_stat);
|
||||
struct tm * ltime;
|
||||
if((ltime=localtime(&temp_stat.st_mtime))!=0) {
|
||||
time=DOS_PackTime(ltime->tm_hour,ltime->tm_min,ltime->tm_sec);
|
||||
date=DOS_PackDate(ltime->tm_year+1900,ltime->tm_mon+1,ltime->tm_mday);
|
||||
} else {
|
||||
time=1;date=1;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ********************************************
|
||||
// CDROM DRIVE
|
||||
// ********************************************
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue