Revision history for Perl extension IPC::ChildSafe. 0.01 Sat Nov 29 12:03:06 1997 - Original version; created by h2xs 1.18 1.01 Mon Dec 01 22:23:14 1997 - First release. There are a few bells and whistles I would like to add yet, but this version seems stable. Might as well get feedback before implementing the b&w. 2.00 Mon Mar 09 22:23:14 1998 - Reworked the entire perl interface using one 'smart' method $obj->command. This detects whether it was run in a scalar or list context and either dumps all output to true stdout/stderr and returns the exit status (scalar case) or returns it all plus the exit status in a hash (list case). Added a function for registering an error-checking routine. This allows the user to set up their preferred regular expression (or other algorithm) for determining which output constitutes an error condition. 2.02 Sat Apr 11 15:23:14 1998 - Added a third mode to the $obj->command method; if called in a void context it now will exit on failure. - As a result of the above improvement, moved the required perl version up to 5.004 since the wantarray() feature which enables it was added only in 5.004. 2.10 Sun Apr 26 15:23:14 1998 - Renamed to IPC::ChildSafe as a result of discussions on modules@perl.org. - Reworked to use a hash to represent the object. This allowed a rethinking of how $obj->command behaves in scalar context. Now, when used in scalar it will store all generated output in arrays _STDOUT and _STDERR. This data can be retrieved later using the new methods 'stdout' and 'stderr'. - Added a related feature; when $obj->command() is called in a void context and with no arguments, it flushes (throws away) the stored results. 2.20 Sun May 10 17:43:44 1998 - Added the ability to handle stderr differently via $obj->command("cmd" => IGNORE) etc. - Added $obj->status method to poll the currently-stored stderr for an error count. - Moved ClearCase-specific comments out to subclassed IPC::ClearTool module. 2.25 Sun May 17 12:34:46 1998 - Renamed $obj->command() to $obj->cmd() for brevity. Left old method in place but de-documented. 2.26 Mon Sep 28 09:44:12 EDT 1998 - Fixed a bug causing multiple instances to overwrite each other. 2.27 Mon Oct 19 16:25:14 EDT 1998 - Fixed a couple of doc bugs 2.28 Sat Jan 9 19:52:07 EST 1999 - Updated XS code to compile under perl5.006 and above (cleaned up -DPERL_POLLUTE macros). 2.29 Mon Jan 11 10:12:25 EST 1999 - Previous fix (2.28) turned out to break with perl <5.006. 2.30 Fri Oct 1 08:07:12 EDT 1999 - Fixed a timing bug which caused it to report failure status for the child process on Linux. I was assuming the child must have ended before the call to waitpid(), but that was a sloppy assumption which for whatever reason was always true on Solaris but never true on Linux. Now I do the right thing. - Made some minor documentation improvements. 2.31 Sat Oct 2 23:18:28 EDT 1999 - Added a 'mode' attribute as a cleaner way than $obj->cmd(command => mode). - Improved docs and removed redundant comments. 2.32 Wed Nov 17 06:14:47 EST 1999 - Added a DESTROY method in order to stop the coprocess when obj-ref goes out of scope. - Renamed child.c to childsafe.c etc. for cosmetic reasons. (apologies to anyone inconvenienced by this!). 2.33 Mon Nov 29 12:36:21 EST 1999 - To fix an esoteric bug I was forced to make a slightly incompatible change to the C API. This should not affect Perl users at all (except for having the bug fixed, that is). The change was to add a 4th parameter to the child_open() function. You can simply pass NULL there for the previous behavior, or pass a command which tells the child process to exit to get benefit of the bugfix. I.e. if the child is a shell you can pass "exit". Without this explicit command it's possible for multiple instances of the coprocess object to hang upon closing. Of course multiple instances are rare - the whole point of this module is to replace many processes with one. 3.01 Mon Dec 6 11:29:47 EST 1999 - Major version bumped to recognize a complete rewrite of the C code contributed by Wolfgang Laun (Wolfgang.Laun@chello.at). This version uses poll() and should show performance and robustness improvements. In particular it will not stall if the stderr pipe fills up as the old one did. - Semi-ported to Win32. "Semi" in this case means that the IPC::ChildSafe module is modified to install on Windows without the XSUB code (the part that's hard to port). Of course ChildSafe by itself is useless without the XSUB code so why do this? Because IPC::ClearTool can (and now does) subclass ChildSafe and override the methods that use the compiled code, using instead the ClearCase Automation Library (CAL), a COM interface new in CC 3.2.1. Thus, although IPC::ChildSafe still doesn't work in Windows its subclass IPC::ClearTool does (as of CC 3.2.1). - NOTE: THIS RELEASE BREAKS SOME BACKWARD COMPATIBILITY!! It just seemed that this was a major enough rewrite, and the benefits of it important enough, that it was the right time to jettison some old back-compat things that were cluttering up the code. The important one is that there's no longer a standalone C API; the C code is now tuned to work directly with Perl. The previous C API (from version 2.33) still works fine so if you need C just stick with that. Or fix up the new one yourself; there's nothing to keep it from working as a C API, I just didn't get around to adding it. - Other compatibility issues: a couple of old method names (command, debug) that were being kept around are now gone. The modern names are 'cmd' and 'dbglevel'. - Allow mode methods to take a zero arg to reset the attribute, viz.: $obj-store(0). 3.02 Mon Dec 20 07:54:18 EST 1999 - Fixed a porting bug for HP/UX found by Paul Schinder. - Fixed a typo: IPC_MOD => IPC_MODE 3.03 Wed Dec 22 09:44:24 EST 1999 - Portability patch for SunOS4. 3.04 Wed Dec 22 12:07:35 EST 1999 - Urk - another SunOS4 fix (for platforms without ssize_t). - This version tested on Solaris 2.5/6/7, SunOS4, Compaq OSF/1 V4.0, HP/UX 10.20, UnixWare 7.0.1, and AIX 4.3 in various combinations with Perl 5.004 and 5.005. - Cleaned up some test scripting issues. 3.05 Fri Dec 24 15:51:55 EST 1999 - Added 'chdir' method and some doc work. 3.06 Tue Jan 4 23:10:55 EST 2000 - Made it work with non-newline-terminated return values. - Added 'noexec' method. 3.08 Sat Jan 15 20:22:30 EST 2000 - Fixed a couple of warnings. 3.09 Tue Feb 1 17:36:44 EST 2000 - Found and fixed a couple of bugs in the un(der)documented 'stdin' method. Now does the right thing whether the input is chomped or not. 3.10 Tue Feb 8 09:57:44 EST 2000 - The mode methods (->store et al) now return $self to allow for "drive-by" attribute setting, e.g. $obj->store->cmd('pwv'); 3.11 Thu Apr 6 09:00:22 EDT 2000 - Backported to perl 5.004/Windows (e.g. MKS). Required a few less assumptions about Getopt::Long capabilities and $^O. 3.12 Tue Nov 13 18:57:04 EST 2001 - Made static-size buffers dramatically larger (2k -> 128k) which may cure some core dumps (but of course not all). - Applied patch from Daphne Pfister @nortelnetworks.com to build with a -DMULTIPLICITY perl. - Removed support for CC 3.2.1 CAL on Windows because it required some truly awful code, and 3.2.1 is obsolete. - Various other minor cleanups. - NOTE: I cannot verify the versions of Perl on which this currently works. There are potential issues with -DMULTIPLICITY perls as above, there are questions about the -DPOLLUTE code changes in 5.005 and 5.6. I've tried to code conservatively and don't KNOW of anything that would keep it from compiling/working with any version >=5.004, but have no way to test all the permutations.