From 05314dd28c41819a167c97dbf764349a65de7cdd Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 6 May 2019 20:19:46 -0700 Subject: [PATCH] capture: add sp_capture_writer_new_from_env() This will return NULL if there is not sufficient data from the environment to setup tracing. --- lib/capture/sp-capture-writer.c | 23 +++++++++++++++++++++++ lib/capture/sp-capture-writer.h | 1 + 2 files changed, 24 insertions(+) diff --git a/lib/capture/sp-capture-writer.c b/lib/capture/sp-capture-writer.c index e45109c6..24c0d43f 100644 --- a/lib/capture/sp-capture-writer.c +++ b/lib/capture/sp-capture-writer.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -415,6 +416,9 @@ sp_capture_writer_new_from_fd (int fd, GTimeVal tv; gsize header_len = sizeof(*header); + if (fd < 0) + return NULL; + if (buffer_size == 0) buffer_size = DEFAULT_BUFFER_SIZE; @@ -1221,3 +1225,22 @@ do_end: return TRUE; } + +SpCaptureWriter * +sp_capture_writer_new_from_env (gsize buffer_size) +{ + const gchar *fdstr; + int fd; + + if (!(fdstr = g_getenv ("SYSPROF_TRACE_FD"))) + return NULL; + + if (!(fd = atoi (fdstr))) + return NULL; + + /* ignore stdin/stdout/stderr */ + if (fd < 2) + return NULL; + + return sp_capture_writer_new_from_fd (dup (fd), buffer_size); +} diff --git a/lib/capture/sp-capture-writer.h b/lib/capture/sp-capture-writer.h index 3b817e5e..336794b0 100644 --- a/lib/capture/sp-capture-writer.h +++ b/lib/capture/sp-capture-writer.h @@ -38,6 +38,7 @@ typedef struct gsize padding[48]; } SpCaptureStat; +SpCaptureWriter *sp_capture_writer_new_from_env (gsize buffer_size); SpCaptureWriter *sp_capture_writer_new (const gchar *filename, gsize buffer_size); SpCaptureWriter *sp_capture_writer_new_from_fd (int fd,