httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Jagielski <...@jaguNET.com>
Subject Re: [PATCH] ap_cpystrn() function, replace strncpy() Take II
Date Sat, 27 Dec 1997 03:42:58 GMT
Marc Slemko wrote:
> 
> 
>        [#8] When an expression that has integer type is added to or
>        subtracted  from  a  pointer, the result has the type of the
>        pointer operand.   If  the  pointer  operand  points  to  an
>        element  of  an array object, and the array is large enough,
>        the result points to an element  offset  from  the  original
>        element  such  that  the difference of the subscripts of the
>        resulting and original array  elements  equals  the  integer
>        expression.   In  other words, if the expression P points to
>        the i-th element of an array object, the  expressions  (P)+N
>        (equivalently,  N+(P))  and  (P)-N (where N has the value n)
>        point to, respectively, the i+n-th and i- n-th  elements  of
>        the  array  object,  provided  they exist.  Moreover, if the
>        expression P points to the last element of an array  object,
>        the expression (P)+1 points one past the last element of the
>        array object, and if the expression Q points  one  past  the
>        last element of an array object, the expression (Q)-1 points
>        to the last element  of  the  array  object.   If  both  the
>        pointer operand and the result point to elements of the same
>        array object, or one past the  last  element  of  the  array
>        object,  the  evaluation  shall  not  produce  an  overflow;
>        otherwise, the  behavior  is  undefined.   Unless  both  the
>        pointer operand and the result point to elements of the same
>        array object, or the pointer operand  points  one  past  the
>        last  element of an array object and the result points to an
>        element of the same array object, the behavior is  undefined
>        if  the  result  is used as an operand of a unary * operator
>        that is actually evaluated.
> 

Oh yeah... this is the ANSI Array Looping section, which made "legal"
the technique of using pointer to loop thru arrays :/

You're right, it does, by definition, result in undefined behavior.
Best to be safe.

-- 
====================================================================
      Jim Jagielski            |       jaguNET Access Services
     jim@jaguNET.com           |       http://www.jaguNET.com/
            "Look at me! I'm wearing a cardboard belt!"

Mime
View raw message