[libgpiod][PATCH 1/2] gpiosim: get the process name using prctl()
From: Bartosz Golaszewski <hidden>
Date: 2022-12-07 09:16:04
From: Bartosz Golaszewski <redacted> program_invocation_short_name is set once at the program's start. If we change the process name using prctl(), we need to retrieve it using the same system call as program_invocation_short_name will not be updated. Signed-off-by: Bartosz Golaszewski <redacted> --- configure.ac | 2 ++ tests/gpiosim/gpiosim.c | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index dc945ef..07706f0 100644
--- a/configure.ac
+++ b/configure.ac@@ -85,10 +85,12 @@ AC_CHECK_FUNC([scandir], [], [FUNC_NOT_FOUND_LIB([scandir])]) AC_CHECK_FUNC([alphasort], [], [FUNC_NOT_FOUND_LIB([alphasort])]) AC_CHECK_FUNC([ppoll], [], [FUNC_NOT_FOUND_LIB([ppoll])]) AC_CHECK_FUNC([realpath], [], [FUNC_NOT_FOUND_LIB([realpath])]) +AC_CHECK_FUNC([prctl], [], [FUNC_NOT_FOUND_LIB([prctl])]) AC_CHECK_HEADERS([getopt.h], [], [HEADER_NOT_FOUND_LIB([getopt.h])]) AC_CHECK_HEADERS([dirent.h], [], [HEADER_NOT_FOUND_LIB([dirent.h])]) AC_CHECK_HEADERS([sys/poll.h], [], [HEADER_NOT_FOUND_LIB([sys/poll.h])]) AC_CHECK_HEADERS([sys/sysmacros.h], [], [HEADER_NOT_FOUND_LIB([sys/sysmacros.h])]) +AC_CHECK_HEADERS([sys/prctl.h], [], [HEADER_NOT_FOUND_LIB([sys/prctl.h])]) AC_CHECK_HEADERS([linux/version.h], [], [HEADER_NOT_FOUND_LIB([linux/version.h])]) AC_CHECK_HEADERS([linux/const.h], [], [HEADER_NOT_FOUND_LIB([linux/const.h])]) AC_CHECK_HEADERS([linux/ioctl.h], [], [HEADER_NOT_FOUND_LIB([linux/ioctl.h])])
diff --git a/tests/gpiosim/gpiosim.c b/tests/gpiosim/gpiosim.c
index 881ecc8..e2a97fa 100644
--- a/tests/gpiosim/gpiosim.c
+++ b/tests/gpiosim/gpiosim.c@@ -12,6 +12,7 @@ #include <stdlib.h> #include <string.h> #include <sys/mount.h> +#include <sys/prctl.h> #include <sys/random.h> #include <sys/stat.h> #include <sys/types.h>
@@ -365,11 +366,14 @@ out_unref_kmod: static char *configfs_make_item(int at, int id) { - char *item_name; + char *item_name, prname[17]; int ret; - ret = asprintf(&item_name, "%s.%u.%d", - program_invocation_short_name, getpid(), id); + ret = prctl(PR_GET_NAME, prname); + if (ret) + return NULL; + + ret = asprintf(&item_name, "%s.%u.%d", prname, getpid(), id); if (ret < 0) return NULL;
--
2.37.2