* mtinfo.h (class mtinfo_part): Change type of block numbers to int64_t.
(mtinfo_part::initialize): Ditto for nblock parameter in declaration. (class mtinfo_drive): Change type of block number to int64_t. Change all parameters indicating a block number to int64_t in method declarations. * fhandler_tape.cc (mtinfo_part::initialize): Ditto in definition. (mtinfo_drive::get_pos): Ditto. Replace low and high with a ULARGE_INTEGER and use it's components in call to GetTapePosition. Store full value in block. (mtinfo_drive::_set_pos): Change type of count parameter to int64_t. Change call to SetTapePosition accordingly. (mtinfo_drive::set_pos): Change type of count parameter to int64_t. Change local variables holding block numbers accordingly. (mtinfo_drive::get_status): Don't bail out early if fetching media parameters fails. (mtinfo_drive::ioctl): Add explicit cast matching receiving type in MTTELL and MTIOCPOS calls.
This commit is contained in:
parent
8451a289cc
commit
6585330779
|
@ -1,3 +1,23 @@
|
||||||
|
2013-08-26 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* mtinfo.h (class mtinfo_part): Change type of block numbers to int64_t.
|
||||||
|
(mtinfo_part::initialize): Ditto for nblock parameter in declaration.
|
||||||
|
(class mtinfo_drive): Change type of block number to int64_t. Change
|
||||||
|
all parameters indicating a block number to int64_t in method
|
||||||
|
declarations.
|
||||||
|
* fhandler_tape.cc (mtinfo_part::initialize): Ditto in definition.
|
||||||
|
(mtinfo_drive::get_pos): Ditto. Replace low and high with a
|
||||||
|
ULARGE_INTEGER and use it's components in call to GetTapePosition.
|
||||||
|
Store full value in block.
|
||||||
|
(mtinfo_drive::_set_pos): Change type of count parameter to int64_t.
|
||||||
|
Change call to SetTapePosition accordingly.
|
||||||
|
(mtinfo_drive::set_pos): Change type of count parameter to int64_t.
|
||||||
|
Change local variables holding block numbers accordingly.
|
||||||
|
(mtinfo_drive::get_status): Don't bail out early if fetching media
|
||||||
|
parameters fails.
|
||||||
|
(mtinfo_drive::ioctl): Add explicit cast matching receiving type in
|
||||||
|
MTTELL and MTIOCPOS calls.
|
||||||
|
|
||||||
2013-08-23 Corinna Vinschen <corinna@vinschen.de>
|
2013-08-23 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* flock.cc (lockf_t::from_obj_name): Fix test for valid pid.
|
* flock.cc (lockf_t::from_obj_name): Fix test for valid pid.
|
||||||
|
|
|
@ -53,7 +53,7 @@ details. */
|
||||||
/* mtinfo_part */
|
/* mtinfo_part */
|
||||||
|
|
||||||
void
|
void
|
||||||
mtinfo_part::initialize (int32_t nblock)
|
mtinfo_part::initialize (int64_t nblock)
|
||||||
{
|
{
|
||||||
block = nblock;
|
block = nblock;
|
||||||
if (block == 0)
|
if (block == 0)
|
||||||
|
@ -353,18 +353,21 @@ mtinfo_drive::write (HANDLE mt, LPOVERLAPPED pov, const void *ptr, size_t &len)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
mtinfo_drive::get_pos (HANDLE mt, int32_t *ppartition, int32_t *pblock)
|
mtinfo_drive::get_pos (HANDLE mt, int32_t *ppartition, int64_t *pblock)
|
||||||
{
|
{
|
||||||
DWORD p, low, high;
|
DWORD p;
|
||||||
|
ULARGE_INTEGER b;
|
||||||
|
|
||||||
TAPE_FUNC (GetTapePosition (mt, TAPE_LOGICAL_POSITION, &p, &low, &high));
|
TAPE_FUNC (GetTapePosition (mt, TAPE_LOGICAL_POSITION, &p,
|
||||||
|
&b.LowPart, &b.HighPart));
|
||||||
if (lasterr == ERROR_INVALID_FUNCTION)
|
if (lasterr == ERROR_INVALID_FUNCTION)
|
||||||
TAPE_FUNC (GetTapePosition (mt, TAPE_ABSOLUTE_POSITION, &p, &low, &high));
|
TAPE_FUNC (GetTapePosition (mt, TAPE_ABSOLUTE_POSITION, &p,
|
||||||
|
&b.LowPart, &b.HighPart));
|
||||||
if (!lasterr)
|
if (!lasterr)
|
||||||
{
|
{
|
||||||
if (p > 0)
|
if (p > 0)
|
||||||
partition = (int32_t) p - 1;
|
partition = (int32_t) p - 1;
|
||||||
block = (int32_t) low;
|
block = (int64_t) b.QuadPart;
|
||||||
if (ppartition)
|
if (ppartition)
|
||||||
*ppartition= partition;
|
*ppartition= partition;
|
||||||
if (pblock)
|
if (pblock)
|
||||||
|
@ -379,23 +382,24 @@ mtinfo_drive::get_pos (HANDLE mt, int32_t *ppartition, int32_t *pblock)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
mtinfo_drive::_set_pos (HANDLE mt, int mode, int32_t count, int partition,
|
mtinfo_drive::_set_pos (HANDLE mt, int mode, int64_t count, int partition,
|
||||||
BOOL dont_wait)
|
BOOL dont_wait)
|
||||||
{
|
{
|
||||||
/* If an async write is still pending, wait for completion. */
|
/* If an async write is still pending, wait for completion. */
|
||||||
if (dirty == async_write_pending)
|
if (dirty == async_write_pending)
|
||||||
lasterr = async_wait (mt, NULL);
|
lasterr = async_wait (mt, NULL);
|
||||||
dirty = clean;
|
dirty = clean;
|
||||||
TAPE_FUNC (SetTapePosition (mt, mode, partition, count, count < 0 ? -1 : 0,
|
LARGE_INTEGER c = { QuadPart:count };
|
||||||
|
TAPE_FUNC (SetTapePosition (mt, mode, partition, c.LowPart, c.HighPart,
|
||||||
dont_wait));
|
dont_wait));
|
||||||
return lasterr;
|
return lasterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
mtinfo_drive::set_pos (HANDLE mt, int mode, int32_t count, bool sfm_func)
|
mtinfo_drive::set_pos (HANDLE mt, int mode, int64_t count, bool sfm_func)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
int32_t undone = count;
|
int64_t undone = count;
|
||||||
BOOL dont_wait = FALSE;
|
BOOL dont_wait = FALSE;
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
|
@ -589,12 +593,12 @@ mtinfo_drive::set_partition (HANDLE mt, int32_t count)
|
||||||
lasterr = ERROR_IO_DEVICE;
|
lasterr = ERROR_IO_DEVICE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int part_block = part (count)->block >= 0 ? part (count)->block : 0;
|
uint64_t part_block = part (count)->block >= 0 ? part (count)->block : 0;
|
||||||
int err = _set_pos (mt, TAPE_LOGICAL_BLOCK, part_block, count + 1, FALSE);
|
int err = _set_pos (mt, TAPE_LOGICAL_BLOCK, part_block, count + 1, FALSE);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
int sav_block = block;
|
int64_t sav_block = block;
|
||||||
int sav_partition = partition;
|
int32_t sav_partition = partition;
|
||||||
get_pos (mt);
|
get_pos (mt);
|
||||||
if (sav_partition != partition)
|
if (sav_partition != partition)
|
||||||
{
|
{
|
||||||
|
@ -649,8 +653,8 @@ mtinfo_drive::write_marks (HANDLE mt, int marktype, DWORD count)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int sav_block = block;
|
int64_t sav_block = block;
|
||||||
int sav_partition = partition;
|
int32_t sav_partition = partition;
|
||||||
get_pos (mt);
|
get_pos (mt);
|
||||||
if (sav_partition != partition)
|
if (sav_partition != partition)
|
||||||
{
|
{
|
||||||
|
@ -758,12 +762,10 @@ mtinfo_drive::get_status (HANDLE mt, struct mtget *get)
|
||||||
if (!get)
|
if (!get)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
if ((tstat = GetTapeStatus (mt)) == ERROR_NO_MEDIA_IN_DRIVE)
|
if ((tstat = GetTapeStatus (mt)) == ERROR_NO_MEDIA_IN_DRIVE
|
||||||
|
|| get_mp (mt) == ERROR_NO_MEDIA_IN_DRIVE)
|
||||||
notape = 1;
|
notape = 1;
|
||||||
|
|
||||||
if (get_mp (mt))
|
|
||||||
return lasterr;
|
|
||||||
|
|
||||||
memset (get, 0, sizeof *get);
|
memset (get, 0, sizeof *get);
|
||||||
|
|
||||||
get->mt_type = MT_ISUNKNOWN;
|
get->mt_type = MT_ISUNKNOWN;
|
||||||
|
@ -1082,7 +1084,7 @@ mtinfo_drive::ioctl (HANDLE mt, unsigned int cmd, void *buf)
|
||||||
break;
|
break;
|
||||||
case MTTELL:
|
case MTTELL:
|
||||||
if (!get_pos (mt))
|
if (!get_pos (mt))
|
||||||
op->mt_count = block;
|
op->mt_count = (int) block;
|
||||||
break;
|
break;
|
||||||
case MTFSS:
|
case MTFSS:
|
||||||
set_pos (mt, TAPE_SPACE_SETMARKS, op->mt_count, false);
|
set_pos (mt, TAPE_SPACE_SETMARKS, op->mt_count, false);
|
||||||
|
@ -1123,7 +1125,7 @@ mtinfo_drive::ioctl (HANDLE mt, unsigned int cmd, void *buf)
|
||||||
else if (cmd == MTIOCGET)
|
else if (cmd == MTIOCGET)
|
||||||
get_status (mt, (struct mtget *) buf);
|
get_status (mt, (struct mtget *) buf);
|
||||||
else if (cmd == MTIOCPOS && !get_pos (mt))
|
else if (cmd == MTIOCPOS && !get_pos (mt))
|
||||||
((struct mtpos *) buf)->mt_blkno = block;
|
((struct mtpos *) buf)->mt_blkno = (long) block;
|
||||||
|
|
||||||
return lasterr;
|
return lasterr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mtinfo.h: Defininitions for the Cygwin tape driver class.
|
/* mtinfo.h: Defininitions for the Cygwin tape driver class.
|
||||||
|
|
||||||
Copyright 2004, 2005, 2006, 2008, 2012 Red Hat, Inc.
|
Copyright 2004, 2005, 2006, 2008, 2012, 2013 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -46,13 +46,13 @@ enum lock_state
|
||||||
class mtinfo_part
|
class mtinfo_part
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int32_t block; /* logical block no */
|
int64_t block; /* logical block no */
|
||||||
|
int64_t fblock; /* relative block no */
|
||||||
int32_t file; /* current file no */
|
int32_t file; /* current file no */
|
||||||
int32_t fblock; /* relative block no */
|
|
||||||
bool smark; /* At setmark? */
|
bool smark; /* At setmark? */
|
||||||
eom_val emark; /* "end-of"-mark */
|
eom_val emark; /* "end-of"-mark */
|
||||||
|
|
||||||
void initialize (int32_t nblock = -1);
|
void initialize (int64_t nblock = -1);
|
||||||
};
|
};
|
||||||
|
|
||||||
class mtinfo_drive
|
class mtinfo_drive
|
||||||
|
@ -60,7 +60,7 @@ class mtinfo_drive
|
||||||
int drive;
|
int drive;
|
||||||
int lasterr;
|
int lasterr;
|
||||||
int32_t partition;
|
int32_t partition;
|
||||||
int32_t block;
|
int64_t block;
|
||||||
dirty_state dirty;
|
dirty_state dirty;
|
||||||
lock_state lock;
|
lock_state lock;
|
||||||
TAPE_GET_DRIVE_PARAMETERS _dp;
|
TAPE_GET_DRIVE_PARAMETERS _dp;
|
||||||
|
@ -94,8 +94,8 @@ class mtinfo_drive
|
||||||
? ((_dp.FeaturesHigh & parm) != 0)
|
? ((_dp.FeaturesHigh & parm) != 0)
|
||||||
: ((_dp.FeaturesLow & parm) != 0));
|
: ((_dp.FeaturesLow & parm) != 0));
|
||||||
}
|
}
|
||||||
int get_pos (HANDLE mt, int32_t *ppartition = NULL, int32_t *pblock = NULL);
|
int get_pos (HANDLE mt, int32_t *ppartition = NULL, int64_t *pblock = NULL);
|
||||||
int _set_pos (HANDLE mt, int mode, int32_t count, int partition, BOOL dont_wait);
|
int _set_pos (HANDLE mt, int mode, int64_t count, int partition, BOOL dont_wait);
|
||||||
int create_partitions (HANDLE mt, int32_t count);
|
int create_partitions (HANDLE mt, int32_t count);
|
||||||
int set_partition (HANDLE mt, int32_t count);
|
int set_partition (HANDLE mt, int32_t count);
|
||||||
int write_marks (HANDLE mt, int marktype, DWORD count);
|
int write_marks (HANDLE mt, int marktype, DWORD count);
|
||||||
|
@ -116,7 +116,7 @@ public:
|
||||||
int read (HANDLE mt, LPOVERLAPPED pov, void *ptr, size_t &ulen);
|
int read (HANDLE mt, LPOVERLAPPED pov, void *ptr, size_t &ulen);
|
||||||
int write (HANDLE mt, LPOVERLAPPED pov, const void *ptr, size_t &len);
|
int write (HANDLE mt, LPOVERLAPPED pov, const void *ptr, size_t &len);
|
||||||
int ioctl (HANDLE mt, unsigned int cmd, void *buf);
|
int ioctl (HANDLE mt, unsigned int cmd, void *buf);
|
||||||
int set_pos (HANDLE mt, int mode, int32_t count, bool sfm_func);
|
int set_pos (HANDLE mt, int mode, int64_t count, bool sfm_func);
|
||||||
|
|
||||||
IMPLEMENT_STATUS_FLAG (bool, buffer_writes)
|
IMPLEMENT_STATUS_FLAG (bool, buffer_writes)
|
||||||
IMPLEMENT_STATUS_FLAG (bool, async_writes)
|
IMPLEMENT_STATUS_FLAG (bool, async_writes)
|
||||||
|
|
Loading…
Reference in New Issue