On Thursday 01 November 2007 21:22:14 Gerald Pfeifer wrote: > We currently have the following code in tape.c: > > if (data->Offset.u.LowPart >= 0) { > cmd.mt_op = MTFSF; > cmd.mt_count = data->Offset.u.LowPart; > } > else { > cmd.mt_op = MTBSF; > cmd.mt_count = -data->Offset.u.LowPart; > }
> Offset is of type LARGE_INTEGER which is defined as > > struct { > DWORD LowPart; > LONG HighPart; > } u; > > Note how LowPart is unsigned (DWORD) here, so indeed the comparisons > for >= 0 is always going to evaluate to true. Yes, the comparison should be against data->Offset.QuadPart (which you left out of the definition of LARGE_INTEGER). I'll work on a fix. -Hans