summaryrefslogtreecommitdiffstats
path: root/lib/libI77/backspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libI77/backspace.c')
-rw-r--r--lib/libI77/backspace.c20
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);
OpenPOWER on IntegriCloud