木村 巌 on Sat, 27 Jan 2001 04:29:49 +0900


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

lisGEN() in src/language/es.c


Hi all,

I found that there's no chance to break a loop like this when eof is
reached:

while (1) {
    a = lisGEN (f);
    outbeaut (a);
}

because fgets() blocks in lisGEN(). So here is a patch:

iwao@kagemaru:~/Lang/C/Pari/pari/src/language {1037}$ cvs -z 3 diff -u es.c
Index: es.c
===================================================================
RCS file: /home/megrez/cvsroot/pari/src/language/es.c,v
retrieving revision 1.28
diff -u -r1.28 es.c
--- es.c        2000/09/25 15:42:43     1.28
+++ es.c        2001/01/26 19:16:02
@@ -125,8 +125,7 @@
   long size = 512, n = size;
   char *buf = gpmalloc(n), *s = buf;
 
-  for(;;)
-    if (fgets(s, n, fi))
+  for(;fgets(s, n, fi);)
     {
       if (s[strlen(s)-1] == '\n')
       {
@@ -136,6 +135,10 @@
       buf = gprealloc(buf, size<<1, size);
       s = buf + (size-1); n = size+1; size <<= 1;
     }
+  if (feof (fi))
+    return NULL;
+  else
+    err (talker, "failed reading from file");
 }


We can break a loop when lisGEN(f) == NULL.

BTW, where is flisseq()? This is documented in users.dvi but
I can't find it.

	;#	Iwao KIMURA			;#
	;#	Faculty. Math, Dept. of Sciece	;#
	;#	Toyama University		;#