From: Paul Eggert Date: Sat, 7 Jan 2017 00:14:21 +0000 (-0800) Subject: getprogname: port to IRIX X-Git-Tag: v1.0~6405 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=7d75021d82318d9a297becf18d7a1f7394f2776e;p=gnulib.git getprogname: port to IRIX * lib/getprogname.c (getprogname): Port to IRIX. Based on an idea by Bastien Roucariès at: http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00096.html via code from Bruno Haible at: https://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00249.html --- diff --git a/ChangeLog b/ChangeLog index 25db030a81..d51ed8452e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2017-01-06 Paul Eggert + getprogname: port to IRIX + * lib/getprogname.c (getprogname): Port to IRIX. + Based on an idea by Bastien Roucariès at: + http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00096.html + via code from Bruno Haible at: + https://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00249.html + localename-tests: port to NetBSD 7 Problem reported by Nelson H. F. Beebe. * tests/test-localename.c: diff --git a/lib/getprogname.c b/lib/getprogname.c index fb6d8b8101..729f01ed54 100644 --- a/lib/getprogname.c +++ b/lib/getprogname.c @@ -43,6 +43,14 @@ # include #endif +#ifdef __sgi +# include +# include +# include +# include +# include +#endif + #include "dirname.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ @@ -143,6 +151,29 @@ getprogname (void) free (buf.ps_pathptr); } return p; +# elif defined __sgi /* IRIX */ + char filename[50]; + int fd; + + sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); + fd = open (filename, O_RDONLY); + if (0 <= fd) + { + prpsinfo_t buf; + int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); + close (fd); + if (ioctl_ok) + { + char *name = buf.pr_fname; + char *namesize = sizeof buf.pr_fname; + char *namenul = memchr (name, '\0', namesize); + size_t namelen = namenul ? namenul - name : namesize; + char *namecopy = malloc (namelen + 1); + namecopy[namelen] = 0; + return memcpy (namecopy, name, namelen); + } + } + return NULL; # else # error "getprogname module not ported to this OS" # endif