svn commit: r540356 - in head/sysutils/p5-BSD-Sysctl: . files
Warner Losh
imp at FreeBSD.org
Wed Jun 24 23:59:52 UTC 2020
Author: imp
Date: Wed Jun 24 23:59:50 2020
New Revision: 540356
URL: https://svnweb.freebsd.org/changeset/ports/540356
Log:
Update to run on most recent -current
Update to supporty the latest bool type.
Approved by: david at landgren.net (maintainer timeout, ~2 years)
Obtained From: Netflix
PR: 227910
Differential Revision: https://reviews.freebsd.org/D25434
Added:
head/sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL (contents, props changed)
head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm (contents, props changed)
Modified:
head/sysutils/p5-BSD-Sysctl/Makefile (contents, props changed)
head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs (contents, props changed)
Modified: head/sysutils/p5-BSD-Sysctl/Makefile
==============================================================================
--- head/sysutils/p5-BSD-Sysctl/Makefile Wed Jun 24 22:40:21 2020 (r540355)
+++ head/sysutils/p5-BSD-Sysctl/Makefile Wed Jun 24 23:59:50 2020 (r540356)
@@ -3,7 +3,7 @@
PORTNAME= BSD-Sysctl
PORTVERSION= 0.11
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= sysutils perl5
MASTER_SITES= CPAN
PKGNAMEPREFIX= p5-
Added: head/sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL Wed Jun 24 23:59:50 2020 (r540356)
@@ -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
Added: head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm Wed Jun 24 23:59:50 2020 (r540356)
@@ -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;
+ }
+
Modified: head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs
==============================================================================
--- head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs Wed Jun 24 22:40:21 2020 (r540355)
+++ head/sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs Wed Jun 24 23:59:50 2020 (r540356)
@@ -1,5 +1,5 @@
---- Sysctl.xs.orig 2014-01-22 00:02:47.000000000 +0100
-+++ Sysctl.xs 2018-05-11 10:26:40.364491000 +0200
+--- Sysctl.xs.orig 2014-01-21 15:02:47.000000000 -0800
++++ Sysctl.xs 2018-05-21 13:25:07.145336000 -0700
@@ -14,6 +14,7 @@
#include <stdio.h>
@@ -12,34 +12,7 @@
#include <netinet6/raw_ip6.h>
#include "bsd-sysctl.h"
-+void
-+_iterator_first(HV *self)
-+{
-+ SV **headp;
-+ int name[CTL_MAXNAME];
-+ size_t len;
-+
-+ headp = hv_fetch(self, "head", 4, 0);
-+ if (headp == NULL || *headp == NULL)
-+ croak( "failed to fetch head in _iterator_first()\n" );
-+
-+ if (SvPOK(*headp)) {
-+ /* we were given starting node */
-+ len = sizeof(name);
-+ if (sysctlnametomib(SvPV_nolen(*headp), name, &len) == -1)
-+ croak("sysctlnametomib(head) failed in _iterator_first\n");
-+ } else {
-+ /* start at the top like sysctl -a */
-+ name[0] = 1;
-+ len = 1;
-+ }
-+
-+ hv_store(self, "_next", 5, newSVpvn((char const *) name, len * sizeof(int)), 0);
-+ hv_store(self, "_len0", 5, newSViv(len), 0);
-+ hv_store(self, "_name", 5, newSVpvn("", 0), 0);
-+}
-+
- int
+-int
-_init_iterator(HV *self, int *mib, int *miblenp, int valid) {
- SV **headp;
- int qoid[CTL_MAXNAME];
@@ -48,7 +21,13 @@
- SV **clenp;
- int cmplen;
- int j;
--
++void
++_iterator_first(HV *self)
++{
++ SV **headp;
++ int name[CTL_MAXNAME];
++ size_t len;
+
- qoid[0] = 0;
- qoid[1] = 2;
- if (valid) {
@@ -59,22 +38,79 @@
- cmplen = SvIV(*clenp);
- }
- else {
-- headp = hv_fetch(self, "head", 4, 0);
+ headp = hv_fetch(self, "head", 4, 0);
- if (!(headp && *headp)) {
- croak( "failed to get some head in _init_iterator()\n" );
- }
-- if (SvPOK(*headp)) {
++ if (headp == NULL || *headp == NULL)
++ croak( "failed to fetch head in _iterator_first()\n" );
++
+ if (SvPOK(*headp)) {
- /* begin where asked */
- qoidlen = sizeof(qoid);
- if (sysctlnametomib( SvPV_nolen(*headp), qoid+2, (size_t*)&qoidlen) == -1) {
- warn( "_init_iterator(%s): sysctlnametomib lookup failed\n",
- SvPV_nolen(*headp)
- );
-- return 0;
++ /* we were given starting node */
++ len = sizeof(name);
++ if (sysctlnametomib(SvPV_nolen(*headp), name, &len) == -1)
++ croak("sysctlnametomib(head) failed in _iterator_first\n");
++ } else {
++ /* start at the top like sysctl -a */
++ name[0] = 1;
++ len = 1;
++ }
++
++ hv_store(self, "_next", 5, newSVpvn((char const *) name, len * sizeof(int)), 0);
++ hv_store(self, "_len0", 5, newSViv(len), 0);
++ hv_store(self, "_name", 5, newSVpvn("", 0), 0);
++}
++
++int
++_iterator_next(HV *self)
++{
++ SV *nextp, **len0p, *namep;
++ int *next, name1[CTL_MAXNAME + 2], name2[CTL_MAXNAME + 2];
++ size_t len0, next_len, len1, len2;
++
++ if (! hv_exists(self, "_len0", 5))
++ _iterator_first(self);
++
++ len0p = hv_fetch(self, "_len0", 5, 0);
++ if (len0p == NULL || *len0p == NULL)
++ croak("hv_fetch(_len0) failed in _iterator_next\n");
++ len0 = SvIV(*len0p);
++
++ nextp = hv_delete(self, "_next", 5, 0);
++ if (nextp == NULL)
+ return 0;
- }
- cmplen = qoidlen;
- qoidlen += 2;
-- }
++ next = (int *) SvPV(nextp, next_len);
++ next_len /= sizeof(int);
++
++ namep = hv_delete(self, "_name", 5, 0);
++ if (namep == NULL)
++ return 0;
++
++ /*
++ * Get next (after _next): name1 = [ 0, 2, next ]
++ */
++
++ name1[0] = 0;
++ name1[1] = 2; /* get next */
++ memcpy((name1 + 2), next, next_len * sizeof(int));
++ len1 = next_len + 2;
++
++ len2 = sizeof(name2);
++ if (sysctl(name1, len1, name2, &len2, 0, 0) < 0) {
++ if (errno == ENOENT)
++ return (0);
++
++ croak("sysctl(next) failed in _iterator_next()\n");
+ }
- else {
- /* begin at the beginning */
- qoid[2] = 1;
@@ -85,7 +121,8 @@
- SvREFCNT_inc(clen);
- hv_store(self, "_len", 4, clen, 0);
- }
--
++ len2 /= sizeof(int);
+
- /*
- printf( "next: " );
- for (j = 0; j < qoidlen; ++j) {
@@ -93,7 +130,11 @@
- }
- printf("\n");
- */
--
++ if (len2 < len0)
++ return 0; /* shorter than first */
++ if (memcmp(name2, next, len0 * sizeof(int)) != 0)
++ return 0; /* does not match anymore */
+
- /* load the mib */
- if (sysctl(qoid, qoidlen, mib, (size_t*)miblenp, 0, 0) == -1) {
- return 0;
@@ -102,84 +143,35 @@
- if (*miblenp < cmplen) {
- return 0 ;
- }
--
++ /* at this point, name2/len2 has next iterator, update _next here */
++ hv_store(self, "_next", 5, newSVpvn((char const *) name2, len2 * sizeof(int)), 0);
+
- for (j = 0; j < cmplen; ++j) {
- if (mib[j] != qoid[j+2]) {
- return 0;
-- }
-- }
-- return 1;
-+_iterator_next(HV *self)
-+{
-+ SV *nextp, **len0p, *namep;
-+ int *next, name1[CTL_MAXNAME + 2], name2[CTL_MAXNAME + 2];
-+ size_t len0, next_len, len1, len2;
++ /*
++ * Get name (from name2): name1 = [ 0, 1, name2 ]
++ */
+
-+ if (! hv_exists(self, "_len0", 5))
-+ _iterator_first(self);
++ name1[0] = 0;
++ name1[1] = 1; /* get name */
++ memcpy((name1 + 2), name2, len2 * sizeof(int));
++ len1 = len2 + 2;
+
-+ len0p = hv_fetch(self, "_len0", 5, 0);
-+ if (len0p == NULL || *len0p == NULL)
-+ croak("hv_fetch(_len0) failed in _iterator_next\n");
-+ len0 = SvIV(*len0p);
-+
-+ nextp = hv_delete(self, "_next", 5, 0);
-+ if (nextp == NULL)
-+ return 0;
-+ next = (int *) SvPV(nextp, next_len);
-+ next_len /= sizeof(int);
++ len2 = sizeof(name2);
++ if (sysctl(name1, len1, name2, &len2, 0, 0) < 0) {
++ if (errno == ENOENT)
++ return (0);
+
-+ namep = hv_delete(self, "_name", 5, 0);
-+ if (namep == NULL)
-+ return 0;
++ croak("sysctl(name) failed in _iterator_next()\n");
+ }
+- }
+- return 1;
+
-+ /*
-+ * Get next (after _next): name1 = [ 0, 2, next ]
-+ */
++ /* at this point, name2/len2 has name, update _name here */
++ hv_store(self, "_name", 5, newSVpvn((char const *) name2, len2 - 1), 0);
+
-+ name1[0] = 0;
-+ name1[1] = 2; /* get next */
-+ memcpy((name1 + 2), next, next_len * sizeof(int));
-+ len1 = next_len + 2;
-+
-+ len2 = sizeof(name2);
-+ if (sysctl(name1, len1, name2, &len2, 0, 0) < 0) {
-+ if (errno == ENOENT)
-+ return (0);
-+
-+ croak("sysctl(next) failed in _iterator_next()\n");
-+ }
-+ len2 /= sizeof(int);
-+
-+ if (len2 < len0)
-+ return 0; /* shorter than first */
-+ if (memcmp(name2, next, len0 * sizeof(int)) != 0)
-+ return 0; /* does not match anymore */
-+
-+ /* at this point, name2/len2 has next iterator, update _next here */
-+ hv_store(self, "_next", 5, newSVpvn((char const *) name2, len2 * sizeof(int)), 0);
-+
-+ /*
-+ * Get name (from name2): name1 = [ 0, 1, name2 ]
-+ */
-+
-+ name1[0] = 0;
-+ name1[1] = 1; /* get name */
-+ memcpy((name1 + 2), name2, len2 * sizeof(int));
-+ len1 = len2 + 2;
-+
-+ len2 = sizeof(name2);
-+ if (sysctl(name1, len1, name2, &len2, 0, 0) < 0) {
-+ if (errno == ENOENT)
-+ return (0);
-+
-+ croak("sysctl(name) failed in _iterator_next()\n");
-+ }
-+
-+ /* at this point, name2/len2 has name, update _name here */
-+ hv_store(self, "_name", 5, newSVpvn((char const *) name2, len2 - 1), 0);
-+
-+ return 1;
++ return 1;
}
+/*
@@ -216,9 +208,10 @@
- p = (int *)SvPVX(*ctxp);
- miblen = *p++;
- memcpy(mib, p, miblen * sizeof(int));
--
+
- if (!_init_iterator(self, mib, (int*)&miblen, 1)) {
-- XSRETURN_UNDEF;
++ if (_iterator_next(self) == 0)
+ XSRETURN_UNDEF;
- }
- }
- else {
@@ -257,17 +250,158 @@
- ctx = newSVpvn((const char *)qoid, (miblen+1) * sizeof(int));
- SvREFCNT_inc(ctx);
- hv_store(self, "_ctx", 4, ctx, 0);
+-
++
++ namep = hv_fetch(self, "_name", 5, 0);
++ SvREFCNT_inc(*namep);
++ RETVAL = *namep;
+ OUTPUT:
+ RETVAL
-+ if (_iterator_next(self) == 0)
-+ XSRETURN_UNDEF;
-+
-+ namep = hv_fetch(self, "_name", 5, 0);
-+ SvREFCNT_inc(*namep);
-+ RETVAL = *namep;
+@@ -235,6 +223,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;
+@@ -339,6 +331,21 @@
OUTPUT:
RETVAL
-@@ -583,25 +571,79 @@
++#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); \
++ }
++
+ SV *
+ _mib_lookup(const char *arg)
+ INIT:
+@@ -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);
+- }
++ 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);
+- }
++ 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);
+- }
++ 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);
+- }
++ 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);
+- }
++ 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);
+- }
++ DECODE(uint64_t);
+ break;
++#undef DECODE
+ case FMT_CLOCKINFO: {
+ HV *c = (HV *)sv_2mortal((SV *)newHV());
+ struct clockinfo *inf = (struct clockinfo *)buf;
+@@ -583,25 +525,79 @@
}
case FMT_DEVSTAT: {
HV *c = (HV *)sv_2mortal((SV *)newHV());
@@ -362,7 +496,7 @@
break;
}
#if __FreeBSD_version >= 500000
-@@ -878,6 +920,10 @@
+@@ -878,6 +874,12 @@
SV **oidp;
SV *oid;
char *oid_data;
@@ -370,14 +504,43 @@
+ long long llval;
+ uint64_t uint64val;
+ unsigned long long ullval;
++ int8_t int8val;
++ uint8_t uint8val;
int oid_fmt;
int oid_len;
int intval;
-@@ -955,6 +1001,42 @@
- newval = &ulongval;
- newsize = sizeof(ulongval);
+@@ -936,6 +938,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 +976,41 @@
+ }
+ newval = &ulongval;
+ newsize = sizeof(ulongval);
++ break;
+ case FMT_64:
+ llval = strtoll(value, &endconvptr, 0);
+ if (endconvptr == value || *endconvptr != '\0' ||
@@ -412,7 +575,6 @@
+ uint64val = (uint64_t)ullval;
+ newval = &uint64val;
+ newsize = sizeof(uint64val);
-+ break;
+ break;
}
- if (sysctl((int *)oid_data, oid_len, 0, 0, newval, newsize) == -1) {
More information about the svn-ports-head
mailing list