# $Id: serprocs.pm,v 1.5 1997/04/30 04:30:08 jake Exp $ # Copyright 1997 Jake Donham # You may distribute under the terms of either the GNU General # Public License or the Artistic License, as specified in the README # file. # serprocs generates C stubs which are called by the RPC driver # code. They convert arguments into the right thing and pass # everything to callperl(). sub RPCL::Syntax::serprocs {} sub RPCL::ProgramDef::serprocs { my ($self, $mod, $fh) = @_; foreach $ver (@{$self->versions}) { $ver->serprocs($mod, $fh); } } sub RPCL::Version::serprocs { my ($self, $mod, $fh) = @_; foreach $proc (@{$self->procedures}) { $proc->serprocs($mod, $self->value, $fh); } } sub RPCL::Type::freestruct {} sub RPCL::StructDef::freestruct { my ($self) = @_; my $ctype = $self->ctype; return <rettype->ctype . " *"; my $arg = $self->argtype->ctype . " *"; my $proc = lc($self->ident) . '_' . $version; my $argderef = $self->argtype->deref; my $retref = $self->rettype->ref; my $argcheck = &type_outcheck($self->argtype->perltype($mod), 'arg', "(${argderef}argp)") unless $arg eq 'void *'; my $retcheck = &type_incheck($self->rettype->perltype($mod), 'pret', 'ret') unless $ret eq 'void *'; my $rret = $ret; my $freestruct = $self->rettype->freestruct; # cancel the pointer if return needs to be dereferenced. if ($retref) { $rret =~ s/ \*$//; } if ($ret eq 'void *') { if ($arg eq 'void *') { print $fh <