#include <freeldr.h>
#include <debug.h>
-DBG_DEFAULT_CHANNEL(WARNING);
+DBG_DEFAULT_CHANNEL(DISK);
BOOLEAN DriveMapInstalled = FALSE; // Tells us if we have already installed our drive map int 13h handler code
ULONG OldInt13HandlerAddress = 0; // Address of BIOS int 13h handler
ULONG DriveMapHandlerAddress = 0; // Linear address of our drive map handler
ULONG DriveMapHandlerSegOff = 0; // Segment:offset style address of our drive map handler
-#ifndef _MSC_VER
VOID DriveMapMapDrivesInSection(PCSTR SectionName)
{
- CHAR SettingName[80];
- CHAR SettingValue[80];
- CHAR ErrorText[260];
- CHAR Drive1[80];
- CHAR Drive2[80];
- ULONG SectionId;
- ULONG SectionItemCount;
- ULONG Index;
- ULONG Index2;
- DRIVE_MAP_LIST DriveMapList;
+ CHAR SettingName[80];
+ CHAR SettingValue[80];
+ CHAR Drive1[80];
+ CHAR Drive2[80];
+ ULONG_PTR SectionId;
+ ULONG SectionItemCount;
+ ULONG Index;
+ ULONG Index2;
+ DRIVE_MAP_LIST DriveMapList;
RtlZeroMemory(&DriveMapList, sizeof(DRIVE_MAP_LIST));
// Make sure we haven't exceeded the drive map max count
if (DriveMapList.DriveMapCount >= 4)
{
- sprintf(ErrorText, "Max DriveMap count exceeded in section [%s]:\n\n%s=%s", SectionName, SettingName, SettingValue);
- UiMessageBox(ErrorText);
+ UiMessageBox("Max DriveMap count exceeded in section [%s]:\n\n%s=%s", SectionName, SettingName, SettingValue);
continue;
}
// Make sure we got good values before we add them to the map
if (!DriveMapIsValidDriveString(Drive1) || !DriveMapIsValidDriveString(Drive2))
{
- sprintf(ErrorText, "Error in DriveMap setting in section [%s]:\n\n%s=%s", SectionName, SettingName, SettingValue);
- UiMessageBox(ErrorText);
+ UiMessageBox("Error in DriveMap setting in section [%s]:\n\n%s=%s", SectionName, SettingName, SettingValue);
continue;
}
BOOLEAN DriveMapIsValidDriveString(PCSTR DriveString)
{
- ULONG Index;
+ ULONG Index;
// Now verify that the user has given us appropriate strings
if ((strlen(DriveString) < 3) ||
- ((DriveString[0] != 'f') && (DriveString[0] != 'F') && (DriveString[0] != 'h') && (DriveString[0] != 'H')) ||
+ ((DriveString[0] != 'f') && (DriveString[0] != 'F') &&
+ (DriveString[0] != 'h') && (DriveString[0] != 'H')) ||
((DriveString[1] != 'd') && (DriveString[1] != 'D')))
{
return FALSE;
// Now verify that the user has given us appropriate numbers
// Make sure that only numeric characters were given
- for (Index=2; Index<strlen(DriveString); Index++)
+ for (Index = 2; Index < strlen(DriveString); Index++)
{
if (DriveString[Index] < '0' || DriveString[Index] > '9')
{
return FALSE;
}
}
+
// Now make sure that they are not outrageous values (i.e. hd90874)
if ((atoi(&DriveString[2]) < 0) || (atoi(&DriveString[2]) > 0xff))
{
return TRUE;
}
-#endif
UCHAR DriveMapGetBiosDriveNumber(PCSTR DeviceName)
{
- UCHAR BiosDriveNumber = 0;
+ UCHAR BiosDriveNumber = 0;
+
+ TRACE("DriveMapGetBiosDriveNumber(%s)\n", DeviceName);
// If they passed in a number string then just
// convert it to decimal and return it
if (DeviceName[0] >= '0' && DeviceName[0] <= '9')
{
- return atoi(DeviceName);
+ return (UCHAR)strtoul(DeviceName, NULL, 0);
}
// Convert the drive number string into a number
return BiosDriveNumber;
}
-#ifndef _MSC_VER
VOID DriveMapInstallInt13Handler(PDRIVE_MAP_LIST DriveMap)
{
- ULONG* RealModeIVT = (ULONG*)0x00000000;
- USHORT* BiosLowMemorySize = (USHORT*)0x00000413;
+ ULONG* RealModeIVT = (ULONG*)UlongToPtr(0x00000000);
+ USHORT* BiosLowMemorySize = (USHORT*)ULongToPtr(0x00000413);
if (!DriveMapInstalled)
{
DriveMapOldInt13HandlerAddress = OldInt13HandlerAddress;
// Copy the code to our reserved area
- RtlCopyMemory((PVOID)DriveMapHandlerAddress, &DriveMapInt13HandlerStart, ((ULONG)&DriveMapInt13HandlerEnd - (ULONG)&DriveMapInt13HandlerStart));
+ RtlCopyMemory(UlongToPtr(DriveMapHandlerAddress),
+ &DriveMapInt13HandlerStart,
+ ((PUCHAR)&DriveMapInt13HandlerEnd - (PUCHAR)&DriveMapInt13HandlerStart));
// Update the IVT
RealModeIVT[0x13] = DriveMapHandlerSegOff;
VOID DriveMapRemoveInt13Handler(VOID)
{
- ULONG* RealModeIVT = (ULONG*)0x00000000;
- USHORT* BiosLowMemorySize = (USHORT*)0x00000413;
+ ULONG* RealModeIVT = (ULONG*)0x00000000;
+ USHORT* BiosLowMemorySize = (USHORT*)0x00000413;
if (DriveMapInstalled)
{
DriveMapInstalled = FALSE;
}
}
-#endif