Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-09-27 16:53:57 +0400
committerVicent Marti <tanoku@gmail.com>2011-09-27 16:59:34 +0400
commitdc5c87812c7328abc3f96e66b07e1c38885a51c1 (patch)
treec347a369e272de275097168e208e52ca787b836c /deps
parent40fe5fbea8f2e64dee1c2327c774cca0004f18f8 (diff)
http-parser: Do not use bitfields
Bitfields suck. And if you make them with non-int types, they suck in a non-standards compliant way. Like sucking sideways or something. This commit removes all bitfields in the `http_parser` struct, and replaces them with the minimal type needed to contain their values. Note that the fields in the struct have been reordered so they can be packed with 4-byte alignment. This saves both memory on the parser (because non-int bitfields get expanded to 4byte in most compilers anyway) and time (because the fields are now properly aligned and the compiler doesn't need to generate bit-level ops to access them).
Diffstat (limited to 'deps')
-rw-r--r--deps/http-parser/http_parser.h23
1 files changed, 12 insertions, 11 deletions
diff --git a/deps/http-parser/http_parser.h b/deps/http-parser/http_parser.h
index 76a61f26b..12be0d23a 100644
--- a/deps/http-parser/http_parser.h
+++ b/deps/http-parser/http_parser.h
@@ -201,28 +201,29 @@ enum http_errno {
struct http_parser {
/** PRIVATE **/
- unsigned char type : 2;
- unsigned char flags : 6; /* F_* values from 'flags' enum; semi-public */
+ uint32_t nread;
+ int64_t content_length;
+
+ unsigned char type;
+ unsigned char flags; /* F_* values from 'flags' enum; semi-public */
unsigned char state;
unsigned char header_state;
unsigned char index;
- uint32_t nread;
- int64_t content_length;
-
/** READ-ONLY **/
- unsigned short http_major;
- unsigned short http_minor;
- unsigned short status_code; /* responses only */
- unsigned char method; /* requests only */
- unsigned char http_errno : 7;
/* 1 = Upgrade header was present and the parser has exited because of that.
* 0 = No upgrade header present.
* Should be checked when http_parser_execute() returns in addition to
* error checking.
*/
- unsigned char upgrade : 1;
+ unsigned char upgrade;
+
+ unsigned short http_major;
+ unsigned short http_minor;
+ unsigned short status_code; /* responses only */
+ unsigned char method; /* requests only */
+ unsigned char http_errno;
#if HTTP_PARSER_DEBUG
uint32_t error_lineno;