140
140
(ptr)->internal_.pos_in_chain = 0; \
141
141
} while (0)
142
142
143
+ #define EVBUFFER_MAX_READ_DEFAULT 4096
144
+
143
145
static void evbuffer_chain_align (struct evbuffer_chain * chain );
144
146
static int evbuffer_chain_should_realign (struct evbuffer_chain * chain ,
145
147
size_t datalen );
@@ -370,6 +372,7 @@ evbuffer_new(void)
370
372
LIST_INIT (& buffer -> callbacks );
371
373
buffer -> refcnt = 1 ;
372
374
buffer -> last_with_datap = & buffer -> first ;
375
+ buffer -> max_read = EVBUFFER_MAX_READ_DEFAULT ;
373
376
374
377
return (buffer );
375
378
}
@@ -591,6 +594,26 @@ evbuffer_free(struct evbuffer *buffer)
591
594
evbuffer_decref_and_unlock_ (buffer );
592
595
}
593
596
597
+ int evbuffer_set_max_read (struct evbuffer * buf , size_t max )
598
+ {
599
+ if (max > INT_MAX ) {
600
+ return -1 ;
601
+ }
602
+
603
+ EVBUFFER_LOCK (buf );
604
+ buf -> max_read = max ;
605
+ EVBUFFER_UNLOCK (buf );
606
+ return 0 ;
607
+ }
608
+ size_t evbuffer_get_max_read (struct evbuffer * buf )
609
+ {
610
+ size_t result ;
611
+ EVBUFFER_LOCK (buf );
612
+ result = buf -> max_read ;
613
+ EVBUFFER_UNLOCK (buf );
614
+ return result ;
615
+ }
616
+
594
617
void
595
618
evbuffer_lock (struct evbuffer * buf )
596
619
{
@@ -607,13 +630,9 @@ size_t
607
630
evbuffer_get_length (const struct evbuffer * buffer )
608
631
{
609
632
size_t result ;
610
-
611
633
EVBUFFER_LOCK (buffer );
612
-
613
- result = (buffer -> total_len );
614
-
634
+ result = buffer -> total_len ;
615
635
EVBUFFER_UNLOCK (buffer );
616
-
617
636
return result ;
618
637
}
619
638
@@ -2204,8 +2223,6 @@ evbuffer_expand(struct evbuffer *buf, size_t datlen)
2204
2223
#endif
2205
2224
#define NUM_READ_IOVEC 4
2206
2225
2207
- #define EVBUFFER_MAX_READ 4096
2208
-
2209
2226
/** Helper function to figure out which space to use for reading data into
2210
2227
an evbuffer. Internal use only.
2211
2228
@@ -2261,18 +2278,18 @@ static int
2261
2278
get_n_bytes_readable_on_socket (evutil_socket_t fd )
2262
2279
{
2263
2280
#if defined(FIONREAD ) && defined(_WIN32 )
2264
- unsigned long lng = EVBUFFER_MAX_READ ;
2281
+ unsigned long lng = EVBUFFER_MAX_READ_DEFAULT ;
2265
2282
if (ioctlsocket (fd , FIONREAD , & lng ) < 0 )
2266
2283
return -1 ;
2267
2284
/* Can overflow, but mostly harmlessly. XXXX */
2268
2285
return (int )lng ;
2269
2286
#elif defined(FIONREAD )
2270
- int n = EVBUFFER_MAX_READ ;
2287
+ int n = EVBUFFER_MAX_READ_DEFAULT ;
2271
2288
if (ioctl (fd , FIONREAD , & n ) < 0 )
2272
2289
return -1 ;
2273
2290
return n ;
2274
2291
#else
2275
- return EVBUFFER_MAX_READ ;
2292
+ return EVBUFFER_MAX_READ_DEFAULT ;
2276
2293
#endif
2277
2294
}
2278
2295
@@ -2300,8 +2317,8 @@ evbuffer_read(struct evbuffer *buf, evutil_socket_t fd, int howmuch)
2300
2317
}
2301
2318
2302
2319
n = get_n_bytes_readable_on_socket (fd );
2303
- if (n <= 0 || n > EVBUFFER_MAX_READ )
2304
- n = EVBUFFER_MAX_READ ;
2320
+ if (n <= 0 || n > ( int ) buf -> max_read )
2321
+ n = ( int ) buf -> max_read ;
2305
2322
if (howmuch < 0 || howmuch > n )
2306
2323
howmuch = n ;
2307
2324
0 commit comments