Use scoped_fd in linux-nat.c:proc_mem_file

This changes linux-nat.c:proc_mem_file to use a scoped_fd and fixes up
the users.  Regression tested on x86-64 Fedora 40.

Approved-by: Kevin Buettner <kevinb@redhat.com>
This commit is contained in:
Tom Tromey
2025-03-17 14:50:38 -06:00
parent 57d2ceb311
commit 246a63ad0a

View File

@@ -4029,24 +4029,21 @@ linux_nat_target::pid_to_exec_file (int pid)
class proc_mem_file class proc_mem_file
{ {
public: public:
proc_mem_file (ptid_t ptid, int fd) proc_mem_file (ptid_t ptid, scoped_fd fd)
: m_ptid (ptid), m_fd (fd) : m_ptid (ptid), m_fd (std::move (fd))
{ {
gdb_assert (m_fd != -1); gdb_assert (m_fd.get () != -1);
} }
~proc_mem_file () ~proc_mem_file ()
{ {
linux_nat_debug_printf ("closing fd %d for /proc/%d/task/%ld/mem", linux_nat_debug_printf ("closing fd %d for /proc/%d/task/%ld/mem",
m_fd, m_ptid.pid (), m_ptid.lwp ()); m_fd.get (), m_ptid.pid (), m_ptid.lwp ());
close (m_fd);
} }
DISABLE_COPY_AND_ASSIGN (proc_mem_file); int fd () const noexcept
int fd ()
{ {
return m_fd; return m_fd.get ();
} }
private: private:
@@ -4055,7 +4052,7 @@ private:
ptid_t m_ptid; ptid_t m_ptid;
/* The file descriptor. */ /* The file descriptor. */
int m_fd = -1; scoped_fd m_fd;
}; };
/* The map between an inferior process id, and the open /proc/PID/mem /* The map between an inferior process id, and the open /proc/PID/mem
@@ -4093,9 +4090,9 @@ open_proc_mem_file (ptid_t ptid)
xsnprintf (filename, sizeof filename, xsnprintf (filename, sizeof filename,
"/proc/%d/task/%ld/mem", ptid.pid (), ptid.lwp ()); "/proc/%d/task/%ld/mem", ptid.pid (), ptid.lwp ());
int fd = gdb_open_cloexec (filename, O_RDWR | O_LARGEFILE, 0).release (); scoped_fd fd = gdb_open_cloexec (filename, O_RDWR | O_LARGEFILE, 0);
if (fd == -1) if (fd.get () == -1)
{ {
warning (_("opening /proc/PID/mem file for lwp %d.%ld failed: %s (%d)"), warning (_("opening /proc/PID/mem file for lwp %d.%ld failed: %s (%d)"),
ptid.pid (), ptid.lwp (), ptid.pid (), ptid.lwp (),
@@ -4103,12 +4100,11 @@ open_proc_mem_file (ptid_t ptid)
return; return;
} }
linux_nat_debug_printf ("opened fd %d for lwp %d.%ld",
fd.get (), ptid.pid (), ptid.lwp ());
proc_mem_file_map.emplace (std::piecewise_construct, proc_mem_file_map.emplace (std::piecewise_construct,
std::forward_as_tuple (ptid.pid ()), std::forward_as_tuple (ptid.pid ()),
std::forward_as_tuple (ptid, fd)); std::forward_as_tuple (ptid, std::move (fd)));
linux_nat_debug_printf ("opened fd %d for lwp %d.%ld",
fd, ptid.pid (), ptid.lwp ());
} }
/* Helper for linux_proc_xfer_memory_partial and /* Helper for linux_proc_xfer_memory_partial and