Hi,

I like this. Do you have plans the commit it on stable/9?

Ronald.

On Wed, 26 Oct 2011 04:11:28 +0200, Hiroki Sato <h...@freebsd.org> wrote:

Author: hrs
Date: Wed Oct 26 02:11:28 2011
New Revision: 226775
URL: http://svn.freebsd.org/changeset/base/226775

Log:
- Add support for a "!" character in regex matching in devd(8). It inverts
    the logic (true/false) of the matching.
 - Add "!usbus[0-9]+" to IFNET ATTACH notification handler in the default
devd.conf to prevent rc.d/netif from running when usbus[0-9]+ is attached.
 Reviewed by:   imp

Modified:
  head/etc/devd.conf
  head/sbin/devd/devd.cc
  head/sbin/devd/devd.conf.5
  head/sbin/devd/devd.hh

Modified: head/etc/devd.conf
==============================================================================
--- head/etc/devd.conf  Wed Oct 26 01:58:36 2011        (r226774)
+++ head/etc/devd.conf  Wed Oct 26 02:11:28 2011        (r226775)
@@ -38,6 +38,7 @@ options {
 #
 notify 0 {
        match "system"                "IFNET";
+       match "subsystem"     "!usbus[0-9]+";
        match "type"          "ATTACH";
        action "/etc/pccard_ether $subsystem start";
 };

Modified: head/sbin/devd/devd.cc
==============================================================================
--- head/sbin/devd/devd.cc      Wed Oct 26 01:58:36 2011        (r226774)
+++ head/sbin/devd/devd.cc      Wed Oct 26 02:11:28 2011        (r226775)
@@ -251,7 +251,14 @@ match::match(config &c, const char *var,
        : _var(var)
 {
        _re = "^";
-       _re.append(c.expand_string(string(re)));
+       if (!c.expand_string(string(re)).empty() &&
+           c.expand_string(string(re)).at(0) == '!') {
+               _re.append(c.expand_string(string(re)).substr(1));
+               _inv = 1;
+       } else {
+               _re.append(c.expand_string(string(re)));
+               _inv = 0;
+       }
        _re.append("$");
        regcomp(&_regex, _re.c_str(), REG_EXTENDED | REG_NOSUB | REG_ICASE);
 }
@@ -268,10 +275,13 @@ match::do_match(config &c)
        bool retval;
        if (Dflag)
-               fprintf(stderr, "Testing %s=%s against %s\n", _var.c_str(),
-                   value.c_str(), _re.c_str());
+               fprintf(stderr, "Testing %s=%s against %s, invert=%d\n",
+                   _var.c_str(), value.c_str(), _re.c_str(), _inv);
        retval = (regexec(&_regex, value.c_str(), 0, NULL, 0) == 0);
+       if (_inv == 1)
+               retval = (retval == 0) ? 1 : 0;
+
        return retval;
 }

Modified: head/sbin/devd/devd.conf.5
==============================================================================
--- head/sbin/devd/devd.conf.5  Wed Oct 26 01:58:36 2011        (r226774)
+++ head/sbin/devd/devd.conf.5  Wed Oct 26 02:11:28 2011        (r226775)
@@ -41,7 +41,7 @@
.\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 .\" SOFTWARE.
 .\"
-.Dd March 8, 2009
+.Dd October 25, 2011
 .Dt DEVD.CONF 5
 .Os
 .Sh NAME
@@ -121,6 +121,10 @@ Creates a regular expression and assigns
 .Ar regexp-name .
 The variable is available throughout the rest of
 the configuration file.
+If the string begins with
+.Ql \&! ,
+it matches if the regular expression formed by the rest of the string
+does not match.
 All regular expressions have an implicit
 .Ql ^$
 around them.

Modified: head/sbin/devd/devd.hh
==============================================================================
--- head/sbin/devd/devd.hh      Wed Oct 26 01:58:36 2011        (r226774)
+++ head/sbin/devd/devd.hh      Wed Oct 26 02:11:28 2011        (r226775)
@@ -92,6 +92,7 @@ public:
 private:
        std::string _var;
        std::string _re;
+       bool _inv;
        regex_t _regex;
 };
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to