diff options
author | jmz <jmz@FreeBSD.org> | 1995-09-28 20:49:15 +0000 |
---|---|---|
committer | jmz <jmz@FreeBSD.org> | 1995-09-28 20:49:15 +0000 |
commit | 88fe667d3502c54a9143eea7b611ec0362bb639c (patch) | |
tree | 2bd4eef14755fc92c0ed2b2ea8abefe3c3081747 /lib/libI77/backspace.c | |
parent | 3ebc2913631c7b53207cac9503f0a0141f628900 (diff) | |
download | FreeBSD-src-88fe667d3502c54a9143eea7b611ec0362bb639c.zip FreeBSD-src-88fe667d3502c54a9143eea7b611ec0362bb639c.tar.gz |
Update to the 1995/09/20 version. Previous version was 1993/12/17.
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 4213424..3771cd9 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); |