bximage_new on win32
- fixed link failure on MSVC - added win32 specific code for flat image creation
This commit is contained in:
parent
39f2f172b5
commit
f923e5e4cf
@ -249,7 +249,7 @@ bxcommit@EXE@: misc/bxcommit.o
|
|||||||
@LINK_CONSOLE@ misc/bxcommit.o
|
@LINK_CONSOLE@ misc/bxcommit.o
|
||||||
|
|
||||||
bximage_new@EXE@: misc/bximage_new.o misc/hdimage.o misc/vmware3.o misc/vmware4.o misc/vpc-img.o
|
bximage_new@EXE@: misc/bximage_new.o misc/hdimage.o misc/vmware3.o misc/vmware4.o misc/vpc-img.o
|
||||||
@LINK_CONSOLE@ misc/bximage_new.o misc/hdimage.o misc/vmware3.o misc/vmware4.o misc/vpc-img.o
|
@LINK_CONSOLE@ $(BXIMAGE_LINK_OPTS) misc/bximage_new.o misc/hdimage.o misc/vmware3.o misc/vmware4.o misc/vpc-img.o
|
||||||
|
|
||||||
niclist@EXE@: misc/niclist.o
|
niclist@EXE@: misc/niclist.o
|
||||||
@LINK_CONSOLE@ misc/niclist.o
|
@LINK_CONSOLE@ misc/niclist.o
|
||||||
|
@ -355,7 +355,46 @@ void create_flat_image(const char *filename, Bit64u size)
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
void create_flat_image_win32(const char *filename, Bit64u size)
|
void create_flat_image_win32(const char *filename, Bit64u size)
|
||||||
{
|
{
|
||||||
// TODO
|
HANDLE hFile;
|
||||||
|
LARGE_INTEGER pos;
|
||||||
|
DWORD dwCount, errCode;
|
||||||
|
USHORT mode;
|
||||||
|
char buffer[1024];
|
||||||
|
|
||||||
|
hFile = CreateFile(filename, GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if (hFile == INVALID_HANDLE_VALUE) {
|
||||||
|
// attempt to print an error
|
||||||
|
#ifdef HAVE_PERROR
|
||||||
|
sprintf(buffer, "while opening '%s' for writing", filename);
|
||||||
|
perror(buffer);
|
||||||
|
#endif
|
||||||
|
fatal("ERROR: Could not write disk image");
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLastError(NO_ERROR);
|
||||||
|
mode = COMPRESSION_FORMAT_DEFAULT;
|
||||||
|
dwCount = 0;
|
||||||
|
memset(buffer, 0, 512);
|
||||||
|
WriteFile(hFile, buffer, 512, &dwCount, NULL); // set the first sector to 0, Win98 doesn't zero out the file
|
||||||
|
// if there is a write at/over the end
|
||||||
|
DeviceIoControl(hFile, FSCTL_SET_COMPRESSION, &mode, sizeof(mode), NULL, 0, &dwCount, NULL);
|
||||||
|
pos.u.LowPart = (unsigned long)((size - 512));
|
||||||
|
pos.u.HighPart = (unsigned long)((size - 512) >> 32);
|
||||||
|
pos.u.LowPart = SetFilePointer(hFile, pos.u.LowPart, &pos.u.HighPart, FILE_BEGIN);
|
||||||
|
memset(buffer, 0, 512);
|
||||||
|
if ((pos.u.LowPart == 0xffffffff && GetLastError() != NO_ERROR) ||
|
||||||
|
!WriteFile(hFile, buffer, 512, &dwCount, NULL) || (dwCount != 512)) {
|
||||||
|
errCode = GetLastError();
|
||||||
|
CloseHandle(hFile);
|
||||||
|
if (errCode == ERROR_DISK_FULL) {
|
||||||
|
fatal("\nERROR: Not enough space on disk for image!");
|
||||||
|
} else {
|
||||||
|
sprintf(buffer, "\nERROR: Disk image creation failed with error code %i!", errCode);
|
||||||
|
fatal(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(hFile);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -428,11 +467,11 @@ void create_hard_disk_image(const char *filename, int imgmode, Bit64u size)
|
|||||||
{
|
{
|
||||||
switch (imgmode) {
|
switch (imgmode) {
|
||||||
case BX_HDIMAGE_MODE_FLAT:
|
case BX_HDIMAGE_MODE_FLAT:
|
||||||
//#ifndef WIN32
|
#ifndef WIN32
|
||||||
create_flat_image(filename, size);
|
create_flat_image(filename, size);
|
||||||
//#else
|
#else
|
||||||
// create_flat_image_win32(filename, size);
|
create_flat_image_win32(filename, size);
|
||||||
//#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BX_HDIMAGE_MODE_GROWING:
|
case BX_HDIMAGE_MODE_GROWING:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user