OSDN Git Service

* fhandler_tape.cc (mtinfo_drive::get_pos): Only set partition if
authorcorinna <corinna>
Wed, 31 Mar 2004 12:04:05 +0000 (12:04 +0000)
committercorinna <corinna>
Wed, 31 Mar 2004 12:04:05 +0000 (12:04 +0000)
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.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_tape.cc
winsup/cygwin/net.cc

index 27b0d73..297d8a3 100644 (file)
@@ -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>
index bbcc670..4cebc13 100644 (file)
@@ -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;
 
index b53dacd..0bdff32 100644 (file)
@@ -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);