diff options
author | Vicent Marti <tanoku@gmail.com> | 2011-09-27 14:53:57 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-09-27 14:59:34 +0200 |
commit | dc5c87812c7328abc3f96e66b07e1c38885a51c1 (patch) | |
tree | c347a369e272de275097168e208e52ca787b836c /deps | |
parent | 40fe5fbea8f2e64dee1c2327c774cca0004f18f8 (diff) | |
download | libgit2-dc5c87812c7328abc3f96e66b07e1c38885a51c1.tar.gz |
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.h | 23 |
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; |