Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 03 Jun 2003 13:13:21 -0600
From:      "Justin T. Gibbs" <gibbs@scsiguy.com>
To:        Kern Sibbald <kern@sibbald.com>
Cc:        mjacob@feral.com
Subject:   Re: SCSI tape data loss
Message-ID:  <955950000.1054667601@aslan.btc.adaptec.com>
In-Reply-To: <1054660763.13630.279.camel@rufus>
References:  <3EDB31AB.16420.C8964B7D@localhost> <3EDB59A4.27599.C93270FB@localhost> <20030602110836.H71034@beppo> <577540000.1054579840@aslan.btc.adaptec.com> <20030602131225.F71034@beppo> <1054645616.13630.161.camel@rufus>  <20030603072944.U44880@beppo> <1054652678.13630.209.camel@rufus> <882210000.1054657530@aslan.btc.adaptec.com> <1054658432.13630.252.camel@rufus> <900070000.1054659860@aslan.btc.adaptec.com> <1054660763.13630.279.camel@rufus>

next in thread | previous in thread | raw e-mail | index | archive | help
>> > By the way, the funny casting is mandatory in C++,
>> > because ssize_t as returned by the write is not the 
>> > same as size_t (what is written).
> 
> If I remove the (uint32_t) cast, I get an error message:
> 
> c++   -c   -I. -I..  -g -O2 -Wall  block.c
> block.c: In function `int write_block_to_dev (JCR *, DEVICE *, 
> DEV_BLOCK *)':
> block.c:381: warning: comparison between signed and unsigned integer 
> expressions
> 
> Line 381 reads:
> 
>    if ((stat=write(dev->fd, block->buf, (size_t)wlen)) != wlen) {
> 
> so I will stick with my funny casting.
> 

This has nothing to do with type size or the fact that you are
using C++.  The same warning would occur when your code is
compiled as C.  wlen should be a signed type.  Since wlen
by definition cannot be larger than the largest positive integer
reportable by the signed return value of write, using an unsigned
type buys you nothing.  Conversion from ssize_t to size_t will
occur without error if you happen to chose to make wlen an ssize_t.

I guess it matters little.  My own philosophy is that casts should
be used as a last resort rather than deployed indiscriminantly to
cover up compile warnings.  The above casts are easily avoidable
which is why I mentioned them at all.

--
Justin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?955950000.1054667601>