No functional change intended.
Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to trunk as r16-5206-g69b484f9481f53.
gcc/ChangeLog:
* diagnostics/sarif-sink.cc (class unique_fd): New.
(sarif_socket_sink::sarif_socket_sink): Convert "fd" arg and m_fd
from int to unique_fd.
(~sarif_socket_sink): Drop.
(sarif_socket_sink::dump_kind): Update for m_fd becoming a
unique_fd.
(sarif_socket_sink::m_fd): Convert from "int" to "unique_fd".
(maybe_open_sarif_sink_for_socket): Likewise for "sfd".
Signed-off-by: David Malcolm <[email protected]>
---
gcc/diagnostics/sarif-sink.cc | 48 +++++++++++++++++++++++++++--------
1 file changed, 38 insertions(+), 10 deletions(-)
diff --git a/gcc/diagnostics/sarif-sink.cc b/gcc/diagnostics/sarif-sink.cc
index ac0a27472551..6ca02b23c0f9 100644
--- a/gcc/diagnostics/sarif-sink.cc
+++ b/gcc/diagnostics/sarif-sink.cc
@@ -4126,6 +4126,38 @@ private:
output_file m_output_file;
};
+class unique_fd
+{
+public:
+ unique_fd () : m_ival (-1) {}
+ explicit unique_fd (int ival) : m_ival (ival) {}
+ unique_fd (const unique_fd &) = delete;
+ unique_fd (unique_fd &&other)
+ : m_ival (other.m_ival)
+ {
+ other.m_ival = -1;
+ }
+ ~unique_fd ()
+ {
+ if (m_ival != -1)
+ close (m_ival);
+ }
+ unique_fd &operator= (const unique_fd &other) = delete;
+ unique_fd &operator= (unique_fd &&other)
+ {
+ if (m_ival != -1)
+ close (m_ival);
+ m_ival = other.m_ival;
+ other.m_ival = -1;
+ return *this;
+ }
+
+ operator int () const { return m_ival; }
+
+private:
+ int m_ival;
+};
+
class sarif_socket_sink : public sarif_sink
{
public:
@@ -4133,20 +4165,16 @@ public:
const line_maps *line_maps,
std::unique_ptr<sarif_serialization_format>
serialization_format,
const sarif_generation_options &sarif_gen_opts,
- int fd)
+ unique_fd fd)
: sarif_sink (dc, line_maps,
std::move (serialization_format),
sarif_gen_opts),
- m_fd (fd)
- {
- }
- ~sarif_socket_sink ()
+ m_fd (std::move (fd))
{
- close (m_fd);
}
void dump_kind (FILE *out) const override
{
- fprintf (out, "sarif_socket_sink: fd=%i", m_fd);
+ fprintf (out, "sarif_socket_sink: fd=%i", int (m_fd));
}
bool machine_readable_stderr_p () const final override
{
@@ -4210,7 +4238,7 @@ private:
free (buf);
}
- int m_fd;
+ unique_fd m_fd;
};
/* Print the start of an embedded link to PP, as per 3.11.6. */
@@ -4548,7 +4576,7 @@ maybe_open_sarif_sink_for_socket (context &dc)
if (!socket_name)
return;
- int sfd = socket (AF_UNIX, SOCK_STREAM, 0);
+ unique_fd sfd (socket (AF_UNIX, SOCK_STREAM, 0));
if (sfd == -1)
fatal_error (UNKNOWN_LOCATION,
"unable to create socket");
@@ -4574,7 +4602,7 @@ maybe_open_sarif_sink_for_socket (context &dc)
line_table,
std::make_unique <sarif_serialization_format_json> (true),
sarif_gen_opts,
- sfd);
+ std::move (sfd));
sink_->update_printer ();
dc.add_sink (std::move (sink_));
}
--
2.26.3