@@ -133,9 +133,9 @@ void PacketBufferHandle::InternalRightSize()
133
133
}
134
134
135
135
// Reallocate only if enough space will be saved.
136
- uint8_t * const start = reinterpret_cast < uint8_t *>( mBuffer ) + PacketBuffer:: kStructureSize ;
137
- uint8_t * const payload = reinterpret_cast < uint8_t *>( mBuffer ->payload );
138
- const uint16_t usedSize = static_cast <uint16_t >(payload - start + mBuffer ->len );
136
+ const uint8_t * const start = mBuffer -> ReserveStart () ;
137
+ const uint8_t * const payload = mBuffer ->Start ( );
138
+ const uint16_t usedSize = static_cast <uint16_t >(payload - start + mBuffer ->len );
139
139
if (usedSize + kRightSizingThreshold > mBuffer ->alloc_size )
140
140
{
141
141
return ;
@@ -149,14 +149,14 @@ void PacketBufferHandle::InternalRightSize()
149
149
return ;
150
150
}
151
151
152
- uint8_t * const newStart = reinterpret_cast < uint8_t *>(newBuffer) + PacketBuffer:: kStructureSize ;
152
+ uint8_t * const newStart = newBuffer-> ReserveStart () ;
153
153
newBuffer->next = nullptr ;
154
154
newBuffer->payload = newStart + (payload - start);
155
155
newBuffer->tot_len = mBuffer ->tot_len ;
156
156
newBuffer->len = mBuffer ->len ;
157
157
newBuffer->ref = 1 ;
158
158
newBuffer->alloc_size = static_cast <uint16_t >(usedSize);
159
- memcpy (reinterpret_cast < uint8_t *>(newBuffer) + PacketBuffer:: kStructureSize , start, usedSize);
159
+ memcpy (newStart , start, usedSize);
160
160
161
161
PacketBuffer::Free (mBuffer );
162
162
mBuffer = newBuffer;
@@ -193,7 +193,7 @@ void PacketBufferHandle::InternalRightSize()
193
193
194
194
void PacketBuffer::SetStart (uint8_t * aNewStart)
195
195
{
196
- uint8_t * const kStart = reinterpret_cast < uint8_t *>( this ) + kStructureSize ;
196
+ uint8_t * const kStart = ReserveStart () ;
197
197
uint8_t * const kEnd = kStart + this ->AllocSize ();
198
198
199
199
if (aNewStart < kStart )
@@ -236,9 +236,7 @@ void PacketBuffer::SetDataLength(uint16_t aNewLen, PacketBuffer * aChainHead)
236
236
237
237
uint16_t PacketBuffer::MaxDataLength () const
238
238
{
239
- const uint8_t * const kStart = reinterpret_cast <const uint8_t *>(this ) + kStructureSize ;
240
- const ptrdiff_t kDelta = static_cast <uint8_t *>(this ->payload ) - kStart ;
241
- return static_cast <uint16_t >(this ->AllocSize () - kDelta );
239
+ return static_cast <uint16_t >(AllocSize () - ReservedSize ());
242
240
}
243
241
244
242
uint16_t PacketBuffer::AvailableDataLength () const
@@ -248,10 +246,19 @@ uint16_t PacketBuffer::AvailableDataLength() const
248
246
249
247
uint16_t PacketBuffer::ReservedSize () const
250
248
{
251
- // Cast to size_t is safe because this->payload always points to "after"
252
- // this.
253
- const size_t kDelta = static_cast <size_t >(static_cast <uint8_t *>(this ->payload ) - reinterpret_cast <const uint8_t *>(this ));
254
- return static_cast <uint16_t >(kDelta - kStructureSize );
249
+ // Cast to uint16_t is safe because Start() always points to "after"
250
+ // ReserveStart(). At least when the payload is stored inline.
251
+ return static_cast <uint16_t >(Start () - ReserveStart ());
252
+ }
253
+
254
+ uint8_t * PacketBuffer::ReserveStart ()
255
+ {
256
+ return reinterpret_cast <uint8_t *>(this ) + kStructureSize ;
257
+ }
258
+
259
+ const uint8_t * PacketBuffer::ReserveStart () const
260
+ {
261
+ return reinterpret_cast <const uint8_t *>(this ) + kStructureSize ;
255
262
}
256
263
257
264
void PacketBuffer::AddToEnd (PacketBufferHandle && aPacketHandle)
@@ -282,7 +289,7 @@ void PacketBuffer::AddToEnd(PacketBufferHandle && aPacketHandle)
282
289
283
290
void PacketBuffer::CompactHead ()
284
291
{
285
- uint8_t * const kStart = reinterpret_cast < uint8_t *>( this ) + kStructureSize ;
292
+ uint8_t * const kStart = ReserveStart () ;
286
293
287
294
if (this ->payload != kStart )
288
295
{
@@ -505,7 +512,7 @@ PacketBufferHandle PacketBufferHandle::New(size_t aAvailableSize, uint16_t aRese
505
512
return PacketBufferHandle ();
506
513
}
507
514
508
- lPacket->payload = reinterpret_cast < uint8_t *>(lPacket) + PacketBuffer:: kStructureSize + aReservedSize;
515
+ lPacket->payload = lPacket-> ReserveStart () + aReservedSize;
509
516
lPacket->len = lPacket->tot_len = 0 ;
510
517
lPacket->next = nullptr ;
511
518
lPacket->ref = 1 ;
@@ -669,8 +676,7 @@ PacketBufferHandle PacketBufferHandle::CloneData() const
669
676
return PacketBufferHandle ();
670
677
}
671
678
clone.mBuffer ->tot_len = clone.mBuffer ->len = original->len ;
672
- memcpy (reinterpret_cast <uint8_t *>(clone.mBuffer ) + PacketBuffer::kStructureSize ,
673
- reinterpret_cast <uint8_t *>(original) + PacketBuffer::kStructureSize , originalDataSize + originalReservedSize);
679
+ memcpy (clone->ReserveStart (), original->ReserveStart (), originalDataSize + originalReservedSize);
674
680
675
681
if (cloneHead.IsNull ())
676
682
{
0 commit comments