commit 0b4b6aaebdd24fabf293534e3b2c62703f39c3ec
parent 6029b7106dc88b9d9b8e0745b95d8fdb241de451
Author: Alexander Burger <abu@software-lab.de>
Date: Wed, 24 Aug 2011 14:59:37 +0200
Bad pil64 'exec' error handling
Diffstat:
3 files changed, 77 insertions(+), 76 deletions(-)
diff --git a/lib/tags b/lib/tags
@@ -25,16 +25,16 @@ $ (2953 . "@src64/flow.l")
>> (2625 . "@src64/big.l")
abs (2729 . "@src64/big.l")
accept (139 . "@src64/net.l")
-adr (595 . "@src64/main.l")
-alarm (472 . "@src64/main.l")
+adr (594 . "@src64/main.l")
+alarm (471 . "@src64/main.l")
all (780 . "@src64/sym.l")
and (1616 . "@src64/flow.l")
-any (3940 . "@src64/io.l")
+any (3942 . "@src64/io.l")
append (1338 . "@src64/subr.l")
apply (713 . "@src64/apply.l")
-arg (2311 . "@src64/main.l")
-args (2287 . "@src64/main.l")
-argv (2931 . "@src64/main.l")
+arg (2310 . "@src64/main.l")
+args (2286 . "@src64/main.l")
+argv (2930 . "@src64/main.l")
as (144 . "@src64/flow.l")
asoq (3005 . "@src64/subr.l")
assoc (2970 . "@src64/subr.l")
@@ -65,7 +65,7 @@ call (3082 . "@src64/flow.l")
car (5 . "@src64/subr.l")
case (1957 . "@src64/flow.l")
catch (2459 . "@src64/flow.l")
-cd (2686 . "@src64/main.l")
+cd (2685 . "@src64/main.l")
cdaaar (464 . "@src64/subr.l")
cdaadr (487 . "@src64/subr.l")
cdaar (179 . "@src64/subr.l")
@@ -82,13 +82,13 @@ cdddr (245 . "@src64/subr.l")
cddr (79 . "@src64/subr.l")
cdr (17 . "@src64/subr.l")
chain (1141 . "@src64/subr.l")
-char (3422 . "@src64/io.l")
+char (3424 . "@src64/io.l")
chop (1101 . "@src64/sym.l")
circ (816 . "@src64/subr.l")
circ? (2402 . "@src64/subr.l")
clip (1799 . "@src64/subr.l")
-close (4345 . "@src64/io.l")
-cmd (2913 . "@src64/main.l")
+close (4347 . "@src64/io.l")
+cmd (2912 . "@src64/main.l")
cnt (1413 . "@src64/apply.l")
co (2540 . "@src64/flow.l")
commit (1495 . "@src64/db.l")
@@ -98,10 +98,10 @@ cond (1911 . "@src64/flow.l")
connect (201 . "@src64/net.l")
cons (747 . "@src64/subr.l")
copy (1225 . "@src64/subr.l")
-ctl (4223 . "@src64/io.l")
-ctty (2711 . "@src64/main.l")
+ctl (4225 . "@src64/io.l")
+ctty (2710 . "@src64/main.l")
cut (1805 . "@src64/sym.l")
-date (2425 . "@src64/main.l")
+date (2424 . "@src64/main.l")
dbck (2104 . "@src64/db.l")
de (529 . "@src64/flow.l")
dec (2323 . "@src64/big.l")
@@ -111,24 +111,24 @@ del (1860 . "@src64/sym.l")
delete (1401 . "@src64/subr.l")
delq (1452 . "@src64/subr.l")
diff (2589 . "@src64/subr.l")
-dir (2844 . "@src64/main.l")
+dir (2843 . "@src64/main.l")
dm (541 . "@src64/flow.l")
do (2133 . "@src64/flow.l")
e (2914 . "@src64/flow.l")
-echo (4376 . "@src64/io.l")
-env (607 . "@src64/main.l")
-eof (3499 . "@src64/io.l")
-eol (3490 . "@src64/io.l")
-err (4203 . "@src64/io.l")
-errno (1375 . "@src64/main.l")
+echo (4378 . "@src64/io.l")
+env (606 . "@src64/main.l")
+eof (3501 . "@src64/io.l")
+eol (3492 . "@src64/io.l")
+err (4205 . "@src64/io.l")
+errno (1374 . "@src64/main.l")
eval (180 . "@src64/flow.l")
-ext (5104 . "@src64/io.l")
+ext (5106 . "@src64/io.l")
ext? (1042 . "@src64/sym.l")
extern (908 . "@src64/sym.l")
extra (1259 . "@src64/flow.l")
extract (1218 . "@src64/apply.l")
fifo (1971 . "@src64/sym.l")
-file (2791 . "@src64/main.l")
+file (2790 . "@src64/main.l")
fill (3240 . "@src64/subr.l")
filter (1161 . "@src64/apply.l")
fin (2033 . "@src64/subr.l")
@@ -137,13 +137,13 @@ find (1322 . "@src64/apply.l")
fish (1613 . "@src64/apply.l")
flg? (2445 . "@src64/subr.l")
flip (1699 . "@src64/subr.l")
-flush (5079 . "@src64/io.l")
+flush (5081 . "@src64/io.l")
fold (3381 . "@src64/sym.l")
for (2222 . "@src64/flow.l")
fork (3256 . "@src64/flow.l")
format (2089 . "@src64/big.l")
free (2046 . "@src64/db.l")
-from (3518 . "@src64/io.l")
+from (3520 . "@src64/io.l")
full (1075 . "@src64/subr.l")
fun? (742 . "@src64/sym.l")
gc (432 . "@src64/gc.l")
@@ -155,24 +155,24 @@ glue (1242 . "@src64/sym.l")
gt0 (2716 . "@src64/big.l")
hash (2974 . "@src64/big.l")
head (1820 . "@src64/subr.l")
-heap (527 . "@src64/main.l")
-hear (3203 . "@src64/io.l")
+heap (526 . "@src64/main.l")
+hear (3205 . "@src64/io.l")
host (184 . "@src64/net.l")
id (1025 . "@src64/db.l")
idx (2045 . "@src64/sym.l")
if (1797 . "@src64/flow.l")
if2 (1816 . "@src64/flow.l")
ifn (1857 . "@src64/flow.l")
-in (4163 . "@src64/io.l")
+in (4165 . "@src64/io.l")
inc (2256 . "@src64/big.l")
index (2637 . "@src64/subr.l")
-info (2748 . "@src64/main.l")
+info (2747 . "@src64/main.l")
intern (883 . "@src64/sym.l")
ipid (3201 . "@src64/flow.l")
isa (956 . "@src64/flow.l")
job (1421 . "@src64/flow.l")
journal (968 . "@src64/db.l")
-key (3351 . "@src64/io.l")
+key (3353 . "@src64/io.l")
kill (3233 . "@src64/flow.l")
last (2044 . "@src64/subr.l")
le0 (2691 . "@src64/big.l")
@@ -180,14 +180,14 @@ length (2741 . "@src64/subr.l")
let (1471 . "@src64/flow.l")
let? (1532 . "@src64/flow.l")
lieu (1154 . "@src64/db.l")
-line (3674 . "@src64/io.l")
-lines (3827 . "@src64/io.l")
+line (3676 . "@src64/io.l")
+lines (3829 . "@src64/io.l")
link (1172 . "@src64/subr.l")
-lisp (1983 . "@src64/main.l")
+lisp (1982 . "@src64/main.l")
list (887 . "@src64/subr.l")
listen (151 . "@src64/net.l")
lit (155 . "@src64/flow.l")
-load (4140 . "@src64/io.l")
+load (4142 . "@src64/io.l")
lock (1182 . "@src64/db.l")
loop (2165 . "@src64/flow.l")
low? (3253 . "@src64/sym.l")
@@ -222,10 +222,10 @@ n== (2087 . "@src64/subr.l")
nT (2198 . "@src64/subr.l")
name (502 . "@src64/sym.l")
nand (1651 . "@src64/flow.l")
-native (1383 . "@src64/main.l")
+native (1382 . "@src64/main.l")
need (919 . "@src64/subr.l")
new (830 . "@src64/flow.l")
-next (2294 . "@src64/main.l")
+next (2293 . "@src64/main.l")
nil (1734 . "@src64/flow.l")
nond (1934 . "@src64/flow.l")
nor (1672 . "@src64/flow.l")
@@ -237,55 +237,55 @@ offset (2677 . "@src64/subr.l")
on (1591 . "@src64/sym.l")
onOff (1621 . "@src64/sym.l")
one (1654 . "@src64/sym.l")
-open (4307 . "@src64/io.l")
+open (4309 . "@src64/io.l")
opid (3217 . "@src64/flow.l")
-opt (3034 . "@src64/main.l")
+opt (3033 . "@src64/main.l")
or (1632 . "@src64/flow.l")
-out (4183 . "@src64/io.l")
+out (4185 . "@src64/io.l")
pack (1152 . "@src64/sym.l")
pair (2394 . "@src64/subr.l")
pass (754 . "@src64/apply.l")
pat? (728 . "@src64/sym.l")
path (1244 . "@src64/io.l")
-peek (3406 . "@src64/io.l")
+peek (3408 . "@src64/io.l")
pick (1369 . "@src64/apply.l")
-pipe (4244 . "@src64/io.l")
-poll (3295 . "@src64/io.l")
+pipe (4246 . "@src64/io.l")
+poll (3297 . "@src64/io.l")
pool (648 . "@src64/db.l")
pop (1781 . "@src64/sym.l")
port (5 . "@src64/net.l")
-pr (5187 . "@src64/io.l")
+pr (5189 . "@src64/io.l")
pre? (1419 . "@src64/sym.l")
-prin (5003 . "@src64/io.l")
-prinl (5017 . "@src64/io.l")
-print (5043 . "@src64/io.l")
-println (5074 . "@src64/io.l")
-printsp (5059 . "@src64/io.l")
+prin (5005 . "@src64/io.l")
+prinl (5019 . "@src64/io.l")
+print (5045 . "@src64/io.l")
+println (5076 . "@src64/io.l")
+printsp (5061 . "@src64/io.l")
prior (2713 . "@src64/subr.l")
prog (1752 . "@src64/flow.l")
prog1 (1760 . "@src64/flow.l")
prog2 (1777 . "@src64/flow.l")
prop (2807 . "@src64/sym.l")
-protect (517 . "@src64/main.l")
+protect (516 . "@src64/main.l")
prove (3527 . "@src64/subr.l")
push (1696 . "@src64/sym.l")
push1 (1732 . "@src64/sym.l")
put (2724 . "@src64/sym.l")
putl (2988 . "@src64/sym.l")
-pwd (2675 . "@src64/main.l")
+pwd (2674 . "@src64/main.l")
queue (1928 . "@src64/sym.l")
-quit (1090 . "@src64/main.l")
+quit (1089 . "@src64/main.l")
quote (139 . "@src64/flow.l")
rand (3001 . "@src64/big.l")
range (997 . "@src64/subr.l")
rank (3033 . "@src64/subr.l")
-raw (450 . "@src64/main.l")
-rd (5121 . "@src64/io.l")
-read (2631 . "@src64/io.l")
+raw (449 . "@src64/main.l")
+rd (5123 . "@src64/io.l")
+read (2633 . "@src64/io.l")
replace (1499 . "@src64/subr.l")
-rest (2340 . "@src64/main.l")
+rest (2339 . "@src64/main.l")
reverse (1678 . "@src64/subr.l")
-rewind (5087 . "@src64/io.l")
+rewind (5089 . "@src64/io.l")
rollback (1889 . "@src64/db.l")
rot (848 . "@src64/subr.l")
run (311 . "@src64/flow.l")
@@ -296,34 +296,34 @@ send (1128 . "@src64/flow.l")
seq (1081 . "@src64/db.l")
set (1490 . "@src64/sym.l")
setq (1523 . "@src64/sym.l")
-sigio (488 . "@src64/main.l")
+sigio (487 . "@src64/main.l")
size (2806 . "@src64/subr.l")
-skip (3476 . "@src64/io.l")
+skip (3478 . "@src64/io.l")
sort (3962 . "@src64/subr.l")
sp? (719 . "@src64/sym.l")
-space (5021 . "@src64/io.l")
+space (5023 . "@src64/io.l")
split (1592 . "@src64/subr.l")
-stack (556 . "@src64/main.l")
+stack (555 . "@src64/main.l")
state (2001 . "@src64/flow.l")
stem (1989 . "@src64/subr.l")
-str (3994 . "@src64/io.l")
+str (3996 . "@src64/io.l")
str? (1021 . "@src64/sym.l")
strip (1576 . "@src64/subr.l")
sub? (1452 . "@src64/sym.l")
sum (1460 . "@src64/apply.l")
super (1215 . "@src64/flow.l")
-sym (3980 . "@src64/io.l")
+sym (3982 . "@src64/io.l")
sym? (2434 . "@src64/subr.l")
-sync (3163 . "@src64/io.l")
+sync (3165 . "@src64/io.l")
sys (3053 . "@src64/flow.l")
t (1743 . "@src64/flow.l")
tail (1911 . "@src64/subr.l")
-tell (3235 . "@src64/io.l")
+tell (3237 . "@src64/io.l")
text (1280 . "@src64/sym.l")
throw (2485 . "@src64/flow.l")
tick (3169 . "@src64/flow.l")
-till (3585 . "@src64/io.l")
-time (2558 . "@src64/main.l")
+till (3587 . "@src64/io.l")
+time (2557 . "@src64/main.l")
touch (1057 . "@src64/sym.l")
trim (1759 . "@src64/subr.l")
try (1169 . "@src64/flow.l")
@@ -332,19 +332,19 @@ udp (268 . "@src64/net.l")
unify (3935 . "@src64/subr.l")
unless (1893 . "@src64/flow.l")
until (2077 . "@src64/flow.l")
-up (698 . "@src64/main.l")
+up (697 . "@src64/main.l")
upp? (3268 . "@src64/sym.l")
uppc (3332 . "@src64/sym.l")
use (1565 . "@src64/flow.l")
-usec (2663 . "@src64/main.l")
+usec (2662 . "@src64/main.l")
val (1471 . "@src64/sym.l")
-version (3048 . "@src64/main.l")
-wait (3125 . "@src64/io.l")
+version (3047 . "@src64/main.l")
+wait (3127 . "@src64/io.l")
when (1876 . "@src64/flow.l")
while (2053 . "@src64/flow.l")
wipe (3128 . "@src64/sym.l")
with (1322 . "@src64/flow.l")
-wr (5204 . "@src64/io.l")
+wr (5206 . "@src64/io.l")
xchg (1546 . "@src64/sym.l")
xor (1693 . "@src64/flow.l")
x| (2885 . "@src64/big.l")
diff --git a/src64/io.l b/src64/io.l
@@ -1,4 +1,4 @@
-# 18aug11abu
+# 24aug11abu
# (c) Software Lab. Alexander Burger
# Close file descriptor
@@ -1469,7 +1469,8 @@
ld4 (S 4) # Close write pipe
call closeAX
end
- cc execvp((S 8) &(S 8)) # Execute program
+ add S I # Drop 'pipe' structure
+ cc execvp((S) S) # Execute program
jmp execErrS # Error if failed
end
cc setpgid(A 0) # Set process group
@@ -1601,7 +1602,8 @@
ld4 (S) # Close read pipe
call closeAX
end
- cc execvp((S 8) &(S 8)) # Execute program
+ add S I # Drop 'pipe' structure
+ cc execvp((S) S) # Execute program
jmp execErrS # Error if failed
end
cc setpgid(A 0) # Set process group
diff --git a/src64/main.l b/src64/main.l
@@ -1,4 +1,4 @@
-# 20jun11abu
+# 24aug11abu
# (c) Software Lab. Alexander Burger
(code 'Code)
@@ -186,8 +186,7 @@
(code 'execErrS)
cc fprintf((stderr) ExecErr (S))
- ld E 127
- jmp finishE
+ cc exit(127)
# Install interrupting signal
(code 'iSignalCE)