From: Mike Yuan Date: Thu, 13 Mar 2025 13:54:04 +0000 (+0100) Subject: pidfd-util: use get_proc_field() for pidfd_get_pid_fdinfo() X-Git-Tag: v258-rc1~704^2~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2c4df9e48c07f31912c6f3d3686f569b50747de;p=thirdparty%2Fsystemd.git pidfd-util: use get_proc_field() for pidfd_get_pid_fdinfo() --- diff --git a/src/basic/pidfd-util.c b/src/basic/pidfd-util.c index edd2848d07c..52a371ba1ac 100644 --- a/src/basic/pidfd-util.c +++ b/src/basic/pidfd-util.c @@ -89,26 +89,21 @@ static int pidfd_get_info(int fd, struct pidfd_info *info) { static int pidfd_get_pid_fdinfo(int fd, pid_t *ret) { char path[STRLEN("/proc/self/fdinfo/") + DECIMAL_STR_MAX(int)]; - _cleanup_free_ char *fdinfo = NULL; + _cleanup_free_ char *p = NULL; int r; assert(fd >= 0); xsprintf(path, "/proc/self/fdinfo/%i", fd); - r = read_full_virtual_file(path, &fdinfo, NULL); + r = get_proc_field(path, "Pid", &p); if (r == -ENOENT) - return proc_fd_enoent_errno(); + return -EBADF; + if (r == -ENODATA) /* not a pidfd? */ + return -ENOTTY; if (r < 0) return r; - char *p = find_line_startswith(fdinfo, "Pid:"); - if (!p) - return -ENOTTY; /* not a pidfd? */ - - p = skip_leading_chars(p, /* bad = */ NULL); - p[strcspn(p, WHITESPACE)] = 0; - if (streq(p, "0")) return -EREMOTE; /* PID is in foreign PID namespace? */ if (streq(p, "-1"))