From: Benji Wiebe Date: Sun, 11 Oct 2020 19:14:43 +0000 (+0200) Subject: getprogname: Add support for OpenServer 6 and UnixWare 7. X-Git-Tag: v1.0~3570 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=d60a35e94c4f5b8f09f15828242418f5073d46e7;p=gnulib.git getprogname: Add support for OpenServer 6 and UnixWare 7. * lib/getprogname.c: Include , , . (getprogname): On OpenServer6 and UnixWare, read /proc//cmdline. --- 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