Artifact
f2851cb428771d296f37c55148985128420004c8:
Attachment "exec.diff" to
ticket [1476191fff]
added by
fishybell
2006-04-25 22:24:43.
0000: 64 69 66 66 20 2d 72 75 4e 20 74 63 6c 2e 6f 72 diff -ruN tcl.or
0010: 67 2f 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f 43 g/generic/tclIOC
0020: 6d 64 2e 63 20 74 63 6c 2f 67 65 6e 65 72 69 63 md.c tcl/generic
0030: 2f 74 63 6c 49 4f 43 6d 64 2e 63 0a 2d 2d 2d 20 /tclIOCmd.c.---
0040: 74 63 6c 2e 6f 72 67 2f 67 65 6e 65 72 69 63 2f tcl.org/generic/
0050: 74 63 6c 49 4f 43 6d 64 2e 63 09 32 30 30 36 2d tclIOCmd.c.2006-
0060: 30 34 2d 32 34 20 31 37 3a 30 30 3a 31 39 2e 30 04-24 17:00:19.0
0070: 30 30 30 30 30 30 30 30 20 2d 30 36 30 30 0a 2b 00000000 -0600.+
0080: 2b 2b 20 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 ++ tcl/generic/t
0090: 63 6c 49 4f 43 6d 64 2e 63 09 32 30 30 36 2d 30 clIOCmd.c.2006-0
00a0: 34 2d 32 34 20 31 37 3a 30 35 3a 31 30 2e 30 30 4-24 17:05:10.00
00b0: 30 30 30 30 30 30 30 20 2d 30 36 30 30 0a 40 40 0000000 -0600.@@
00c0: 20 2d 38 30 30 2c 31 39 20 2b 38 30 30 2c 31 39 -800,19 +800,19
00d0: 20 40 40 0a 20 20 20 20 20 63 68 61 72 20 2a 73 @@. char *s
00e0: 74 72 69 6e 67 3b 0a 20 20 20 20 20 54 63 6c 5f tring;. Tcl_
00f0: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 0a 20 20 Channel chan;.
0100: 20 20 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 61 CONST char *a
0110: 72 67 53 74 6f 72 61 67 65 5b 4e 55 4d 5f 41 52 rgStorage[NUM_AR
0120: 47 53 5d 3b 0a 2d 20 20 20 20 69 6e 74 20 61 72 GS];.- int ar
0130: 67 63 2c 20 62 61 63 6b 67 72 6f 75 6e 64 2c 20 gc, background,
0140: 69 2c 20 69 6e 64 65 78 2c 20 6b 65 65 70 4e 65 i, index, keepNe
0150: 77 6c 69 6e 65 2c 20 72 65 73 75 6c 74 2c 20 73 wline, result, s
0160: 6b 69 70 2c 20 6c 65 6e 67 74 68 3b 0a 2b 20 20 kip, length;.+
0170: 20 20 69 6e 74 20 61 72 67 63 2c 20 62 61 63 6b int argc, back
0180: 67 72 6f 75 6e 64 2c 20 69 2c 20 69 6e 64 65 78 ground, i, index
0190: 2c 20 6b 65 65 70 4e 65 77 6c 69 6e 65 2c 20 69 , keepNewline, i
01a0: 67 6e 6f 72 65 53 74 64 65 72 72 2c 20 72 65 73 gnoreStderr, res
01b0: 75 6c 74 2c 20 73 6b 69 70 2c 20 6c 65 6e 67 74 ult, skip, lengt
01c0: 68 3b 0a 20 20 20 20 20 73 74 61 74 69 63 20 43 h;. static C
01d0: 4f 4e 53 54 20 63 68 61 72 20 2a 6f 70 74 69 6f ONST char *optio
01e0: 6e 73 5b 5d 20 3d 20 7b 0a 2d 09 22 2d 6b 65 65 ns[] = {.-."-kee
01f0: 70 6e 65 77 6c 69 6e 65 22 2c 09 22 2d 2d 22 2c pnewline",."--",
0200: 20 4e 55 4c 4c 0a 2b 09 22 2d 6b 65 65 70 6e 65 NULL.+."-keepne
0210: 77 6c 69 6e 65 22 2c 09 22 2d 69 67 6e 6f 72 65 wline",."-ignore
0220: 73 74 64 65 72 72 22 2c 09 22 2d 2d 22 2c 20 4e stderr",."--", N
0230: 55 4c 4c 0a 20 20 20 20 20 7d 3b 0a 20 20 20 20 ULL. };.
0240: 20 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 20 7b 0a enum options {.
0250: 2d 09 45 58 45 43 5f 4b 45 45 50 4e 45 57 4c 49 -.EXEC_KEEPNEWLI
0260: 4e 45 2c 20 45 58 45 43 5f 4c 41 53 54 0a 2b 09 NE, EXEC_LAST.+.
0270: 45 58 45 43 5f 4b 45 45 50 4e 45 57 4c 49 4e 45 EXEC_KEEPNEWLINE
0280: 2c 20 45 58 45 43 5f 49 47 4e 4f 52 45 53 54 44 , EXEC_IGNORESTD
0290: 45 52 52 2c 20 45 58 45 43 5f 4c 41 53 54 0a 20 ERR, EXEC_LAST.
02a0: 20 20 20 20 7d 3b 0a 20 0a 20 20 20 20 20 2f 2a };. . /*
02b0: 0a 2d 20 20 20 20 20 2a 20 43 68 65 63 6b 20 66 .- * Check f
02c0: 6f 72 20 61 20 6c 65 61 64 69 6e 67 20 22 2d 6b or a leading "-k
02d0: 65 65 70 6e 65 77 6c 69 6e 65 22 20 61 72 67 75 eepnewline" argu
02e0: 6d 65 6e 74 2e 0a 2b 20 20 20 20 20 2a 20 43 68 ment..+ * Ch
02f0: 65 63 6b 20 66 6f 72 20 61 20 6c 65 61 64 69 6e eck for a leadin
0300: 67 20 22 2d 6b 65 65 70 6e 65 77 6c 69 6e 65 22 g "-keepnewline"
0310: 20 61 6e 64 20 22 2d 69 67 6e 6f 72 65 73 74 64 and "-ignorestd
0320: 65 72 72 22 20 20 61 72 67 75 6d 65 6e 74 73 2e err" arguments.
0330: 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 . */. .-
0340: 20 6b 65 65 70 4e 65 77 6c 69 6e 65 20 3d 20 30 keepNewline = 0
0350: 3b 0a 2b 20 20 20 20 6b 65 65 70 4e 65 77 6c 69 ;.+ keepNewli
0360: 6e 65 20 3d 20 30 3b 20 69 67 6e 6f 72 65 53 74 ne = 0; ignoreSt
0370: 64 65 72 72 20 3d 20 30 3b 0a 20 20 20 20 20 66 derr = 0;. f
0380: 6f 72 20 28 73 6b 69 70 20 3d 20 31 3b 20 73 6b or (skip = 1; sk
0390: 69 70 20 3c 20 6f 62 6a 63 3b 20 73 6b 69 70 2b ip < objc; skip+
03a0: 2b 29 20 7b 0a 20 09 73 74 72 69 6e 67 20 3d 20 +) {. .string =
03b0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 Tcl_GetString(ob
03c0: 6a 76 5b 73 6b 69 70 5d 29 3b 0a 20 09 69 66 20 jv[skip]);. .if
03d0: 28 73 74 72 69 6e 67 5b 30 5d 20 21 3d 20 27 2d (string[0] != '-
03e0: 27 29 20 7b 0a 40 40 20 2d 38 32 34 2c 36 20 2b ') {.@@ -824,6 +
03f0: 38 32 34 2c 38 20 40 40 0a 20 09 7d 0a 20 09 69 824,8 @@. .}. .i
0400: 66 20 28 69 6e 64 65 78 20 3d 3d 20 45 58 45 43 f (index == EXEC
0410: 5f 4b 45 45 50 4e 45 57 4c 49 4e 45 29 20 7b 0a _KEEPNEWLINE) {.
0420: 20 09 20 20 20 20 6b 65 65 70 4e 65 77 6c 69 6e . keepNewlin
0430: 65 20 3d 20 31 3b 0a 2b 09 7d 20 65 6c 73 65 20 e = 1;.+.} else
0440: 69 66 20 28 69 6e 64 65 78 20 3d 3d 20 45 58 45 if (index == EXE
0450: 43 5f 49 47 4e 4f 52 45 53 54 44 45 52 52 29 20 C_IGNORESTDERR)
0460: 7b 0a 2b 09 20 20 20 20 69 67 6e 6f 72 65 53 74 {.+. ignoreSt
0470: 64 65 72 72 20 3d 20 31 3b 0a 20 09 7d 20 65 6c derr = 1;. .} el
0480: 73 65 20 7b 0a 20 09 20 20 20 20 73 6b 69 70 2b se {. . skip+
0490: 2b 3b 0a 20 09 20 20 20 20 62 72 65 61 6b 3b 0a +;. . break;.
04a0: 40 40 20 2d 38 36 36 2c 37 20 2b 38 36 38 2c 37 @@ -866,7 +868,7
04b0: 20 40 40 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 @@. }.
04c0: 61 72 67 76 5b 61 72 67 63 5d 20 3d 20 4e 55 4c argv[argc] = NUL
04d0: 4c 3b 0a 20 20 20 20 20 63 68 61 6e 20 3d 20 54 L;. chan = T
04e0: 63 6c 5f 4f 70 65 6e 43 6f 6d 6d 61 6e 64 43 68 cl_OpenCommandCh
04f0: 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 61 72 annel(interp, ar
0500: 67 63 2c 20 61 72 67 76 2c 0a 2d 09 20 20 20 20 gc, argv,.-.
0510: 28 62 61 63 6b 67 72 6f 75 6e 64 20 3f 20 30 20 (background ? 0
0520: 3a 20 54 43 4c 5f 53 54 44 4f 55 54 20 7c 20 54 : TCL_STDOUT | T
0530: 43 4c 5f 53 54 44 45 52 52 29 29 3b 0a 2b 09 20 CL_STDERR));.+.
0540: 20 20 20 28 62 61 63 6b 67 72 6f 75 6e 64 20 3f (background ?
0550: 20 30 20 3a 20 69 67 6e 6f 72 65 53 74 64 65 72 0 : ignoreStder
0560: 72 20 3f 20 54 43 4c 5f 53 54 44 4f 55 54 20 3a r ? TCL_STDOUT :
0570: 20 54 43 4c 5f 53 54 44 4f 55 54 20 7c 20 54 43 TCL_STDOUT | TC
0580: 4c 5f 53 54 44 45 52 52 29 29 3b 0a 20 0a 20 20 L_STDERR));. .
0590: 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 46 72 /*. * Fr
05a0: 65 65 20 74 68 65 20 61 72 67 76 20 61 72 72 61 ee the argv arra
05b0: 79 20 69 66 20 6d 61 6c 6c 6f 63 27 65 64 20 73 y if malloc'ed s
05c0: 74 6f 72 61 67 65 20 77 61 73 20 75 73 65 64 2e torage was used.
05d0: 0a .