aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-02-27 05:42:13 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2021-02-27 05:42:13 +0000
commitf0ad29acc1f2c9e82679c3af434a8bf185f36b94 (patch)
treed1c501cdc6e242b7567ac992b7393c62e2f35782 /src/libutil
parentca0994819d68aee26a2906c37a47ae609ac46c4c (diff)
parent6512be0a99360a1ae459f9efbf77ca5992477ec7 (diff)
Merge remote-tracking branch 'upstream/master' into path-info
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/args.cc8
-rw-r--r--src/libutil/args.hh2
-rw-r--r--src/libutil/util.cc2
3 files changed, 11 insertions, 1 deletions
diff --git a/src/libutil/args.cc b/src/libutil/args.cc
index 75eb19d28..afed0670f 100644
--- a/src/libutil/args.cc
+++ b/src/libutil/args.cc
@@ -19,6 +19,14 @@ void Args::addFlag(Flag && flag_)
if (flag->shortName) shortFlags[flag->shortName] = flag;
}
+void Args::removeFlag(const std::string & longName)
+{
+ auto flag = longFlags.find(longName);
+ assert(flag != longFlags.end());
+ if (flag->second->shortName) shortFlags.erase(flag->second->shortName);
+ longFlags.erase(flag);
+}
+
void Completions::add(std::string completion, std::string description)
{
assert(description.find('\n') == std::string::npos);
diff --git a/src/libutil/args.hh b/src/libutil/args.hh
index 4721c21df..c08ba8abd 100644
--- a/src/libutil/args.hh
+++ b/src/libutil/args.hh
@@ -140,6 +140,8 @@ public:
void addFlag(Flag && flag);
+ void removeFlag(const std::string & longName);
+
void expectArgs(ExpectedArg && arg)
{
expectedArgs.emplace_back(std::move(arg));
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 89f7b58f8..ef37275ac 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -946,7 +946,7 @@ void killUser(uid_t uid)
#else
if (kill(-1, SIGKILL) == 0) break;
#endif
- if (errno == ESRCH) break; /* no more processes */
+ if (errno == ESRCH || errno == EPERM) break; /* no more processes */
if (errno != EINTR)
throw SysError("cannot kill processes for uid '%1%'", uid);
}