On 05/26/2013 19:20, David Wolfskill wrote:
A while back, I volunteered to maintain x11-wm/piewm, as it had been
assigned to "ports" and I'm one of the very few folks I know who uses
it.
...
So I hacked twm.c, per:

--- twm.c       1998-06-12 13:28:07.000000000 -0700
+++ twm.c       2013-05-10 21:02:32.000000000 -0700
@@ -93,6 +93,7 @@
  #endif

  #include <stdio.h>
+#include <stdlib.h>
  #include <signal.h>
  #include <fcntl.h>
  #include "twm.h"
@@ -177,6 +178,8 @@

  unsigned long black, white;

+extern char **environ;
+
  /***********************************************************************
   *
   *  Procedure:
@@ -186,7 +189,7 @@
   */

  int
-main(int argc, char **argv, char **environ)
+main(int argc, char **argv)
  {
      Window root, parent, *children;
      unsigned int nchildren;


rebuilt piewm, et voilĂ :  no crash.  :-)

I thought this was encouraging, and sent a note to Russ Nelson at
crynwr.com -- the upstream site.  That was on 10 May; I've had no
response.

I subsequently rebuild piewm with the patch applied for my usual
FreeBSD/i386 environment, and it's (also) been trouble-free.  (That
said, I don't actually do anything with the environment for piewm.
Indeed, in nearly all respects, I could use tvtwm without any difference
-- and those that would show up are too arcane to describe here.)

So I have a couple of questions related to the above:
* Is the patch correct?  I don't do much with C, and even less with C
   code that accesses the environment.  (When I write code, it's normally
   scripts, mostly in /bin/sh.)  getenv(3) mentioned the "#include
   <stdlib.h>", so I did that based on theat man page.  I didn't see
   anything about declaring environ as an "extern char **", but wasn't
   keen on making more changes than necessary to the code.  (Mind, I
   fully support making "necessary" -- or even "strongly advised" --
   changes.)

Should be fine. See environ(7) or
http://pubs.opengroup.org/onlinepubs/9699919799/functions/environ.html:

"In addition, the following variable, which must be declared by the user if it is to be used directly: extern char **environ; "

Including <stdlib.h> is not necessary to access the environ variable.

--
Stefan
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to