Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

perlembed - limit on size of variable being passed to perl from C

by jithoosin (Scribe)
on Dec 29, 2005 at 07:10 UTC ( [id://519722]=perlquestion: print w/replies, xml ) Need Help??

jithoosin has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I just want to know that is their any limit on the size of variable being passed to perl from C if using perlembed. I have this doubt because the perl stack is being used for the variable being passed .

My requirement is to pass any html file from C file to perl file.I use  XPUSHs(sv_2mortal(newSVpv(htmlFileBuffer,0)));
When i use 0 in the "newSVpv " will perl calculate the size of the variable ,what ever it may be?

Replies are listed 'Best First'.
Re: perlembed - limit on size of variable being passed to perl from C (heap)
by tye (Sage) on Dec 29, 2005 at 07:19 UTC

    The Perl stack will hold the pointer to (the pointer to...) the large buffer just fine. If malloc() won't choke, then Perl shouldn't either.

    - tye        

Re: perlembed - limit on size of variable being passed to perl from C
by Madcap Laughs (Acolyte) on Dec 31, 2005 at 10:08 UTC
    When you use 0 as the second arg to newSVpv(), the variable is deemed to finish at the first NULL character (\0). Therefore if htmlFileBuffer contains one or more embedded NULLs (which I would think is unlikely) you won't get what you want. In that case you would need to specify the actual size as the second arg to newSVpv().

    Here's a little demo Inline::C script:
    use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'EOC'; SV * foo(char * sv) { return newSVpv(sv, 0); } SV * foo2(char * sv, int len) { return newSVpv(sv, len); } EOC $x = 'hello' . "\0" . 'world'; print $x, " ", length($x), "\n"; $y = foo($x); print $y, " ", length($y), "\n"; $z = foo2($x, length($x)); print $z, " ", length($z), "\n";
    It prints:
    hello world 11
    hello 5
    hello world 11

    Cheers,
    Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://519722]
Approved by tye
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (7)
As of 2024-04-23 09:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found