Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jun 2020 23:59:51 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r540356 - in head/sysutils/p5-BSD-Sysctl: . files
Message-ID:  <202006242359.05ONxpEd050468@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@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) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202006242359.05ONxpEd050468>