diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2004-03-31 16:04:07 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2004-03-31 16:04:07 +0400 |
commit | decd3e5d72bb72dc93ea314583f5c25e18c8ff1d (patch) | |
tree | 6b7eb8569c18b0a8edb9012c07bcb7b39718b0dd | |
parent | 93ba120429991bd12645ef9c87e44d7464be75bb (diff) |
* fhandler_tape.cc (mtinfo_drive::get_pos): Only set partition if
GetTapePosition returned a non-zero partition number.
(mtinfo_drive::create_partitions): Reinitialize to partition 0.
Support TAPE_DRIVE_INITIATOR and TAPE_DRIVE_FIXED partitioning.
(mtinfo_drive::set_partition): Initialize new partition.
(mtinfo_drive::status): Readd accidentally dropped setting of mt_resid.
* net.cc (wsock_event::prepare): Always print debug output in case
of error.
-rw-r--r-- | winsup/cygwin/ChangeLog | 12 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_tape.cc | 31 | ||||
-rw-r--r-- | winsup/cygwin/net.cc | 5 |
3 files changed, 42 insertions, 6 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 27b0d7306..297d8a385 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,17 @@ 2004-03-31 Corinna Vinschen <corinna@vinschen.de> + * fhandler_tape.cc (mtinfo_drive::get_pos): Only set partition if + GetTapePosition returned a non-zero partition number. + (mtinfo_drive::create_partitions): Reinitialize to partition 0. + Support TAPE_DRIVE_INITIATOR and TAPE_DRIVE_FIXED partitioning. + (mtinfo_drive::set_partition): Initialize new partition. + (mtinfo_drive::status): Readd accidentally dropped setting of mt_resid. + + * net.cc (wsock_event::prepare): Always print debug output in case + of error. + +2004-03-31 Corinna Vinschen <corinna@vinschen.de> + * fhandler_socket.cc (fhandler_socket::sendmsg): Add SIGPIPE handling. 2004-03-31 Corinna Vinschen <corinna@vinschen.de> diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc index bbcc67063..4cebc13a8 100644 --- a/winsup/cygwin/fhandler_tape.cc +++ b/winsup/cygwin/fhandler_tape.cc @@ -324,7 +324,8 @@ mtinfo_drive::get_pos (HANDLE mt, long *ppartition, long *pblock) TAPE_FUNC (GetTapePosition (mt, TAPE_ABSOLUTE_POSITION, &p, &low, &high)); if (!lasterr) { - partition = (long) (p > 0 ? p - 1 : p); + if (p > 0) + partition = (long) p - 1; block = (long) low; if (ppartition) *ppartition= partition; @@ -511,9 +512,26 @@ mtinfo_drive::create_partitions (HANDLE mt, long count) return ERROR_INVALID_PARAMETER; if (set_pos (mt, TAPE_REWIND, 0, false)) goto out; + partition = 0; + part (partition)->initialize (0); debug_printf ("Format tape with %s partition(s)", count <= 0 ? "one" : "two"); - TAPE_FUNC (CreateTapePartition (mt, TAPE_SELECT_PARTITIONS, - count <= 0 ? 1 : 2, 0)); + if (get_feature (TAPE_DRIVE_INITIATOR)) + { + if (count <= 0) + TAPE_FUNC (CreateTapePartition (mt, TAPE_INITIATOR_PARTITIONS, + count <= 0 ? 0 : 2, (DWORD) count)); + } + else if (get_feature (TAPE_DRIVE_FIXED)) + { + /* This is supposed to work for Tandberg SLR drivers up to version + 1.6 which missed to set the TAPE_DRIVE_INITIATOR flag. According + to Tandberg, CreateTapePartition(TAPE_FIXED_PARTITIONS) apparently + does not ignore the dwCount parameter. Go figure! */ + TAPE_FUNC (CreateTapePartition (mt, TAPE_FIXED_PARTITIONS, + count <= 0 ? 0 : 2, (DWORD) count)); + } + else + lasterr = ERROR_INVALID_PARAMETER; out: return error ("partition"); } @@ -545,7 +563,11 @@ mtinfo_drive::set_partition (HANDLE mt, long count) lasterr = err; } else - partition = count; + { + partition = count; + if (part (partition)->block == -1) + part (partition)->initialize (0); + } } return error ("set_partition"); } @@ -727,6 +749,7 @@ mtinfo_drive::status (HANDLE mt, struct mtget *get) if (!notape) { + get->mt_resid = partition; get->mt_fileno = part (partition)->file; get->mt_blkno = part (partition)->fblock; diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index b53dacdf7..0bdff32e3 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -54,8 +54,9 @@ bool wsock_event::prepare (int sock, long event_mask) { WSASetLastError (0); - if ((event = WSACreateEvent ()) != WSA_INVALID_EVENT - && WSAEventSelect (sock, event, event_mask) == SOCKET_ERROR) + if ((event = WSACreateEvent ()) == WSA_INVALID_EVENT) + debug_printf ("WSACreateEvent: %E"); + else if (WSAEventSelect (sock, event, event_mask) == SOCKET_ERROR) { debug_printf ("WSAEventSelect: %E"); WSACloseEvent (event); |