]> git.pld-linux.org Git - packages/slic3r.git/blob - slic3r-test-out-of-memory.patch
63e83b6d09613e26abcd033f84ed7b116afa4d9f
[packages/slic3r.git] / slic3r-test-out-of-memory.patch
1 From: Alessandro Ranellucci <aar@cpan.org>
2 Date: Wed, 25 Jun 2014 14:57:06 +0200
3 Subject: Fix compilation under 5.20 (untested). #2109
4
5 Bug-Debian: #757798
6 Bug: https://github.com/alexrj/Slic3r/issues/2109
7 Origin: commit:67bf99633e48f9c8a5863b88c2a03fddc1cc247f
8 ---
9  xs/Build.PL             |  2 +-
10  xs/src/ClipperUtils.cpp |  2 +-
11  xs/src/MultiPoint.cpp   |  4 ++--
12  xs/xsp/TriangleMesh.xsp |  6 ++++--
13  xs/xsp/my.map           | 17 +++++++++++------
14  5 files changed, 19 insertions(+), 12 deletions(-)
15
16 diff --git a/xs/Build.PL b/xs/Build.PL
17 index e21df5e..49195d7 100644
18 --- a/xs/Build.PL
19 +++ b/xs/Build.PL
20 @@ -30,7 +30,7 @@ my $build = Module::Build::WithXSpp->new(
21      build_requires => {qw(
22          ExtUtils::ParseXS           3.18
23          ExtUtils::Typemap           1.00
24 -        ExtUtils::Typemaps::Default 1.03
25 +        ExtUtils::Typemaps::Default 1.05
26          ExtUtils::XSpp              0.17
27          Module::Build               0.3601
28          Test::More                  0
29 diff --git a/xs/src/ClipperUtils.cpp b/xs/src/ClipperUtils.cpp
30 index 2989783..240cf3b 100644
31 --- a/xs/src/ClipperUtils.cpp
32 +++ b/xs/src/ClipperUtils.cpp
33 @@ -542,7 +542,7 @@ polynode_children_2_perl(const ClipperLib::PolyNode& node)
34  {
35      AV* av = newAV();
36      const unsigned int len = node.ChildCount();
37 -    av_extend(av, len-1);
38 +    if (len > 0) av_extend(av, len-1);
39      for (int i = 0; i < len; ++i) {
40          av_store(av, i, polynode2perl(*node.Childs[i]));
41      }
42 diff --git a/xs/src/MultiPoint.cpp b/xs/src/MultiPoint.cpp
43 index 47830ce..5da3cb4 100644
44 --- a/xs/src/MultiPoint.cpp
45 +++ b/xs/src/MultiPoint.cpp
46 @@ -139,7 +139,7 @@ SV*
47  MultiPoint::to_AV() {
48      const unsigned int num_points = this->points.size();
49      AV* av = newAV();
50 -    av_extend(av, num_points-1);
51 +    if (num_points > 0) av_extend(av, num_points-1);
52      for (unsigned int i = 0; i < num_points; i++) {
53          av_store(av, i, perl_to_SV_ref(this->points[i]));
54      }
55 @@ -150,7 +150,7 @@ SV*
56  MultiPoint::to_SV_pureperl() const {
57      const unsigned int num_points = this->points.size();
58      AV* av = newAV();
59 -    av_extend(av, num_points-1);
60 +    if (num_points > 0) av_extend(av, num_points-1);
61      for (unsigned int i = 0; i < num_points; i++) {
62          av_store(av, i, this->points[i].to_SV_pureperl());
63      }
64 diff --git a/xs/xsp/TriangleMesh.xsp b/xs/xsp/TriangleMesh.xsp
65 index 3338d97..be40543 100644
66 --- a/xs/xsp/TriangleMesh.xsp
67 +++ b/xs/xsp/TriangleMesh.xsp
68 @@ -151,10 +151,12 @@ TriangleMesh::slice(z)
69          mslicer.slice(z_f, &layers);
70          
71          AV* layers_av = newAV();
72 -        av_extend(layers_av, layers.size()-1);
73 +        size_t len = layers.size();
74 +        if (len > 0) av_extend(layers_av, len-1);
75          for (unsigned int i = 0; i < layers.size(); i++) {
76              AV* expolygons_av = newAV();
77 -            av_extend(expolygons_av, layers[i].size()-1);
78 +            len = layers[i].size();
79 +            if (len > 0) av_extend(expolygons_av, len-1);
80              unsigned int j = 0;
81              for (ExPolygons::iterator it = layers[i].begin(); it != layers[i].end(); ++it) {
82                  av_store(expolygons_av, j++, perl_to_SV_clone_ref(*it));
83 diff --git a/xs/xsp/my.map b/xs/xsp/my.map
84 index e69ba04..994874d 100644
85 --- a/xs/xsp/my.map
86 +++ b/xs/xsp/my.map
87 @@ -235,7 +235,8 @@ T_ARRAYREF
88         AV* av = newAV();
89         $arg = newRV_noinc((SV*)av);
90         sv_2mortal($arg);
91 -       av_extend(av, $var.size()-1);
92 +       const unsigned int len = $var.size();
93 +       if (len > 0) av_extend(av, len-1);
94         int i = 0;
95      for (${type}::const_iterator it = $var.begin(); it != $var.end(); ++it) {
96          av_store(av, i++, perl_to_SV_clone_ref(*it));
97 @@ -246,7 +247,8 @@ T_ARRAYREF_PTR
98      AV* av = newAV();
99         $arg = newRV_noinc((SV*)av);
100         sv_2mortal($arg);
101 -       av_extend(av, $var->size()-1);
102 +       const unsigned int len = $var->size();
103 +       if (len > 0) av_extend(av, len-1);
104         int i = 0;
105      for (${ my $t = $type; $t =~ s/\*$//; \$t }::iterator it = $var->begin(); it != $var->end(); ++it) {
106          av_store(av, i++, perl_to_SV_ref(*it));
107 @@ -256,7 +258,8 @@ T_PTR_ARRAYREF_PTR
108      AV* av = newAV();
109      $arg = newRV_noinc((SV*)av);
110      sv_2mortal($arg);
111 -    av_extend(av, $var->size()-1);
112 +       const unsigned int len = $var->size();
113 +       if (len > 0) av_extend(av, len-1);
114      int i = 0;
115      for (${ my $t = $type; $t =~ s/\*$//; \$t }::iterator it = $var->begin(); it != $var->end(); ++it) {
116          av_store(av, i++, perl_to_SV_ref(**it));
117 @@ -266,7 +269,8 @@ T_PTR_ARRAYREF
118      AV* av = newAV();
119         $arg = newRV_noinc((SV*)av);
120         sv_2mortal($arg);
121 -       av_extend(av, $var.size()-1);
122 +       const unsigned int len = $var.size();
123 +       if (len > 0) av_extend(av, len-1);
124         int i = 0;
125      for (${type}::iterator it = $var.begin(); it != $var.end(); ++it) {
126          av_store(av, i++, (*it)->to_SV());
127 @@ -275,8 +279,9 @@ T_PTR_ARRAYREF
128  T_LAYER_HEIGHT_RANGES
129      AV* av = newAV();
130      $arg = newRV_noinc((SV*)av);
131 -       sv_2mortal($arg);
132 -    av_extend(av, $var.size() - 1);
133 +    sv_2mortal($arg);
134 +       const unsigned int len = $var.size();
135 +       if (len > 0) av_extend(av, len-1);
136      // map is sorted, so we can just copy it in order
137      int i = 0;
138      for (${type}::iterator it = $var.begin(); it != $var.end(); ++it) {
This page took 0.088882 seconds and 2 git commands to generate.