From owner-freebsd-scsi@FreeBSD.ORG Tue Jun 3 10:19:59 2003 Return-Path: Delivered-To: freebsd-scsi@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1CB8B37B401 for ; Tue, 3 Jun 2003 10:19:59 -0700 (PDT) Received: from matou.sibbald.com (matou.sibbald.com [195.202.201.48]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3160143FA3 for ; Tue, 3 Jun 2003 10:19:57 -0700 (PDT) (envelope-from kern@sibbald.com) Received: from [192.168.68.112] (rufus [192.168.68.112]) by matou.sibbald.com (8.11.6/8.11.6) with ESMTP id h53HJOv10449; Tue, 3 Jun 2003 19:19:24 +0200 From: Kern Sibbald To: "Justin T. Gibbs" In-Reply-To: <900070000.1054659860@aslan.btc.adaptec.com> References: <3EDB31AB.16420.C8964B7D@localhost> <3EDB59A4.27599.C93270FB@localhost> <20030602110836.H71034@beppo> <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> Content-Type: text/plain Organization: Message-Id: <1054660763.13630.279.camel@rufus> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.2.4 Date: 03 Jun 2003 19:19:24 +0200 Content-Transfer-Encoding: 7bit cc: freebsd-scsi@freebsd.org cc: mjacob@feral.com Subject: Re: SCSI tape data loss X-BeenThere: freebsd-scsi@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: SCSI subsystem List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jun 2003 17:19:59 -0000 On Tue, 2003-06-03 at 19:04, Justin T. Gibbs wrote: > > Yes, I probably should move the clrerror() and the > > check/set of errno inside the check for "stat == -1". > > However, the code though odd is correct since > > I do not use errno unless the status is -1. > > No, the code is not correct. clrerror() has side effects > in many cases when errno is non-zero. Yes, you are right. I'll fix it. However, this is not the problem because the only side effect that can occur is that Bacula would abort. The -1 second argument guarantees that. > > > 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. > Integer type conversions are still valid in C++: > > #include > #include > > int > subroutine(uint8_t small_type) > { > printf("small_type is %d\n", small_type); > > return (0); > } > > int > main(int argc, char *argv[]) > { > uint8_t foo; > uint32_t bigger_foo; > > foo = 100; > bigger_foo = argc; > > if (foo != bigger_foo) { > printf("Foos differ\n"); > } > > subroutine(bigger_foo); > > return (0); > } > > % g++ -Wall -pedantic foo.cc > > Produces no output. > > -- > Justin