From: Lennart Poettering Date: Wed, 8 Jan 2025 09:53:00 +0000 (+0100) Subject: pidref: copy fd id in pidref_copy() too X-Git-Tag: v258-rc1~1667^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06744cbb5293ee2af05e30ebbb0fddbc2a554837;p=thirdparty%2Fsystemd.git pidref: copy fd id in pidref_copy() too --- diff --git a/src/basic/pidref.c b/src/basic/pidref.c index f665438375b..53992aa3800 100644 --- a/src/basic/pidref.c +++ b/src/basic/pidref.c @@ -219,37 +219,32 @@ PidRef* pidref_free(PidRef *pidref) { return mfree(pidref); } -int pidref_copy(const PidRef *pidref, PidRef *dest) { - _cleanup_close_ int dup_fd = -EBADF; - pid_t dup_pid = 0; +int pidref_copy(const PidRef *pidref, PidRef *ret) { + _cleanup_(pidref_done) PidRef copy = PIDREF_NULL; /* If NULL is passed we'll generate a PidRef that refers to no process. This makes it easy to * copy pidref fields that might or might not reference a process yet. */ - assert(dest); + assert(ret); if (pidref) { if (pidref_is_remote(pidref)) /* Propagate remote flag */ - dup_fd = -EREMOTE; + copy.fd = -EREMOTE; else if (pidref->fd >= 0) { - dup_fd = fcntl(pidref->fd, F_DUPFD_CLOEXEC, 3); - if (dup_fd < 0) { + copy.fd = fcntl(pidref->fd, F_DUPFD_CLOEXEC, 3); + if (copy.fd < 0) { if (!ERRNO_IS_RESOURCE(errno)) return -errno; - dup_fd = -EBADF; + copy.fd = -EBADF; } } - if (pidref->pid > 0) - dup_pid = pidref->pid; + copy.pid = pidref->pid; + copy.fd_id = pidref->fd_id; } - *dest = (PidRef) { - .fd = TAKE_FD(dup_fd), - .pid = dup_pid, - }; - + *ret = TAKE_PIDREF(copy); return 0; } diff --git a/src/basic/pidref.h b/src/basic/pidref.h index 42ddf4e50bc..a268af46037 100644 --- a/src/basic/pidref.h +++ b/src/basic/pidref.h @@ -83,7 +83,7 @@ void pidref_done(PidRef *pidref); PidRef* pidref_free(PidRef *pidref); DEFINE_TRIVIAL_CLEANUP_FUNC(PidRef*, pidref_free); -int pidref_copy(const PidRef *pidref, PidRef *dest); +int pidref_copy(const PidRef *pidref, PidRef *ret); int pidref_dup(const PidRef *pidref, PidRef **ret); int pidref_new_from_pid(pid_t pid, PidRef **ret);