home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1009 < prev    next >
Internet Message Format  |  1990-12-28  |  2KB

  1. From: peter@ficc.uu.net (Peter da Silva)
  2. Newsgroups: alt.sources
  3. Subject: Patch for TCL for systems without dup2.
  4. Message-ID: <O762Y24ggpc2@ficc.uu.net>
  5. Date: 12 Mar 90 04:51:34 GMT
  6.  
  7. Archive-name: tcl/patch.1
  8.  
  9. Here's a patch for tcl for older System V systems without the dup2 system
  10. call (or library routine). It's a bit overkillish, but makes the code a bit
  11. nicer. Rather than emulate dup2, I switched back to the older method of
  12. depending on fds being allocated in numerical order...
  13.  
  14. *** tclCmdAH.old
  15. --- tclCmdAH.c
  16. ***************
  17. *** 410,415 ****
  18. --- 410,435 ----
  19.    *----------------------------------------------------------------------
  20.    */
  21.   
  22. + static int setup_fds(fd0, fd1, fd2)
  23. + {
  24. +     if(fd0 != -1) {
  25. +         close(0);
  26. +         if(dup(fd0) != 0)
  27. +             return 0;
  28. +     }
  29. +     if(fd1 != -1) {
  30. +         close(1);
  31. +         if(dup(fd1) != 1)
  32. +             return 0;
  33. +     }
  34. +     if(fd2 != -1) {
  35. +         close(2);
  36. +         if(dup(fd2) != 2)
  37. +             return 0;
  38. +     }
  39. +     return 1;
  40. + }
  41.       /* ARGSUSED */
  42.   int
  43.   Tcl_ExecCmd(dummy, interp, argc, argv)
  44. ***************
  45. *** 510,517 ****
  46.       if (pid == 0) {
  47.       char errSpace[100];
  48.   
  49. !     if (( (stdIn != -1) && (dup2(stdIn, 0) == -1) )
  50. !        || (dup2(stdOut[1], 1) == -1) || (dup2(stdOut[1], 2) == -1)) {
  51.           char *err;
  52.           err = "forked process couldn't set up input/output";
  53.           write(stdOut[1], err, strlen(err));
  54. --- 530,536 ----
  55.       if (pid == 0) {
  56.       char errSpace[100];
  57.   
  58. !     if(!setup_fds(stdIn, stdOut[1], stdOut[1])) {
  59.           char *err;
  60.           err = "forked process couldn't set up input/output";
  61.           write(stdOut[1], err, strlen(err));
  62. -- 
  63.  _--_|\  `-_-' Peter da Silva. +1 713 274 5180. <peter@ficc.uu.net>.
  64. /      \  'U`
  65. \_.--._/
  66.       v
  67.