new signals make read's restarted, thus must setjmp/longjmp to get
[unix-history] / usr / src / old / sh / expand.c
index 2f791f0..c1fa8f7 100644 (file)
@@ -1,4 +1,4 @@
-/*     expand.c        4.1     82/05/07        */
+/*     expand.c        4.3     83/06/10        */
 
 #
 /*
 
 #
 /*
@@ -67,7 +67,7 @@ INT   expand(as,rflg)
        POOL
        IF stat(s,&statb)>=0
            ANDF (statb.st_mode&S_IFMT)==S_IFDIR
        POOL
        IF stat(s,&statb)>=0
            ANDF (statb.st_mode&S_IFMT)==S_IFDIR
-           ANDF (dirf=opendir(s))>0
+           ANDF (dirf=opendir(s)) != NULL
        THEN    dir++;
        FI
        count=0;
        THEN    dir++;
        FI
        count=0;
@@ -79,7 +79,8 @@ INT   expand(as,rflg)
                REP     IF *rs=='/' THEN rescan=rs; *rs=0; gchain=0 FI
                PER     *rs++ DONE
 
                REP     IF *rs=='/' THEN rescan=rs; *rs=0; gchain=0 FI
                PER     *rs++ DONE
 
-               WHILE (dp = readdir(dirf)) != NULL ANDF (trapnote&SIGSET) == 0
+               IF setjmp(INTbuf) == 0 THEN trapjmp[INTR] = 1; FI
+               WHILE (trapnote&SIGSET) == 0 ANDF (dp = readdir(dirf)) != NULL
                DO      IF (*dp->d_name=='.' ANDF *cs!='.')
                        THEN    continue;
                        FI
                DO      IF (*dp->d_name=='.' ANDF *cs!='.')
                        THEN    continue;
                        FI
@@ -87,7 +88,7 @@ INT   expand(as,rflg)
                        THEN    addg(s,dp->d_name,rescan); count++;
                        FI
                OD
                        THEN    addg(s,dp->d_name,rescan); count++;
                        FI
                OD
-               closedir(dirf);
+               closedir(dirf); trapjmp[INTR] = 0;
 
                IF rescan
                THEN    REG ARGPTR      rchain;
 
                IF rescan
                THEN    REG ARGPTR      rchain;