]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[OPTIM] used unsigned ints for HTTP state and message offsets
authorWilly Tarreau <w@1wt.eu>
Sat, 26 Jan 2008 23:34:10 +0000 (00:34 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 14 Feb 2008 22:14:30 +0000 (23:14 +0100)
State and offsets within http_msg were incorrectly set to signed int.
Turning them into unsigned slightly improved performance while reducing
code size.

include/types/proto_http.h
src/proto_http.c

index 64530616562fffb199c18ac1b08ff9a1bbac0a6e..50d12d6de03a0728345cb9840dbf1d2018739ffd 100644 (file)
@@ -204,12 +204,12 @@ typedef enum {
  *                             which marks the end of the line (LF or CRLF).
  */
 struct http_msg {
-       int msg_state;                  /* where we are in the current message parsing */
+       unsigned int msg_state;         /* where we are in the current message parsing */
        char *sol;                      /* start of line, also start of message when fully parsed */
        char *eol;                      /* end of line */
-       int som;                        /* Start Of Message, relative to buffer */
-       int col, sov;                   /* current header: colon, start of value */
-       int eoh;                        /* End Of Headers, relative to buffer */
+       unsigned int som;               /* Start Of Message, relative to buffer */
+       unsigned int col, sov;          /* current header: colon, start of value */
+       unsigned int eoh;               /* End Of Headers, relative to buffer */
        char **cap;                     /* array of captured headers (may be NULL) */
        union {                         /* useful start line pointers, relative to buffer */
                struct {
index 429f57142227e84de1c737ec8e86e28a415d1532..6ee1c587a008a7d00029e0da43865efbef480b03 100644 (file)
@@ -937,9 +937,9 @@ void capture_headers(char *som, struct hdr_idx *idx,
  * within its state machine and use the same macros, hence the need for same
  * labels and variable names. Note that msg->sol is left unchanged.
  */
-const char *http_parse_stsline(struct http_msg *msg, const char *msg_buf, int state,
-                              const char *ptr, const char *end,
-                              char **ret_ptr, int *ret_state)
+const char *http_parse_stsline(struct http_msg *msg, const char *msg_buf,
+                              unsigned int state, const char *ptr, const char *end,
+                              char **ret_ptr, unsigned int *ret_state)
 {
        __label__
                http_msg_rpver,
@@ -1060,9 +1060,9 @@ const char *http_parse_stsline(struct http_msg *msg, const char *msg_buf, int st
  * within its state machine and use the same macros, hence the need for same
  * labels and variable names. Note that msg->sol is left unchanged.
  */
-const char *http_parse_reqline(struct http_msg *msg, const char *msg_buf, int state,
-                              const char *ptr, const char *end,
-                              char **ret_ptr, int *ret_state)
+const char *http_parse_reqline(struct http_msg *msg, const char *msg_buf,
+                              unsigned int state, const char *ptr, const char *end,
+                              char **ret_ptr, unsigned int *ret_state)
 {
        __label__
                http_msg_rqmeth,
@@ -1206,7 +1206,7 @@ void http_msg_analyzer(struct buffer *buf, struct http_msg *msg, struct hdr_idx
                http_msg_ood,     /* out of data */
                http_msg_invalid;
 
-       int state;                /* updated only when leaving the FSM */
+       unsigned int state;       /* updated only when leaving the FSM */
        register char *ptr, *end; /* request pointers, to avoid dereferences */
 
        state = msg->msg_state;