Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F140089191
D25434.id73603.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
17 KB
Referenced Files
None
Subscribers
None
D25434.id73603.diff
View Options
Index: sysutils/p5-BSD-Sysctl/Makefile
===================================================================
--- sysutils/p5-BSD-Sysctl/Makefile
+++ sysutils/p5-BSD-Sysctl/Makefile
@@ -3,7 +3,7 @@
PORTNAME= BSD-Sysctl
PORTVERSION= 0.11
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= sysutils perl5
MASTER_SITES= CPAN
PKGNAMEPREFIX= p5-
Index: sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL
===================================================================
--- /dev/null
+++ sysutils/p5-BSD-Sysctl/files/patch-Makefile.PL
@@ -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
Index: sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm
===================================================================
--- /dev/null
+++ sysutils/p5-BSD-Sysctl/files/patch-Sysctl.pm
@@ -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;
+ }
+
Index: sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs
===================================================================
--- sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs
+++ sysutils/p5-BSD-Sysctl/files/patch-Sysctl.xs
@@ -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;
-+
-+ /*
-+ * 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");
-+ }
-+ 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");
-+ }
++ croak("sysctl(name) failed in _iterator_next()\n");
+ }
+- }
+- return 1;
+
-+ /* at this point, name2/len2 has name, update _name here */
-+ hv_store(self, "_name", 5, newSVpvn((char const *) name2, len2 - 1), 0);
++ /* 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) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 21, 2:23 AM (21 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27105173
Default Alt Text
D25434.id73603.diff (17 KB)
Attached To
Mode
D25434: Update to run on most recent -current
Attached
Detach File
Event Timeline
Log In to Comment