Only a partial improvement, I think there is room for more improvements, so 
there is a question to ask too before I send a further update.

Appears diff caught some more trailing spaces.... but main reason for sending 
this was....

1)modification to get_word():
get_word() function and inconsistent EOF output.
I was a bit puzzled about why there is an ungetc(c,in) because compress.c by 
itself does not seem to need an ungetc() to work correctly... the only 
reason I can seem to think it's there is in case some calling program wants 
to see an EOF
Reason for change:
the first if (c == EOF) return 0; does not reverse but the second if (c == 
EOF return 0; does reverse input using an ungetc(c, in).

My preference would be to remove the ungetc() completely from the routine, 
but if you have a reason for it staying, I think this modification to the 
get_word() function should return more consistent results if a parent 
program needs to see an EOF on the input file.

question: can the ungetc() be removed, or does it have to stay?

2)a little less code by removing a query:
-      while (prev[i] != '\0' && cur[i] != '\0' && prev[i] == cur[i])
+      while (prev[i] != '\0' && prev[i] == cur[i])
I removed the && (cur[i] != 0) since you can't have (cur[i] ==0) if you are 
going to have (prev[i] == cur[i]).

3)added fflush(stdout)
the '\n' flushes out whatever is in the buffers, but since this is a binary 
file missing a final '\n', you will need to add a fflush() to send 
everything to stdout.
--- aspell-0.60/prog/compress.c 2004-06-23 02:14:26.000000000 -0700
+++ compress.c  2004-08-29 14:52:31.000000000 -0700
@@ -4,8 +4,8 @@
  *
  * Permission to use, copy, modify, distribute and sell this software
  * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies  
- * and that both that copyright notice and this permission notice 
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
  * appear in supporting documentation.  Kevin Atkinson makes no
  * representations about the suitability of this software for any
  * purpose.  It is provided "as is" without express or implied
@@ -30,7 +30,7 @@
 
 #define BUFSIZE 256
 
-void usage () 
+void usage ()
 {
   fputs("Compresses or uncompresses sorted word lists.\n"     , stderr);
   fputs("For best result the locale should be set to C\n"    , stderr);
@@ -41,19 +41,20 @@
 }
 
 // PRECOND: bufsize >= 2
-static int get_word(FILE * in, char * w, size_t bufsize) 
+static int get_word(FILE * in, char * w, size_t bufsize)
 {
   int c;
   while (c = getc(in), c != EOF && c <= 32);
-  if (c == EOF) return 0;
-  do {
-    *w++ = (char)(c);
-    --bufsize;
-  } while (c = getc(in), c != EOF && c > 32 && bufsize > 1);
+  if (c != EOF) {
+    do {
+      *w++ = (char)(c);
+      --bufsize;
+    } while (c = getc(in), c != EOF && c > 32 && bufsize > 1);
+  }
   *w = '\0';
   ungetc(c, in);
   if (c == EOF) return 0;
-  else return 1;
+  return 1;
 }
 
 int main (int argc, const char *argv[]) {
@@ -62,7 +63,7 @@
 
     usage();
     return 1;
-    
+
   } else if (argv[1][0] == 'c') {
 
     char s1[BUFSIZE];
@@ -76,7 +77,7 @@
     while (get_word(stdin, cur, BUFSIZE)) {
       int i = 0;
       /* get the length of the prefix */
-      while (prev[i] != '\0' && cur[i] != '\0' && prev[i] == cur[i])
+      while (prev[i] != '\0' && prev[i] == cur[i])
         ++i;
       if (i > 31) {
         putc('\0', stdout);
@@ -89,11 +90,12 @@
         prev = s2; cur = s1;
       }
     }
+    fflush(stdout);
     return 0;
 
   } else if (argv[1][0] == 'd') {
-    
-    char cur[256];
+
+    char cur[BUFSIZE];
     int i;
     int c;
 
@@ -123,6 +125,6 @@
 
     usage();
     return 1;
-    
+
   }
 }
_______________________________________________
Aspell-devel mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/aspell-devel

Reply via email to