From 07b97b0528cabc64963677c4624d794eafad49ca Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 11 Oct 2018 18:24:51 +0200 Subject: [PATCH] getprogname: Work around program name truncation when possible. * lib/getprogname.c (getprogname) [HP-UX]: When pst_ucomm is truncated, possibly use pst_cmd instead. --- ChangeLog | 6 ++++++ lib/getprogname.c | 30 +++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6161c05b6c..3940fb2ddd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2018-10-11 Bruno Haible + + getprogname: Work around program name truncation when possible. + * lib/getprogname.c (getprogname) [HP-UX]: When pst_ucomm is truncated, + possibly use pst_cmd instead. + 2018-10-08 Paul Eggert fts: cleanup after FTS_NOATIME removal diff --git a/lib/getprogname.c b/lib/getprogname.c index 58625de31b..4f97df491c 100644 --- a/lib/getprogname.c +++ b/lib/getprogname.c @@ -110,9 +110,33 @@ getprogname (void) first = 0; pid_t pid = getpid (); struct pst_status status; - p = (0 < pstat_getproc (&status, sizeof status, 0, pid) - ? strdup (status.pst_ucomm) - : NULL); + if (pstat_getproc (&status, sizeof status, 0, pid) > 0) + { + if (strlen (status.pst_ucomm) < PST_UCOMMLEN - 1) + p = status.pst_ucomm; + else + { + /* status.pst_ucomm is truncated to length PST_UCOMMLEN - 1. + Look at status.pst_cmd instead. */ + char *space = strchr (status.pst_cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (status.pst_cmd, '/'); + if (p != NULL) + p++; + else + p = status.pst_cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, status.pst_ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than status.pst_ucomm. */ + ; + else + p = status.pst_ucomm; + } + p = strdup (p); + } + else + p = NULL; if (!p) p = "?"; } -- 2.39.5