From 134e295c691e97045b29b37371158afac539ee0a Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Fri, 26 May 2017 20:32:33 +0000 Subject: [PATCH] common: get_process_name: use getprogname on bsd systems Signed-off-by: Mykola Golub --- CMakeLists.txt | 1 + src/common/code_environment.cc | 18 ++++++++++++++++++ src/include/config-h.in.cmake | 3 +++ 3 files changed, 22 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ef70cf62954a..010127f1cc316 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,6 +105,7 @@ CHECK_FUNCTION_EXISTS(pthread_set_name_np HAVE_PTHREAD_SET_NAME_NP) CHECK_FUNCTION_EXISTS(pthread_setname_np HAVE_PTHREAD_SETNAME_NP) CHECK_FUNCTION_EXISTS(pthread_getname_np HAVE_PTHREAD_GETNAME_NP) CHECK_FUNCTION_EXISTS(eventfd HAVE_EVENTFD) +CHECK_FUNCTION_EXISTS(getprogname HAVE_GETPROGNAME) CHECK_INCLUDE_FILES("linux/types.h" HAVE_LINUX_TYPES_H) CHECK_INCLUDE_FILES("linux/version.h" HAVE_LINUX_VERSION_H) diff --git a/src/common/code_environment.cc b/src/common/code_environment.cc index 662fa36c9bdf0..d3dbda5730100 100644 --- a/src/common/code_environment.cc +++ b/src/common/code_environment.cc @@ -61,6 +61,24 @@ int get_process_name(char *buf, int len) return prctl(PR_GET_NAME, buf); } +#elif defined(HAVE_GETPROGNAME) + +int get_process_name(char *buf, int len) +{ + if (len <= 0) { + return -EINVAL; + } + + const char *progname = getprogname(); + if (progname == nullptr || *progname == '\0') { + return -ENOSYS; + } + + strncpy(buf, progname, len - 1); + buf[len - 1] = '\0'; + return 0; +} + #else int get_process_name(char *buf, int len) diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake index 55df142f3ccb7..22aada40e7b75 100644 --- a/src/include/config-h.in.cmake +++ b/src/include/config-h.in.cmake @@ -315,4 +315,7 @@ #cmakedefine PYTHON_EXECUTABLE "@PYTHON_EXECUTABLE@" +/* Define to 1 if you have the `getprogname' function. */ +#cmakedefine HAVE_GETPROGNAME 1 + #endif /* CONFIG_H */ -- 2.39.5