X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlxs.pod;h=5ad24d8aa3d17c81a6805e124876bd25cdc4b4b6;hb=a22f28a4268aa03ce2bafaf594271b8ff764a5f8;hp=f88565bf1729b28cf87c3fede35eb8cfc5196267;hpb=0a3a8dc0cd7227e83cd26fe236d1ad57c4add668;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlxs.pod b/pod/perlxs.pod index f88565b..5ad24d8 100644 --- a/pod/perlxs.pod +++ b/pod/perlxs.pod @@ -293,7 +293,7 @@ or less equivalent: ST(0) = newSVpv("Hello World",0); sv_2mortal(ST(0)); XSRETURN(1); - + SV * beta() CODE: @@ -319,7 +319,7 @@ CPAN modules) in the typemap file, the reference count of the C is not properly decremented. Thus, the above XSUB would leak memory whenever it is being called. The same problem exists for C. -When you're returning an C or a C, you have make sure +When you're returning an C or a C, you have to make sure their reference count is decremented by making the AV or HV mortal: AV * @@ -950,10 +950,9 @@ The XS code, with ellipsis, follows. time_t timep = NO_INIT PREINIT: char *host = "localhost"; - STRLEN n_a; CODE: if( items > 1 ) - host = (char *)SvPV(ST(1), n_a); + host = (char *)SvPV_nolen(ST(1)); RETVAL = rpcb_gettime( host, &timep ); OUTPUT: timep @@ -1094,8 +1093,8 @@ return value, should the need arise. time_t timep; bool_t x; CODE: - ST(0) = sv_newmortal(); if( rpcb_gettime( host, &timep ) ){ + ST(0) = sv_newmortal(); sv_setnv( ST(0), (double)timep); } else{ @@ -1212,6 +1211,12 @@ To disable version checking: VERSIONCHECK: DISABLE +Note that if the version of the PM module is an NV (a floating point +number), it will be stringified with a possible loss of precision +(currently chopping to nine decimal places) so that it may not match +the version of the XS module anymore. Quoting the $VERSION declaration +to make it a string is recommended if long version numbers are used. + =head2 The PROTOTYPES: Keyword The PROTOTYPES: keyword corresponds to B's C<-prototypes> and @@ -1242,10 +1247,9 @@ prototypes. PROTOTYPE: $;$ PREINIT: char *host = "localhost"; - STRLEN n_a; CODE: if( items > 1 ) - host = (char *)SvPV(ST(1), n_a); + host = (char *)SvPV_nolen(ST(1)); RETVAL = rpcb_gettime( host, &timep ); OUTPUT: timep