mirror of
https://github.com/holub/mame
synced 2025-05-06 22:35:43 +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);
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
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
|
||||
|
||||
|
@ -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
|
||||
//============================================================
|
||||
|
@ -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
|
||||
//============================================================
|
||||
|
Loading…
Reference in New Issue
Block a user