1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
#! /bin/sh /usr/share/dpatch/dpatch-run
## 58-dos-cache-update.dpatch by Luigi Gangitano <luigi@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: No description.
@DPATCH@
diff -urNad etch~/include/Array.h etch/include/Array.h
--- etch~/include/Array.h 2007-07-30 16:26:50.000000000 +0200
+++ etch/include/Array.h 2007-12-04 18:51:54.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * $Id: Array.h,v 1.7 2005/10/23 15:20:49 hno Exp $
+ * $Id: Array.h,v 1.7.2.1 2007/11/26 11:06:12 adrian Exp $
*
* AUTHOR: Alex Rousskov
*
@@ -50,6 +50,8 @@
extern void arrayAppend(Array * s, void *obj);
extern void arrayInsert(Array * s, void *obj, int position);
extern void arrayPreAppend(Array * s, int app_count);
+extern void arrayShrink(Array *a, int new_count);
+
#endif /* SQUID_ARRAY_H */
diff -urNad etch~/lib/Array.c etch/lib/Array.c
--- etch~/lib/Array.c 2007-07-30 16:27:53.000000000 +0200
+++ etch/lib/Array.c 2007-12-04 18:51:54.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * $Id: Array.c,v 1.8 2005/10/23 15:20:49 hno Exp $
+ * $Id: Array.c,v 1.8.2.1 2007/11/26 11:06:12 adrian Exp $
*
* AUTHOR: Alex Rousskov
*
@@ -138,3 +138,11 @@
/* reset, just in case */
memset(a->items + a->count, 0, (a->capacity - a->count) * sizeof(void *));
}
+
+void
+arrayShrink(Array *a, int new_count)
+{
+ assert(new_count < a->capacity);
+ assert(new_count >= 0);
+ a->count = new_count;
+}
diff -urNad etch~/src/HttpHeader.c etch/src/HttpHeader.c
--- etch~/src/HttpHeader.c 2007-07-30 16:27:12.000000000 +0200
+++ etch/src/HttpHeader.c 2007-12-04 18:52:54.000000000 +0100
@@ -1,6 +1,6 @@
/*
- * $Id: HttpHeader.c,v 1.89 2006/07/19 16:05:11 hno Exp $
+ * $Id: HttpHeader.c,v 1.91.2.3 2007/11/26 11:06:13 adrian Exp $
*
* DEBUG: section 55 HTTP Header
* AUTHOR: Alex Rousskov
@@ -376,12 +376,34 @@
}
}
+static void
+httpHeaderRepack(HttpHeader * hdr)
+{
+ HttpHeaderPos dp = HttpHeaderInitPos;
+ HttpHeaderPos pos = HttpHeaderInitPos;
+
+ /* XXX breaks layering for now! ie, getting grubby fingers in without httpHeaderEntryGet() */
+ dp = 0;
+ pos = 0;
+ while (dp < hdr->entries.count) {
+ for (; dp < hdr->entries.count && hdr->entries.items[dp] == NULL; dp++);
+ assert(dp < hdr->entries.count);
+ hdr->entries.items[pos] = hdr->entries.items[dp];
+ if (dp != pos)
+ hdr->entries.items[dp] = NULL;
+ pos++;
+ dp++;
+ }
+ arrayShrink(&hdr->entries, pos);
+}
+
/* use fresh entries to replace old ones */
void
httpHeaderUpdate(HttpHeader * old, const HttpHeader * fresh, const HttpHeaderMask * denied_mask)
{
const HttpHeaderEntry *e;
HttpHeaderPos pos = HttpHeaderInitPos;
+
assert(old && fresh);
assert(old != fresh);
debug(55, 7) ("updating hdr: %p <- %p\n", old, fresh);
@@ -396,6 +418,9 @@
httpHeaderDelByName(old, strBuf(e->name));
httpHeaderAddEntry(old, httpHeaderEntryClone(e));
}
+
+ /* And now, repack the array to "fill in the holes" */
+ httpHeaderRepack(old);
}
/* just handy in parsing: resets and returns false */
|