Eric Kort <[EMAIL PROTECTED]> writes:
>Thanks for your response, Mark.
>
>The perlapi documentation states:
>
> The return value will be NULL if the operation failed or if the
> value did not need to be actually stored within the array (as in
> the case of tied arrays). Otherwise it can be dereferenced to
> get the original `SV*'. Note that the caller is responsible for
> suitably incrementing the reference count of `val' before the
> call, and decrementing it if the function returned NULL.
Note that you need to increment the refcount BEFORE the call.
>
>So I want to see if it returned NULL, but I don't know how. If I try:
what is wrong with
if (av_store(...) == NULL)
SvREFCNT_dec(sv);
>
> svReturnVal = av_store(avArray, 2, svNewVal); //svReturnVal is an SV**
>
>and then:
>
> iReturnVal = SvIV(*svReturnVal); //iReturnVal is an int
It is NULL then SvIV(*NULL) is a core dump.
>
>I get the "assignment from incompatible pointer type" error.
Is iReturnVal an IV ?
>How do I
>dereference the thing to see if it returned null or not?
>
>
>
>> -----Original Message-----
>> From: Mark Mielke [mailto:[EMAIL PROTECTED]]
>> Sent: Friday, March 02, 2001 5:01 PM
>> To: Kort, Eric
>> Cc: '[EMAIL PROTECTED]'
>> Subject: Re: How do I capture the return value of av_store?
>>
>>
>> av_store() doesn't return success vs. failure. It returns a pointer to
>> the SV as it shows up within the array itself.
>>
>> av_store() can be assumed to be successful, as if it were to fail, it
>> would die().
>>
>> mark
>>
>>
>> On Fri, Mar 02, 2001 at 04:39:34PM -0500, "Kort, Eric" wrote:
>> > Can someone help me understand how to capture the return
>> value of av_store?
>> > Here is a short snippet illustrating what I am trying to do
>> (in the context
>> > of a larger procedure wherein the use of av_store actually
>> makes sense):
>> >
>> > void update(SV* svArray)
>> > {
>> > AV* avArray;
>> > SV* svNewVal;
>> > int iNewVal;
>> >
>> > avArray = (AV*)SvRV(svArray);
>> > iNewVal = 3;
>> > svNewVal = newSViv(iNewVal);
>> > av_store(avArray, 2, svNewVal);
>> > }
>> >
>> > This works, but want I want to do is check the return value
>> of av_store, an
>> > SV**, to make sure it suceeded, and then increment the
>> reference count of
>> > svNewVal if it did. I tried something like:
>> >
>> > SV* *svReturnVal
>> >
>> > and then
>> >
>> > svReturnVal = av_store(avArray, 2, svNewVal);
>> >
>> > but that produces the error "assignment from incompatible
>> pointer type".
>> > What is the proper way to capture the return and ensure it
>> is not NULL?
>> >
>> > Thanks,
>> > Eric
--
Nick Ing-Simmons