if (!p)
return false;
- if (n < STRLEN("x.slice"))
+ if (n < strlen("x.slice"))
return false;
if (memcmp(p + n - 6, ".slice", 6) == 0) {
p += strspn(p, "/");
n = strcspn(p, "/");
- if (n < STRLEN("session-x.scope"))
+ if (n < strlen("session-x.scope"))
return NULL;
if (memcmp(p, "session-", 8) == 0 && memcmp(p + n - 6, ".scope", 6) == 0) {
p += strspn(p, "/");
n = strcspn(p, "/");
- if (n < STRLEN("user@x.service"))
+ if (n < strlen("user@x.service"))
return NULL;
if (memcmp(p, "user@", 5) == 0 && memcmp(p + n - 8, ".service", 8) == 0) {
unified_cache = CGROUP_UNIFIED_ALL;
#if 0 /// The handling of cgroups is a bit different with elogind
} else if (F_TYPE_EQUAL(fs.f_type, TMPFS_MAGIC)) {
+ log_debug("Found cgroup2 on /sys/fs/cgroup/unified, unified hierarchy for systemd controller");
#else
} else if (F_TYPE_EQUAL(fs.f_type, CGROUP_SUPER_MAGIC)
|| F_TYPE_EQUAL(fs.f_type, TMPFS_MAGIC)) {
#endif // 0
if (statfs("/sys/fs/cgroup/unified/", &fs) == 0 &&
F_TYPE_EQUAL(fs.f_type, CGROUP2_SUPER_MAGIC)) {
- log_debug("Found cgroup2 on /sys/fs/cgroup/unified, unified hierarchy for elogind controller");
unified_cache = CGROUP_UNIFIED_SYSTEMD;
unified_systemd_v232 = false;
} else {
if (rename_noreplace(AT_FDCWD, path, AT_FDCWD, target) < 0)
return -errno;
} else {
- char proc_fd_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1];
+ char proc_fd_path[strlen("/proc/self/fd/") + DECIMAL_STR_MAX(fd) + 1];
xsprintf(proc_fd_path, "/proc/self/fd/%i", fd);
}
static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *mnt_id) {
- char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)];
+ char path[strlen("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)];
_cleanup_free_ char *fdinfo = NULL;
_cleanup_close_ int subfd = -1;
char *p;
}
#if 0 /// UNNEEDED by elogind
-/*
- * Return values:
- * < 0 : wait_for_terminate_with_timeout() failed to get the state of the
- * process, the process timed out, the process was terminated by a
- * signal, or failed for an unknown reason.
- * >=0 : The process terminated normally with no failures.
- *
- * Success is indicated by a return value of zero, a timeout is indicated
- * by ETIMEDOUT, and all other child failure states are indicated by error
- * is indicated by a non-zero value.
- */
-int wait_for_terminate_with_timeout(pid_t pid, usec_t timeout) {
- sigset_t mask;
- int r;
- usec_t until;
-
- assert_se(sigemptyset(&mask) == 0);
- assert_se(sigaddset(&mask, SIGCHLD) == 0);
-
- /* Drop into a sigtimewait-based timeout. Waiting for the
- * pid to exit. */
- until = now(CLOCK_MONOTONIC) + timeout;
- for (;;) {
- usec_t n;
- siginfo_t status = {};
- struct timespec ts;
-
- n = now(CLOCK_MONOTONIC);
- if (n >= until)
- break;
-
- r = sigtimedwait(&mask, NULL, timespec_store(&ts, until - n)) < 0 ? -errno : 0;
- /* Assuming we woke due to the child exiting. */
- if (waitid(P_PID, pid, &status, WEXITED|WNOHANG) == 0) {
- if (status.si_pid == pid) {
- /* This is the correct child.*/
- if (status.si_code == CLD_EXITED)
- return (status.si_status == 0) ? 0 : -EPROTO;
- else
- return -EPROTO;
- }
- }
- /* Not the child, check for errors and proceed appropriately */
- if (r < 0) {
- switch (r) {
- case -EAGAIN:
- /* Timed out, child is likely hung. */
- return -ETIMEDOUT;
- case -EINTR:
- /* Received a different signal and should retry */
- continue;
- default:
- /* Return any unexpected errors */
- return r;
- }
- }
- }
-
- return -EPROTO;
-}
-
void sigkill_wait(pid_t pid) {
assert(pid > 1);