--- sysutils/p5-BSD-Sysctl/Makefile (revision 468768) +++ sysutils/p5-BSD-Sysctl/Makefile (working copy) @@ -3,7 +3,7 @@ PORTNAME= BSD-Sysctl PORTVERSION= 0.11 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= sysutils perl5 MASTER_SITES= CPAN PKGNAMEPREFIX= p5- --- sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL (nonexistent) +++ sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL (working copy) @@ -0,0 +1,8 @@ +--- Makefile.PL.orig 2009-09-25 13:50:50.000000000 -0600 ++++ Makefile.PL 2018-03-08 13:01:25.754377000 -0700 +@@ -119,3 +119,5 @@ + T,struct_cdev 25 auto + Q 26 FMT_64 + QU 27 FMT_U64 ++C 28 FMT_INT8 ++CU 29 FMT_UINT8 --- sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm (nonexistent) +++ sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm (working copy) @@ -0,0 +1,22 @@ +--- Sysctl.pm.orig 2014-01-21 16:08:32.000000000 -0700 ++++ Sysctl.pm 2018-03-08 12:06:28.456797000 -0700 +@@ -42,6 +42,8 @@ + use constant FMT_STRUCT_CDEV => 25; + use constant FMT_64 => 26; + use constant FMT_U64 => 27; ++use constant FMT_UINT8 => 28; ++use constant FMT_INT8 => 29; + + push @EXPORT_OK, 'sysctl'; + sub sysctl { +@@ -105,7 +107,9 @@ + + sub reset { + my $self = shift; +- delete $self->{_ctx}; ++ delete $self->{_next}; ++ delete $self->{_name}; ++ delete $self->{_len0}; + return $self; + } + --- sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs (revision 468768) +++ sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs (working copy) @@ -1,5 +1,5 @@ ---- Sysctl.xs.orig 2014-01-21 23:02:47 UTC -+++ Sysctl.xs +--- Sysctl.xs.orig 2014-01-21 16:02:47.000000000 -0700 ++++ Sysctl.xs 2018-03-09 10:15:13.911891000 -0700 @@ -14,6 +14,7 @@ #include @@ -8,10 +8,25 @@ #include #include /* struct clockinfo */ -@@ -48,78 +49,114 @@ +@@ -48,78 +49,129 @@ #include #include "bsd-sysctl.h" ++#define DECODE(T) \ ++ if (buflen == sizeof(T)) { \ ++ RETVAL = newSViv(*(T *)buf); \ ++ } \ ++ else { \ ++ AV *c = (AV *)sv_2mortal((SV *)newAV()); \ ++ char *bptr = buf; \ ++ while (buflen >= sizeof(T)) { \ ++ av_push(c, newSViv(*(T *)bptr)); \ ++ buflen -= sizeof(T); \ ++ bptr += sizeof(T); \ ++ } \ ++ RETVAL = newRV((SV *)c); \ ++ } ++ +void +_iterator_first(HV *self) +{ @@ -188,7 +203,7 @@ MODULE = BSD::Sysctl PACKAGE = BSD::Sysctl PROTOTYPES: ENABLE -@@ -127,67 +164,18 @@ PROTOTYPES: ENABLE +@@ -127,67 +179,18 @@ SV * next (SV *refself) INIT: @@ -263,7 +278,134 @@ OUTPUT: RETVAL -@@ -878,6 +866,10 @@ _mib_set(const char *arg, const char *value) +@@ -235,6 +238,10 @@ + case 'A': + fmt_type = FMT_A; + break; ++ case 'C': ++ ++f; ++ fmt_type = *f == 'U' ? FMT_UINT8 : FMT_INT8; ++ break; + case 'I': + ++f; + fmt_type = *f == 'U' ? FMT_UINT : FMT_INT; +@@ -398,96 +405,31 @@ + SvCUR_set(sv_buf, buflen); + RETVAL = sv_buf; + break; ++ ++ case FMT_INT8: ++ DECODE(int8_t); ++ break; ++ case FMT_UINT8: ++ DECODE(uint8_t); ++ break; + case FMT_INT: +- if (buflen == sizeof(int)) { +- RETVAL = newSViv(*(int *)buf); +- } +- else { +- AV *c = (AV *)sv_2mortal((SV *)newAV()); +- char *bptr = buf; +- while (buflen >= sizeof(int)) { +- av_push(c, newSViv(*(int *)bptr)); +- buflen -= sizeof(int); +- bptr += sizeof(int); +- } +- RETVAL = newRV((SV *)c); +- } +- break; ++ DECODE(int); ++ break; + case FMT_UINT: +- if (buflen == sizeof(unsigned int)) { +- RETVAL = newSViv(*(unsigned int *)buf); +- } +- else { +- AV *c = (AV *)sv_2mortal((SV *)newAV()); +- char *bptr = buf; +- while (buflen >= sizeof(unsigned int)) { +- av_push(c, newSViv(*(unsigned int *)bptr)); +- buflen -= sizeof(unsigned int); +- bptr += sizeof(unsigned int); +- } +- RETVAL = newRV((SV *)c); +- } +- break; ++ DECODE(unsigned int); ++ break; + case FMT_LONG: +- if (buflen == sizeof(long)) { +- RETVAL = newSVuv(*(long *)buf); +- } +- else { +- AV *c = (AV *)sv_2mortal((SV *)newAV()); +- char *bptr = buf; +- while (buflen >= sizeof(long)) { +- av_push(c, newSVuv(*(long *)bptr)); +- buflen -= sizeof(long); +- bptr += sizeof(long); +- } +- RETVAL = newRV((SV *)c); +- } +- break; ++ DECODE(long); ++ break; + case FMT_ULONG: +- if (buflen == sizeof(unsigned long)) { +- RETVAL = newSVuv(*(unsigned long *)buf); +- } +- else { +- AV *c = (AV *)sv_2mortal((SV *)newAV()); +- char *bptr = buf; +- while (buflen >= sizeof(unsigned long)) { +- av_push(c, newSVuv(*(unsigned long *)bptr)); +- buflen -= sizeof(unsigned long); +- bptr += sizeof(unsigned long); +- } +- RETVAL = newRV((SV *)c); +- } +- break; ++ DECODE(unsigned long); ++ break; + case FMT_64: +- if (buflen == sizeof(int64_t)) { +- RETVAL = newSVuv(*(int64_t *)buf); +- } +- else { +- AV *c = (AV *)sv_2mortal((SV *)newAV()); +- char *bptr = buf; +- while (buflen >= sizeof(int64_t)) { +- av_push(c, newSVuv(*(int64_t *)bptr)); +- buflen -= sizeof(int64_t); +- bptr += sizeof(int64_t); +- } +- RETVAL = newRV((SV *)c); +- } +- break; ++ DECODE(int64_t); ++ break; + case FMT_U64: +- if (buflen == sizeof(uint64_t)) { +- RETVAL = newSVuv(*(uint64_t *)buf); +- } +- else { +- AV *c = (AV *)sv_2mortal((SV *)newAV()); +- char *bptr = buf; +- while (buflen >= sizeof(uint64_t)) { +- av_push(c, newSVuv(*(uint64_t *)bptr)); +- buflen -= sizeof(uint64_t); +- bptr += sizeof(uint64_t); +- } +- RETVAL = newRV((SV *)c); +- } +- break; ++ DECODE(uint64_t); ++ break; + case FMT_CLOCKINFO: { + HV *c = (HV *)sv_2mortal((SV *)newHV()); + struct clockinfo *inf = (struct clockinfo *)buf; +@@ -878,6 +820,12 @@ SV **oidp; SV *oid; char *oid_data; @@ -271,10 +413,39 @@ + long long llval; + uint64_t uint64val; + unsigned long long ullval; ++ int8_t int8val; ++ uint8_t uint8val; int oid_fmt; int oid_len; int intval; -@@ -954,6 +946,42 @@ _mib_set(const char *arg, const char *value) +@@ -936,6 +884,26 @@ + newsize = sizeof(uintval); + break; + ++ case FMT_INT8: ++ int8val = (int8_t)strtol(value, &endconvptr, 0); ++ if (endconvptr == value || *endconvptr != '\0') { ++ warn("invalid integer: '%s'", value); ++ XSRETURN_UNDEF; ++ } ++ newval = &int8val; ++ newsize = sizeof(int8val); ++ break; ++ ++ case FMT_UINT8: ++ uint8val = (uint8_t)strtoul(value, &endconvptr, 0); ++ if (endconvptr == value || *endconvptr != '\0') { ++ warn("invalid unsigned integer: '%s'", value); ++ XSRETURN_UNDEF; ++ } ++ newval = &uint8val; ++ newsize = sizeof(uint8val); ++ break; ++ + case FMT_LONG: + longval = strtol(value, &endconvptr, 0); + if (endconvptr == value || *endconvptr != '\0') { +@@ -954,6 +922,42 @@ } newval = &ulongval; newsize = sizeof(ulongval);