parent
16afb4dea7
commit
2fb0b93d9d
21 changed files with 142 additions and 150 deletions
@ -0,0 +1,61 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2023 Google LLC. All rights reserved.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file or at
|
||||
// https://developers.google.com/open-source/licenses/bsd
|
||||
|
||||
#ifndef UPB_WIRE_INTERNAL_READER_H_ |
||||
#define UPB_WIRE_INTERNAL_READER_H_ |
||||
|
||||
// Must be last.
|
||||
#include "upb/port/def.inc" |
||||
|
||||
#define kUpb_WireReader_WireTypeBits 3 |
||||
#define kUpb_WireReader_WireTypeMask 7 |
||||
|
||||
typedef struct { |
||||
const char* ptr; |
||||
uint64_t val; |
||||
} UPB_PRIVATE(_upb_WireReader_LongVarint); |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
UPB_PRIVATE(_upb_WireReader_LongVarint) |
||||
UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(const char* ptr, uint64_t val); |
||||
|
||||
static UPB_FORCEINLINE const char* UPB_PRIVATE(_upb_WireReader_ReadVarint)( |
||||
const char* ptr, uint64_t* val, int maxlen, uint64_t maxval) { |
||||
uint64_t byte = (uint8_t)*ptr; |
||||
if (UPB_LIKELY((byte & 0x80) == 0)) { |
||||
*val = (uint32_t)byte; |
||||
return ptr + 1; |
||||
} |
||||
const char* start = ptr; |
||||
UPB_PRIVATE(_upb_WireReader_LongVarint) |
||||
res = UPB_PRIVATE(_upb_WireReader_ReadLongVarint)(ptr, byte); |
||||
if (!res.ptr || (maxlen < 10 && res.ptr - start > maxlen) || |
||||
res.val > maxval) { |
||||
return NULL; // Malformed.
|
||||
} |
||||
*val = res.val; |
||||
return res.ptr; |
||||
} |
||||
|
||||
UPB_INLINE uint32_t UPB_PRIVATE(_upb_WireReader_GetFieldNumber)(uint32_t tag) { |
||||
return tag >> kUpb_WireReader_WireTypeBits; |
||||
} |
||||
|
||||
UPB_INLINE uint8_t UPB_PRIVATE(_upb_WireReader_GetWireType)(uint32_t tag) { |
||||
return tag & kUpb_WireReader_WireTypeMask; |
||||
} |
||||
|
||||
#ifdef __cplusplus |
||||
} /* extern "C" */ |
||||
#endif |
||||
|
||||
#include "upb/port/undef.inc" |
||||
|
||||
#endif // UPB_WIRE_INTERNAL_READER_H_
|
Loading…
Reference in new issue