From 41806d1c5233962f4e2e13c5cdf9f81484f94d3f Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 11 Jul 2018 09:39:05 +0200 Subject: [PATCH] MINOR: buffer: implement a new file for low-level buffer manipulation functions The buffer code currently depends on pools and other stuff and is not really autonomous anymore. The rewrite of the new API is an opportunity to clean this up. This patch creates a new file (buf.h) which does not depend on other elements and which will only contain what is needed to perform the most basic buffer operations. The new API will be introduced in this file and the conversion will be finished once buffer.h is empty. The definition of struct buffer was moved to this new file, using more explicity stdint types for the sizes and offsets. Most new functions will be implemented in two variants : __b_something() : unchecked variant, no wrapping is expected b_something() : wrapping-checked variant This way callers will be able to select which one to use depending on the use cases. --- include/common/buf.h | 50 +++++++++++++++++++++++++++++++++++++++++ include/common/buffer.h | 9 +------- 2 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 include/common/buf.h diff --git a/include/common/buf.h b/include/common/buf.h new file mode 100644 index 000000000..998e31aa1 --- /dev/null +++ b/include/common/buf.h @@ -0,0 +1,50 @@ +/* + * include/common/buf.h + * Simple buffer handling. + * + * Copyright (C) 2000-2018 Willy Tarreau - w@1wt.eu + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _COMMON_BUF_H +#define _COMMON_BUF_H + + +/* Structure defining a buffer's head */ +struct buffer { + char *p; /* buffer's start pointer, separates in and out data */ + unsigned int size; /* buffer size in bytes */ + unsigned int i; /* number of input bytes pending for analysis in the buffer */ + unsigned int o; /* number of out bytes the sender can consume from this buffer */ + char data[0]; /* bytes of stored data */ +}; + + + +#endif /* _COMMON_BUF_H */ + +/* + * Local variables: + * c-indent-level: 8 + * c-basic-offset: 8 + * End: + */ diff --git a/include/common/buffer.h b/include/common/buffer.h index 1a577ca3d..5e02cad4d 100644 --- a/include/common/buffer.h +++ b/include/common/buffer.h @@ -26,20 +26,13 @@ #include #include +#include #include #include #include #include -struct buffer { - char *p; /* buffer's start pointer, separates in and out data */ - unsigned int size; /* buffer size in bytes */ - unsigned int i; /* number of input bytes pending for analysis in the buffer */ - unsigned int o; /* number of out bytes the sender can consume from this buffer */ - char data[0]; /* bytes */ -}; - /* an element of the list. It represents an object that need to * acquire a buffer to continue its process. */ struct buffer_wait {