* devices.in (dev_cygdrive_storage): Map to \Device\Null.
(dev_storage): Map /dev and /dev/windows to \Device\Null. * devices.cc: Regenerate. * dir.cc (opendir): Create unique id. Explain why. * fhandler.h (fhandler_dev::get_dev): Implement inline. (fhandler_cygdrive::close): Drop declaration. (fhandler_cygdrive::get_dev): Implement inline. (fhandler_windows::get_hwnd): Ditto. (fhandler_windows::set_close_on_exec): Drop declaration. (fhandler_windows::fixup_after_fork): Ditto. * fhandler_dev.cc (fhandler_dev::open): Call fhandler_disk_file::open without O_CREAT flag. Explain why. Create \Device\Null handle if /dev/ doesn't actually exist. (fhandler_dev::close): Drop nohandle case. (fhandler_dev::fstatvfs): Drop nohandle check. Test for fs_got_fs instead. Set ST_RDONLY fs flag for simulated /dev. (fhandler_dev::opendir): If /dev doesn't exist, call open() to create fake \Device\Null handle. Don't set nohandle. Set dir_exists correctly. (fhandler_dev::rewinddir): Call fhandler_disk_file::rewinddir only if /dev is a real directory. * fhandler_disk_file.cc (fhandler_disk_file::opendir): If called for the cygdrive dir, call open() to create fake \Device\Null handle. Only attach __DIR_mounts buffer to dir if not called for cygdrive dir. Don't set nohandle. (fhandler_cygdrive::open): Create \Device\Null handle. (fhandler_cygdrive::close): Remove. (fhandler_cygdrive::fstatvfs): Set ST_RDONLY fs flag. * fhandler_windows.cc (fhandler_windows::open): Create \Device\Null handle. (fhandler_windows::read): Don't add io_handle to WFMO handle array. Change subsequent test for return value accordingly. Fix test for "message arrived". (fhandler_windows::set_close_on_exec): Remove. (fhandler_windows::fixup_after_fork): Remove. * path.h (path_conv::set_path): Make sure wide_path is NULL when setting a new path. * select.cc (peek_windows): Use correct hWnd value, not io_handle. (fhandler_windows::select_read): Don't use io_handle as wait object. (fhandler_windows::select_write): Ditto. (fhandler_windows::select_except): Ditto.
This commit is contained in:
@ -1045,6 +1045,8 @@ public:
|
||||
void rewinddir (DIR *);
|
||||
|
||||
fhandler_dev (void *) {}
|
||||
dev_t get_dev () { return dir_exists ? pc.fs_serial_number ()
|
||||
: get_device (); }
|
||||
|
||||
void copyto (fhandler_base *x)
|
||||
{
|
||||
@ -1075,7 +1077,6 @@ class fhandler_cygdrive: public fhandler_disk_file
|
||||
public:
|
||||
fhandler_cygdrive ();
|
||||
int open (int flags, mode_t mode);
|
||||
int close ();
|
||||
DIR __reg2 *opendir (int fd);
|
||||
int __reg3 readdir (DIR *, dirent *);
|
||||
void rewinddir (DIR *);
|
||||
@ -1084,6 +1085,7 @@ class fhandler_cygdrive: public fhandler_disk_file
|
||||
int __reg2 fstatvfs (struct statvfs *buf);
|
||||
|
||||
fhandler_cygdrive (void *) {}
|
||||
dev_t get_dev () { return get_device (); }
|
||||
|
||||
void copyto (fhandler_base *x)
|
||||
{
|
||||
@ -1726,6 +1728,7 @@ class fhandler_windows: public fhandler_base
|
||||
public:
|
||||
fhandler_windows ();
|
||||
int is_windows () { return 1; }
|
||||
HWND get_hwnd () { return hWnd_; }
|
||||
int open (int flags, mode_t mode = 0);
|
||||
ssize_t __stdcall write (const void *ptr, size_t len);
|
||||
void __reg3 read (void *ptr, size_t& len);
|
||||
@ -1733,8 +1736,6 @@ class fhandler_windows: public fhandler_base
|
||||
off_t lseek (off_t, int) { return 0; }
|
||||
int close () { return 0; }
|
||||
|
||||
void set_close_on_exec (bool val);
|
||||
void fixup_after_fork (HANDLE parent);
|
||||
select_record *select_read (select_stuff *);
|
||||
select_record *select_write (select_stuff *);
|
||||
select_record *select_except (select_stuff *);
|
||||
|
Reference in New Issue
Block a user