diff options
| author | Jean-Marc Zucconi <jmz@FreeBSD.org> | 1995-09-28 20:49:15 +0000 |
|---|---|---|
| committer | Jean-Marc Zucconi <jmz@FreeBSD.org> | 1995-09-28 20:49:15 +0000 |
| commit | f310327a5b2374c9442f9d4b0bf28a81f9d4c8eb (patch) | |
| tree | 2bd4eef14755fc92c0ed2b2ea8abefe3c3081747 /lib/libI77/backspace.c | |
| parent | c28f85011857a5a0a93b4eb62175c7e506ca1d0b (diff) | |
Notes
Diffstat (limited to 'lib/libI77/backspace.c')
| -rw-r--r-- | lib/libI77/backspace.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/libI77/backspace.c b/lib/libI77/backspace.c index 421342485fec..3771cd961571 100644 --- a/lib/libI77/backspace.c +++ b/lib/libI77/backspace.c @@ -50,14 +50,16 @@ integer f_back(alist *a) #ifdef MSDOS w = -1; #endif - for(ndec = 2;; ndec = 1) + for(ndec = 1;; ndec = 0) { - y = x=ftell(b->ufd); - if(x<sizeof(buf)) x=0; - else x -= sizeof(buf); + y = x = ftell(b->ufd); + if(x < sizeof(buf)) + x = 0; + else + x -= sizeof(buf); (void) fseek(b->ufd,x,SEEK_SET); n=fread(buf,1,(int)(y-x), b->ufd); - for(i=n-ndec;i>=0;i--) + for(i = n - ndec; --i >= 0; ) { if(buf[i]!='\n') continue; #ifdef MSDOS @@ -65,17 +67,17 @@ integer f_back(alist *a) if (buf[j] == '\n') k++; fseek(b->ufd,x,SEEK_SET); - do { + for(;;) if (getc(b->ufd) == '\n') { - --k; - if ((z = ftell(b->ufd)) >= y) { + if ((z = ftell(b->ufd)) >= y && ndec) { if (w == -1) goto break2; break; } + if (--k <= 0) + return 0; w = z; } - } while(k > 0); fseek(b->ufd, w, SEEK_SET); #else fseek(b->ufd,(long)(i+1-n),SEEK_CUR); |
