* fhandler_raw.cc (fhandler_dev_raw::open): Eliminate compatibility
code since no Win32 device names are used anymore. * fhandler_tape.cc (fhandler_dev_tape::tape_set_blocksize): Allow 0 as blocksize to indicate variable blocksize. * path.cc (win32_device_name): Generate NT internal device names using upper/lower case names for readability. Generate \DosDevices\<letter>: device name for mount table compatibility devices.
This commit is contained in:
parent
2de2be2235
commit
081be67e75
|
@ -1,3 +1,14 @@
|
|||
2001-10-16 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_raw.cc (fhandler_dev_raw::open): Eliminate compatibility
|
||||
code since no Win32 device names are used anymore.
|
||||
* fhandler_tape.cc (fhandler_dev_tape::tape_set_blocksize): Allow
|
||||
0 as blocksize to indicate variable blocksize.
|
||||
* path.cc (win32_device_name): Generate NT internal device names
|
||||
using upper/lower case names for readability.
|
||||
Generate \DosDevices\<letter>: device name for mount table
|
||||
compatibility devices.
|
||||
|
||||
2001-10-16 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_tape.cc (fhandler_dev_tape::tape_status): Report
|
||||
|
|
|
@ -154,42 +154,32 @@ fhandler_dev_raw::open (path_conv *real_path, int flags, mode_t)
|
|||
flags &= ~(O_CREAT | O_TRUNC);
|
||||
flags |= O_BINARY;
|
||||
|
||||
if (get_device () == FH_FLOPPY && get_unit () >= 224)
|
||||
DWORD access = GENERIC_READ | SYNCHRONIZE;
|
||||
if (get_device () == FH_TAPE
|
||||
|| (flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY
|
||||
|| (flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDWR)
|
||||
access |= GENERIC_WRITE;
|
||||
|
||||
extern void str2buf2uni (UNICODE_STRING &, WCHAR *, const char *);
|
||||
UNICODE_STRING dev;
|
||||
WCHAR devname[MAX_PATH + 1];
|
||||
str2buf2uni (dev, devname, real_path->get_win32 ());
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
InitializeObjectAttributes (&attr, &dev, OBJ_CASE_INSENSITIVE, NULL, NULL);
|
||||
|
||||
HANDLE h;
|
||||
IO_STATUS_BLOCK io;
|
||||
NTSTATUS status = NtOpenFile (&h, access, &attr, &io, wincap.shared (),
|
||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||
if (!NT_SUCCESS (status))
|
||||
{
|
||||
/* Compatibility mode for old mount table device mapping. */
|
||||
if (!fhandler_base::open (real_path, flags))
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
DWORD access = GENERIC_READ | SYNCHRONIZE;
|
||||
if (get_device () == FH_TAPE
|
||||
|| (flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY
|
||||
|| (flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDWR)
|
||||
access |= GENERIC_WRITE;
|
||||
|
||||
extern void str2buf2uni (UNICODE_STRING &, WCHAR *, const char *);
|
||||
UNICODE_STRING dev;
|
||||
WCHAR devname[MAX_PATH + 1];
|
||||
str2buf2uni (dev, devname, real_path->get_win32 ());
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
InitializeObjectAttributes(&attr, &dev, OBJ_CASE_INSENSITIVE, NULL, NULL);
|
||||
|
||||
HANDLE h;
|
||||
IO_STATUS_BLOCK io;
|
||||
NTSTATUS status = NtOpenFile (&h, access, &attr, &io, wincap.shared (),
|
||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||
if (!NT_SUCCESS (status))
|
||||
{
|
||||
set_errno (RtlNtStatusToDosError (status));
|
||||
debug_printf ("NtOpenFile: NTSTATUS: %d, Win32: %E", status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
set_io_handle (h);
|
||||
set_flags (flags);
|
||||
set_errno (RtlNtStatusToDosError (status));
|
||||
debug_printf ("NtOpenFile: NTSTATUS: %d, Win32: %E", status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
set_io_handle (h);
|
||||
set_flags (flags);
|
||||
set_r_binary (O_BINARY);
|
||||
set_w_binary (O_BINARY);
|
||||
|
||||
|
|
|
@ -692,7 +692,7 @@ fhandler_dev_tape::tape_set_blocksize (long count)
|
|||
if (lasterr)
|
||||
return lasterr;
|
||||
|
||||
if (count < min || count > max)
|
||||
if (count != 0 && (count < min || count > max))
|
||||
return tape_error (ERROR_INVALID_PARAMETER, "tape_set_blocksize");
|
||||
|
||||
mp.BlockSize = count;
|
||||
|
|
|
@ -1010,18 +1010,18 @@ win32_device_name (const char *src_path, char *win32_path,
|
|||
__small_sprintf (win32_path, devfmt, unit == 8 ? "" : "u");
|
||||
break;
|
||||
case FH_TAPE:
|
||||
__small_sprintf (win32_path, "\\device\\tape%d", unit % 128);
|
||||
__small_sprintf (win32_path, "\\Device\\Tape%d", unit % 128);
|
||||
break;
|
||||
case FH_FLOPPY:
|
||||
if (unit < 16)
|
||||
__small_sprintf (win32_path, "\\device\\floppy%d", unit);
|
||||
__small_sprintf (win32_path, "\\Device\\Floppy%d", unit);
|
||||
else if (unit < 32)
|
||||
__small_sprintf (win32_path, "\\device\\cdrom%d", unit - 16);
|
||||
__small_sprintf (win32_path, "\\Device\\CdRom%d", unit - 16);
|
||||
else if (unit < 224)
|
||||
__small_sprintf (win32_path, "\\device\\harddisk%d\\partition%d",
|
||||
__small_sprintf (win32_path, "\\Device\\Harddisk%d\\Partition%d",
|
||||
(unit - 32) / 16, unit % 16);
|
||||
else
|
||||
__small_sprintf (win32_path, "\\\\.\\%c:", unit - 224 + 'A');
|
||||
__small_sprintf (win32_path, "\\DosDevices\\%c:", unit - 224 + 'A');
|
||||
break;
|
||||
default:
|
||||
__small_sprintf (win32_path, devfmt, unit);
|
||||
|
|
Loading…
Reference in New Issue