From d60a35e94c4f5b8f09f15828242418f5073d46e7 Mon Sep 17 00:00:00 2001 From: Benji Wiebe Date: Sun, 11 Oct 2020 21:14:43 +0200 Subject: [PATCH] getprogname: Add support for OpenServer 6 and UnixWare 7. * lib/getprogname.c: Include , , . (getprogname): On OpenServer6 and UnixWare, read /proc//cmdline. --- ChangeLog | 6 ++++++ lib/getprogname.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/ChangeLog b/ChangeLog index 14dc601caa..6a0e15de72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2020-10-11 Benji Wiebe + + getprogname: Add support for OpenServer 6 and UnixWare 7. + * lib/getprogname.c: Include , , . + (getprogname): On OpenServer6 and UnixWare, read /proc//cmdline. + 2020-10-11 Bruno Haible tests: Avoid a name clash on UnixWare. diff --git a/lib/getprogname.c b/lib/getprogname.c index 744466ea92..23b17438c6 100644 --- a/lib/getprogname.c +++ b/lib/getprogname.c @@ -51,6 +51,12 @@ # include #endif +#if defined __SCO_VERSION__ || defined __sysv5__ +# include +# include +# include +#endif + #include "basename-lgpl.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ @@ -245,6 +251,38 @@ getprogname (void) } } return NULL; +# elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */ + char buf[80]; + int fd; + sprintf (buf, "/proc/%d/cmdline", getpid()); + fd = open (buf, O_RDONLY); + if (0 <= fd) + { + size_t n = read (fd, buf, 79); + if (n > 0) + { + buf[n] = '\0'; /* Guarantee null-termination */ + char *progname; + progname = strrchr (buf, '/'); + if (progname) + { + progname = progname + 1; /* Skip the '/' */ + } + else + { + progname = buf; + } + char *ret; + ret = malloc (strlen (progname) + 1); + if (ret) + { + strcpy (ret, progname); + return ret; + } + } + close (fd); + } + return "?"; # else # error "getprogname module not ported to this OS" # endif -- 2.39.5