*BSD News Article 12427


Return to BSD News archive

Path: sserve!manuel.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!agate!howland.reston.ans.net!gatech!enterpoop.mit.edu!ai-lab!hal.gnu.ai.mit.edu!mycroft
From: mycroft@hal.gnu.ai.mit.edu (Charles Hannum)
Newsgroups: comp.os.386bsd.bugs
Subject: Re: cvs 1.3 bugfix
Date: 8 Mar 1993 18:52:29 GMT
Organization: /etc/organization
Lines: 37
Message-ID: <1ng4ldINNhb5@life.ai.mit.edu>
References: <SOMMERFELD.93Mar3180839@blatt.apollo.hp.com> <RICH.93Mar3233616@omicron.Rice.edu> <CGD.93Mar4170821@eden.CS.Berkeley.EDU>
NNTP-Posting-Host: hal.ai.mit.edu


In article <CGD.93Mar4170821@eden.CS.Berkeley.EDU>
cgd@eden.CS.Berkeley.EDU (Chris G. Demetriou) writes:
>
> Keith made a convincing argument for the macro as-it-stands --

Just one paragraph from POSIX.1 is relevant here:

  3.3.3.3  Returns.  Upon successful completion, the sigismember()
  function returns a value of one if the specified signal is a member
  of the specified set, or a value of zero if it is not.  [...]  For
  all of the above functions, if an error is detected, a value of -1 is
  returned and errno is set to indicate the error.

and one from ANSI C:

  3.3.7  Bitwise shift operators

  Semantics

    [...]  If the value of the right operand is negative or is greater
  than or equal to the width in bits of the promoted left operand, the
  behavior is undefined.

The macro, as written, relies on C shifting always making `1<<N', where
N is larger than the integer size, return 0.  This is clearly wrong.
It will return incorrect results if the second argument is too large.

Whether it returns 0 or -1 in this case, I do not care, though -1 would
be logical.

--
Say `HELL NO!' to unfounded flamage.
-- 
 \  /   Charles Hannum, mycroft@ai.mit.edu
 /\ \   PGP public key available on request.  MIME, AMS, NextMail accepted.
Scheme  White heterosexual atheist male (WHAM) pride!