aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--URPM.pm2
-rw-r--r--URPM.xs14
2 files changed, 16 insertions, 0 deletions
diff --git a/URPM.pm b/URPM.pm
index 77774c8..13ebbbf 100644
--- a/URPM.pm
+++ b/URPM.pm
@@ -645,6 +645,8 @@ Sets rpm verbosity level. $level is an integer between 2 (RPMMESS_CRIT) and 7
=item rpmErrorString()
+=item rpmErrorWriteTo($fd)
+
=back
=head1 COPYRIGHT
diff --git a/URPM.xs b/URPM.xs
index e1fefb9..d125cd4 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -239,6 +239,13 @@ struct _FD_s {
};
/*@access FD_t@*/
+static int rpmError_callback_data;
+void rpmError_callback() {
+ if (rpmErrorCode() != RPMERR_UNLINK && rpmErrorCode() != RPMERR_RMDIR) {
+ write(rpmError_callback_data, rpmErrorString(), strlen(rpmErrorString()));
+ }
+}
+
static inline
void fdInitDigest(FD_t fd, pgpHashAlgo hashalgo, int flags)
/*@modifies fd @*/
@@ -3643,4 +3650,11 @@ setVerbosity(level)
const char *
rpmErrorString()
+void
+rpmErrorWriteTo(fd)
+ int fd
+ CODE:
+ rpmError_callback_data = fd;
+ rpmErrorSetCallback(rpmError_callback);
+
/* vim:set ts=8 sts=2 sw=2: */