From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH 17/28] libxl: gettimeofday doesn't return an errno on failure Date: Wed, 25 Sep 2013 13:04:09 +0100 Message-ID: <1380110649.23688.122.camel@kazak.uk.xensource.com> References: <1379475484-25993-1-git-send-email-mattjd@gmail.com> <1379475484-25993-18-git-send-email-mattjd@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1379475484-25993-18-git-send-email-mattjd@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Matthew Daley Cc: Stefano Stabellini , Ian Jackson , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On Wed, 2013-09-18 at 15:37 +1200, Matthew Daley wrote: http://pubs.opengroup.org/onlinepubs/9699919799/functions/gettimeofday.html agrees with this but the Linux manpages gettimeofday(2) disagrees: gettimeofday() and settimeofday() return 0 for success, or -1 for failure (in which case errno is set appropriately). They may just have confused themselves by lumping get in with set, but at least one error code (EFAULT) seems like it could apply to get too. Since the spec says it cannot fail I think there's no harm in reporting errno if it does fail. is the CHK_ERRNO macro correct? #define CHK_ERRNO( call ) ({ \ int chk_errno = (call); \ if (chk_errno < 0) { \ fprintf(stderr,"xl: fatal error: %s:%d: %s: %s\n", \ __FILE__,__LINE__, strerror(chk_errno), #call); \ exit(-ERROR_FAIL); \ } \ }) It seems to report the reutrn code and not errno, so it will always say -1 won't it? I think the actual coverity error "chk_errno" is passed to a parameter that cannot be negative." stems from this not the lack of errno, because coverity seems to know that strerror cannot take a negative number. > Coverity-ID: 1055570 > Signed-off-by: Matthew Daley > --- > tools/libxl/xl_cmdimpl.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 642b130..7ec5d6a 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -3392,7 +3392,7 @@ static void migration_child_report(int recv_fd) { > > if (!xl_child_pid(child_migration)) return; > > - CHK_ERRNO( gettimeofday(&waituntil, 0) ); > + MUST( gettimeofday(&waituntil, 0) ); > waituntil.tv_sec += 2; > > for (;;) { > @@ -3413,7 +3413,7 @@ static void migration_child_report(int recv_fd) { > } > assert(child == 0); > > - CHK_ERRNO( gettimeofday(&now, 0) ); > + MUST( gettimeofday(&now, 0) ); > if (timercmp(&now, &waituntil, >)) { > fprintf(stderr, "migration child [%ld] not exiting, no longer" > " waiting (exit status will be unreported)\n",