Make some RERR_* choices better, and another noop_io_until_death() tweak.
[rsync/rsync.git] / token.c
diff --git a/token.c b/token.c
index 171ab6d..be882e9 100644 (file)
--- a/token.c
+++ b/token.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1996 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2003-2007 Wayne Davison
+ * Copyright (C) 2003-2009 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
  */
 
 #include "rsync.h"
-#include "ifuncs.h"
+#include "itypes.h"
 #include "zlib/zlib.h"
 
 extern int do_compression;
@@ -45,12 +45,12 @@ static void add_suffix(struct suffix_tree **prior, char ltr, const char *str)
 
        if (ltr == '[') {
                const char *after = strchr(str, ']');
-               /* Just skip bogus character classes. */
-               if (!after++)
+               /* Treat "[foo" and "[]" as having a literal '['. */
+               if (after && after++ != str+1) {
+                       while ((ltr = *str++) != ']')
+                               add_suffix(prior, ltr, after);
                        return;
-               while ((ltr = *str++) != ']')
-                       add_suffix(prior, ltr, after);
-               return;
+               }
        }
 
        for (node = *prior; node; prior = &node->sibling, node = node->sibling) {
@@ -100,7 +100,6 @@ static void add_nocompress_suffixes(const char *str)
                } while (*++f != '/' && *f);
                *t++ = '\0';
 
-               fprintf(stderr, "adding `%s'\n", buf);
                add_suffix(&suftree, *buf, buf+1);
        }
 
@@ -307,7 +306,7 @@ send_deflated_token(int f, int32 token, struct map_struct *buf, OFF_T offset,
                                         Z_DEFLATED, -15, 8,
                                         Z_DEFAULT_STRATEGY) != Z_OK) {
                                rprintf(FERROR, "compression init failed\n");
-                               exit_cleanup(RERR_STREAMIO);
+                               exit_cleanup(RERR_PROTOCOL);
                        }
                        if ((obuf = new_array(char, OBUF_SIZE)) == NULL)
                                out_of_memory("send_deflated_token");
@@ -451,7 +450,7 @@ static int32 recv_deflated_token(int f, char **data)
                                rx_strm.zfree = NULL;
                                if (inflateInit2(&rx_strm, -15) != Z_OK) {
                                        rprintf(FERROR, "inflate init failed\n");
-                                       exit_cleanup(RERR_STREAMIO);
+                                       exit_cleanup(RERR_PROTOCOL);
                                }
                                if (!(cbuf = new_array(char, MAX_DATA_COUNT))
                                    || !(dbuf = new_array(char, AVAIL_OUT_SIZE(CHUNK_SIZE))))