~ubuntu-branches/debian/sid/libembperl-perl/sid

« back to all changes in this revision

Viewing changes to xsbuilder/TypeMap.pm

  • Committer: Bazaar Package Importer
  • Author(s): Angus Lees
  • Date: 2005-04-20 19:25:44 UTC
  • mfrom: (1.2.1 upstream) (2.1.1 hoary)
  • Revision ID: james.westby@ubuntu.com-20050420192544-dcp6nkxni4puc6h6
Tags: 2.0rc3-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package Embperl::TypeMap;
2
 
 
3
 
use strict;
4
 
use warnings;
5
 
 
6
 
use base qw(ExtUtils::XSBuilder::TypeMap);
7
 
 
8
 
sub map_structure {
9
 
  my ($self, $struct) = @_;
10
 
 
11
 
  my %fixedsize;
12
 
 
13
 
  foreach my $e ( @{$struct->{elts}} ) {
14
 
    $e->{name} =~ s/\[(.*)\]// or next;
15
 
    $fixedsize{$e->{name}} = $1;
16
 
    $e->{type} .= ' *';
17
 
  }
18
 
 
19
 
  my $mapped = $self->SUPER::map_structure($struct);
20
 
 
21
 
  foreach my $e (@{$mapped->{elts}}) {
22
 
    my $nitems = $fixedsize{$e->{name}} or next;
23
 
    if ($e->{type} eq 'char *') {
24
 
      $e->{malloc} = "strncpy(\$dest, \$src, $nitems-1)";
25
 
      undef $e->{free};
26
 
    } else {
27
 
      # FIXME: need to copy MIN($e->{nitems}, num_given_in_the_first_place)
28
 
      $e->{malloc} = "Copy(\$src, \$dest, $nitems, \$type)";
29
 
      undef $e->{free};
30
 
      warn "WARNING: don't know how to copy $e->{name}";
31
 
    }
32
 
  }
33
 
 
34
 
  $mapped;
35
 
}
36
 
 
37
 
1;