Return correct values for RPM_INT{8,16} types (FILEMODES, etc.).
-- Lubomir Kundrak <lkundrak@redhat.com>
http://rt.cpan.org/Public/Bug/Display.html?id=34739
diff -urp RPM2-0.67/RPM2.xs RPM2-0.67.inttypes/RPM2.xs
--- RPM2-0.67/RPM2.xs 2003-12-09 17:55:56.000000000 +0100
+++ RPM2-0.67.inttypes/RPM2.xs 2007-10-26 19:01:55.000000000 +0200
@@ -432,15 +432,51 @@ tag_by_id(h, tag)
PUSHs(sv_2mortal(newSVpv((char *)ret, 0)));
break;
case RPM_CHAR_TYPE:
+ {
+ int i;
+ char *r;
+
+ EXTEND(SP, n);
+ r = (char *)ret;
+
+ for (i = 0; i < n; i++) {
+ PUSHs(sv_2mortal(newSViv(r[i])));
+ }
+ }
+ break;
case RPM_INT8_TYPE:
+ {
+ int i;
+ uint8_t *r;
+
+ EXTEND(SP, n);
+ r = (uint8_t *)ret;
+
+ for (i = 0; i < n; i++) {
+ PUSHs(sv_2mortal(newSViv(r[i])));
+ }
+ }
+ break;
case RPM_INT16_TYPE:
+ {
+ int i;
+ uint16_t *r;
+
+ EXTEND(SP, n);
+ r = (uint16_t *)ret;
+
+ for (i = 0; i < n; i++) {
+ PUSHs(sv_2mortal(newSViv(r[i])));
+ }
+ }
+ break;
case RPM_INT32_TYPE:
{
int i;
- int *r;
+ uint32_t *r;
EXTEND(SP, n);
- r = (int *)ret;
+ r = (uint32_t *)ret;
for (i = 0; i < n; i++) {
PUSHs(sv_2mortal(newSViv(r[i])));