You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by wr...@apache.org on 2007/10/25 00:22:12 UTC

svn commit: r588057 - /apr/apr-util/branches/1.2.x/buckets/apr_brigade.c

Author: wrowe
Date: Wed Oct 24 15:22:11 2007
New Revision: 588057

URL: http://svn.apache.org/viewvc?rev=588057&view=rev
Log:
>From discussion on list with Jeff and Martin, this appears
to be the safest solution for the true max_unsigned whatever,
invert all the bits to 1 and never treat it as signed.

Backport: 588056

Modified:
    apr/apr-util/branches/1.2.x/buckets/apr_brigade.c

Modified: apr/apr-util/branches/1.2.x/buckets/apr_brigade.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/buckets/apr_brigade.c?rev=588057&r1=588056&r2=588057&view=diff
==============================================================================
--- apr/apr-util/branches/1.2.x/buckets/apr_brigade.c (original)
+++ apr/apr-util/branches/1.2.x/buckets/apr_brigade.c Wed Oct 24 15:22:11 2007
@@ -29,6 +29,12 @@
 #include <sys/uio.h>
 #endif
 
+/* TODO: ~((apr_size_t)0) appears to be the best way to quickly 
+ * represent  MAX_APR_SIZE_T for any CPU we support.  Move this
+ * out as APR_MAX_SIZE_T to our public headers...
+ */
+#define MAX_APR_SIZE_T (~((apr_size_t)0))
+
 static apr_status_t brigade_cleanup(void *data) 
 {
     return apr_brigade_cleanup(data);
@@ -114,12 +120,10 @@
          e != APR_BRIGADE_SENTINEL(b);
          e = APR_BUCKET_NEXT(e))
     {
-        /* XXX: 2's compliment math error here, (apr_size_t)(-1) is not
-         * a sufficient replacement for MAX_SIZE_T (compared to 'point' here);
-         * For an unknown length bucket, while 'point' is beyond the possible
+        /* For an unknown length bucket, while 'point' is beyond the possible
          * size contained in apr_size_t, read and continue...
          */
-        if ((e->length == (apr_size_t)(-1)) && (point > (apr_size_t)(-1))) {
+        if ((e->length == (apr_size_t)(-1)) && (point > MAX_APR_SIZE_T)) {
             /* point is too far out to simply split this bucket,
              * we must fix this bucket's size and keep going... */
             rv = apr_bucket_read(e, &s, &len, APR_BLOCK_READ);