[Openmcl-devel] popen is not happy

Erann Gat eg at flownet.com
Wed Jun 4 13:39:17 PDT 2003


> I'm less convinced that it's safe to pass stack-allocated strings to
> #_popen; whether this works or not may depend on whether the forked
> child is able to use them before the parent deallocates them.  It
> looks very much like the exception you got here was in the child
> process; typing an "X" at the prompt killed the child process, and
> the pipe-based FILE* was returned to the parent process.

That's a good theory, but there are two problems.  First, you'd have the
same problem if you wrote the following C code:

{
  char * cmd = "ls";
  char * mode = "r+";
  return popen(cmd, mode);
}

and if that were going to be a problem I would think there's be a pretty
big warning in the popen man page.

The second problem is that the same thing happens with heap-allocated
cstrs:

? (setf s1 (CCL::%NEW-PTR 4 NIL))
#<A Mac Pointer #x41BC0>
? (setf s2 (CCL::%NEW-PTR 4 NIL))
#<A Mac Pointer #x41A80>
? (ccl::%cstr-pointer "ls" s1)
NIL
? (ccl::%cstr-pointer "r+" s2)
NIL
? (#_popen s1 s2)
#<A Null Mac Pointer>
? 

Actually, this looks like a bug in OSX's popen -- or a bug in their man
page.  Popen does not normally support bidirectional I/O, but the
Jaguar man page says it does, but aparently it doesn't.  I get the same
results in Python and C. Bummer.

With a unidirectional popen and heap-allocated cstrs it works.

E.


_______________________________________________
Openmcl-devel mailing list
Openmcl-devel at clozure.com
http://clozure.com/cgi-bin/mailman/listinfo/openmcl-devel



More information about the Openmcl-devel mailing list