aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--URPM.pm17
-rw-r--r--URPM.xs4
2 files changed, 19 insertions, 2 deletions
diff --git a/URPM.pm b/URPM.pm
index 9169e18..012f69c 100644
--- a/URPM.pm
+++ b/URPM.pm
@@ -158,6 +158,23 @@ sub traverse_tag {
$count;
}
+sub parse_hdlist_or_synthesis {
+ my ($parse_func, $urpm, $file, %options) = @_;
+
+ my $previous_indice = @{$urpm->{depslist}};
+ if (my ($start, $end) = $parse_func->($urpm, $file, %options)) {
+ ($start, $end);
+ } else {
+ #- parse_hdlist__XS may have added some pkgs to {depslist},
+ #- but we don't want those pkgs since reading hdlist failed later.
+ #- so we need to drop them
+ splice(@{$urpm->{depslist}}, $previous_indice);
+ ();
+ }
+}
+sub parse_synthesis { parse_hdlist_or_synthesis(\&parse_synthesis__XS, @_) }
+sub parse_hdlist { parse_hdlist_or_synthesis(\&parse_hdlist__XS, @_) }
+
sub add_macro {
my ($s) = @_;
#- quote for rpmlib, *sigh*
diff --git a/URPM.xs b/URPM.xs
index 8605c22..3542f15 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -2992,7 +2992,7 @@ Urpm_ranges_overlap(a, b, b_nopromote=1)
RETVAL
void
-Urpm_parse_synthesis(urpm, filename, ...)
+Urpm_parse_synthesis__XS(urpm, filename, ...)
SV *urpm
char *filename
PPCODE:
@@ -3066,7 +3066,7 @@ Urpm_parse_synthesis(urpm, filename, ...)
} else croak("first argument should be a reference to a HASH");
void
-Urpm_parse_hdlist(urpm, filename, ...)
+Urpm_parse_hdlist__XS(urpm, filename, ...)
SV *urpm
char *filename
PPCODE: