|
From: Andre R. <and...@us...> - 2006-03-10 13:44:18
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22342/Common/source Modified Files: shellsysverbs.c Log Message: The sys.winShellCommand verb now optionally also reads from the shell's stderr and returns its exit code. Index: shellsysverbs.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/shellsysverbs.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** shellsysverbs.c 9 Mar 2006 11:08:50 -0000 1.9 --- shellsysverbs.c 10 Mar 2006 13:44:15 -0000 1.10 *************** *** 691,706 **** case winshellcommandfunc: { ! Handle hcommand, hreturn; ! newemptyhandle (&hreturn); flnextparamislast = true; ! if (!getexempttextvalue (hparam1, 1, &hcommand)) return (false); ! if (!winshellcall (hcommand, hreturn)) { ! disposehandle (hreturn); disposehandle (hcommand); --- 691,730 ---- case winshellcommandfunc: { ! Handle hcommand; ! Handle houttext = nil; ! Handle herrtext = nil; ! long exitcode = 0; ! tyaddress adrexitcode, adrstderr; ! short ctconsumed = 1; ! short ctpositional = 1; ! boolean flneedexitcode, flneedstderr; ! tyvaluerecord val; ! if (!getexempttextvalue (hparam1, 1, &hcommand)) ! return (false); ! ! if (!getoptionaladdressparam (hparam1, &ctconsumed, &ctpositional, "\x0b" "adrExitCode", &adrexitcode.ht, adrexitcode.bs)) ! return (false); flnextparamislast = true; ! if (!getoptionaladdressparam (hparam1, &ctconsumed, &ctpositional, "\x0b" "adrStdErr", &adrstderr.ht, adrstderr.bs)) return (false); + + flneedexitcode = (adrexitcode.ht != nil) || !isemptystring (adrexitcode.bs); + + flneedstderr = (adrstderr.ht != nil) || !isemptystring (adrstderr.bs); + + newemptyhandle (&houttext); + + if (flneedstderr) + newemptyhandle (&herrtext); ! if (!winshellcall (hcommand, houttext, herrtext, ! (flneedexitcode ? &exitcode : nil))) { ! disposehandle (houttext); ! ! disposehandle (herrtext); disposehandle (hcommand); *************** *** 710,715 **** disposehandle (hcommand); ! return (setheapvalue (hreturn, stringvaluetype, v)); } --- 734,757 ---- disposehandle (hcommand); + + if (flneedexitcode) { + + setlongvalue (exitcode, &val); ! if (!langsetsymboltableval (adrexitcode.ht, adrexitcode.bs, val)) ! return (false); ! } ! ! if (flneedstderr) { ! ! setheapvalue (herrtext, stringvaluetype, &val); ! ! if (!langsetsymboltableval (adrstderr.ht, adrstderr.bs, val)) ! return (false); ! ! exemptfromtmpstack (&val); ! } ! ! return (setheapvalue (houttext, stringvaluetype, v)); } |