lkundrak / rpms / squid

Forked from rpms/squid 4 years ago
Clone
Blob Blame History Raw
---------------------
PatchSet 11780 
Date: 2007/11/26 11:06:12
Author: adrian
Branch: SQUID_2_6
Tag: (none) 
Log:
Author: adrian
Patchsets 11745, 11746, 11751 (HEAD): pack header entries after the array has been modified; implement arrayShrink().

Long summary

Members: 
	include/Array.h:1.7->1.7.2.1 
	lib/Array.c:1.8->1.8.2.1 
	src/HttpHeader.c:1.91.2.2->1.91.2.3 

Index: squid/include/Array.h
===================================================================
RCS file: /cvsroot/squid/squid/include/Array.h,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- squid/include/Array.h	23 Oct 2005 15:20:49 -0000	1.7
+++ squid/include/Array.h	26 Nov 2007 11:06:12 -0000	1.7.2.1
@@ -1,5 +1,5 @@
 /*
- * $Id: squid-2.6.STABLE16-pack_header.patch,v 1.1 2007/12/06 11:55:48 mnagy Exp $
+ * $Id: squid-2.6.STABLE16-pack_header.patch,v 1.1 2007/12/06 11:55:48 mnagy 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 */
Index: squid/lib/Array.c
===================================================================
RCS file: /cvsroot/squid/squid/lib/Array.c,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -r1.8 -r1.8.2.1
--- squid/lib/Array.c	23 Oct 2005 15:20:49 -0000	1.8
+++ squid/lib/Array.c	26 Nov 2007 11:06:12 -0000	1.8.2.1
@@ -1,5 +1,5 @@
 /*
- * $Id: squid-2.6.STABLE16-pack_header.patch,v 1.1 2007/12/06 11:55:48 mnagy Exp $
+ * $Id: squid-2.6.STABLE16-pack_header.patch,v 1.1 2007/12/06 11:55:48 mnagy 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;
+}
Index: squid/src/HttpHeader.c
===================================================================
RCS file: /cvsroot/squid/squid/src/HttpHeader.c,v
retrieving revision 1.91.2.2
retrieving revision 1.91.2.3
diff -u -r1.91.2.2 -r1.91.2.3
--- squid/src/HttpHeader.c	26 Feb 2007 22:41:46 -0000	1.91.2.2
+++ squid/src/HttpHeader.c	26 Nov 2007 11:06:13 -0000	1.91.2.3
@@ -1,6 +1,6 @@
 
 /*
- * $Id: squid-2.6.STABLE16-pack_header.patch,v 1.1 2007/12/06 11:55:48 mnagy Exp $
+ * $Id: squid-2.6.STABLE16-pack_header.patch,v 1.1 2007/12/06 11:55:48 mnagy Exp $
  *
  * DEBUG: section 55    HTTP Header
  * AUTHOR: Alex Rousskov
@@ -380,12 +380,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);
@@ -400,6 +422,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 */