aboutsummaryrefslogtreecommitdiff
path: root/sbin/devd/devd.cc
diff options
context:
space:
mode:
authorHiroki Sato <hrs@FreeBSD.org>2011-10-26 02:11:28 +0000
committerHiroki Sato <hrs@FreeBSD.org>2011-10-26 02:11:28 +0000
commit0321b694c7854579f4d21498c53d0f6381200703 (patch)
tree4d011720f50d6e9301496fa296ee8c8ddd402c37 /sbin/devd/devd.cc
parent5e6f40a26427fe580c8cfa176e88a3c254de41a4 (diff)
downloadsrc-0321b694c7854579f4d21498c53d0f6381200703.tar.gz
src-0321b694c7854579f4d21498c53d0f6381200703.zip
- 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
Notes
Notes: svn path=/head/; revision=226775
Diffstat (limited to 'sbin/devd/devd.cc')
-rw-r--r--sbin/devd/devd.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc
index 87d0580e26d4..fd3b6e396785 100644
--- a/sbin/devd/devd.cc
+++ b/sbin/devd/devd.cc
@@ -251,7 +251,14 @@ match::match(config &c, const char *var, const char *re)
: _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;
}