mirror of
https://github.com/holub/mame
synced 2025-05-08 23:31:54 +03:00
Add an osd_truncate call to truncate files [O. Galibert]
This commit is contained in:
parent
dff9b4b28b
commit
72c4cc20f8
@ -166,6 +166,23 @@ file_error osd_read(osd_file *file, void *buffer, UINT64 offset, UINT32 length,
|
|||||||
file_error osd_write(osd_file *file, const void *buffer, UINT64 offset, UINT32 length, UINT32 *actual);
|
file_error osd_write(osd_file *file, const void *buffer, UINT64 offset, UINT32 length, UINT32 *actual);
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
osd_truncate: change the size of an open file
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
file - handle to a file previously opened via osd_open
|
||||||
|
|
||||||
|
offset - future size of the file
|
||||||
|
|
||||||
|
Return value:
|
||||||
|
|
||||||
|
a file_error describing any error that occurred while writing to
|
||||||
|
the file, or FILERR_NONE if no error occurred
|
||||||
|
-----------------------------------------------------------------------------*/
|
||||||
|
file_error osd_truncate(osd_file *file, UINT64 offset);
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
osd_rmfile: deletes a file
|
osd_rmfile: deletes a file
|
||||||
|
|
||||||
|
@ -359,6 +359,29 @@ file_error osd_write(osd_file *file, const void *buffer, UINT64 offset, UINT32 c
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================
|
||||||
|
// osd_truncate
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
file_error osd_truncate(osd_file *file, UINT64 offset)
|
||||||
|
{
|
||||||
|
UINT32 result;
|
||||||
|
|
||||||
|
switch (file->type)
|
||||||
|
{
|
||||||
|
case SDLFILE_FILE:
|
||||||
|
result = ftruncate(file->handle, offset);
|
||||||
|
if (!result)
|
||||||
|
return error_to_file_error(errno);
|
||||||
|
return FILERR_NONE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return FILERR_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================
|
//============================================================
|
||||||
// osd_close
|
// osd_close
|
||||||
//============================================================
|
//============================================================
|
||||||
|
@ -238,6 +238,43 @@ file_error osd_write(osd_file *file, const void *buffer, UINT64 offset, UINT32 l
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================
|
||||||
|
// osd_truncate
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
file_error osd_truncate(osd_file *file, UINT64 offset)
|
||||||
|
{
|
||||||
|
DWORD result;
|
||||||
|
LONG upper = offset >> 32;
|
||||||
|
|
||||||
|
switch (file->type)
|
||||||
|
{
|
||||||
|
case WINFILE_FILE:
|
||||||
|
// attempt to set the file pointer
|
||||||
|
result = SetFilePointer(file->handle, (UINT32)offset, &upper, FILE_BEGIN);
|
||||||
|
if (result == INVALID_SET_FILE_POINTER)
|
||||||
|
{
|
||||||
|
DWORD error = GetLastError();
|
||||||
|
if (error != NO_ERROR)
|
||||||
|
return win_error_to_mame_file_error(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// then perform the truncation
|
||||||
|
if (!SetEndOfFile(file->handle))
|
||||||
|
return win_error_to_mame_file_error(GetLastError());
|
||||||
|
break;
|
||||||
|
case WINFILE_SOCKET:
|
||||||
|
return FILERR_FAILURE;
|
||||||
|
break;
|
||||||
|
case WINFILE_PTTY:
|
||||||
|
return FILERR_FAILURE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return FILERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================
|
//============================================================
|
||||||
// osd_close
|
// osd_close
|
||||||
//============================================================
|
//============================================================
|
||||||
|
Loading…
Reference in New Issue
Block a user