REORG: tools: split common/standard.h into haproxy/tools{,-t}.h
And also rename standard.c to tools.c. The original split between
tools.h and standard.h dates from version 1.3-dev and was mostly an
accident. This patch moves the files back to what they were expected
to be, and takes care of not changing anything else. However this
time tools.h was split between functions and types, because it contains
a small number of commonly used macros and structures (e.g. name_desc)
which in turn cause the massive list of includes of tools.h to conflict
with the callers.
They remain the ugliest files of the whole project and definitely need
to be cleaned and split apart. A few types are defined there only for
functions provided there, and some parts are even OS-specific and should
move somewhere else, such as the symbol resolution code.
diff --git a/include/haproxy/tools-t.h b/include/haproxy/tools-t.h
new file mode 100644
index 0000000..bb99a23
--- /dev/null
+++ b/include/haproxy/tools-t.h
@@ -0,0 +1,113 @@
+/*
+ * include/haproxy/tools-t.h
+ * This files contains some general purpose macros and structures.
+ *
+ * Copyright (C) 2000-2020 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _HAPROXY_TOOLS_T_H
+#define _HAPROXY_TOOLS_T_H
+
+/* size used for max length of decimal representation of long long int. */
+#define NB_LLMAX_STR (sizeof("-9223372036854775807")-1)
+
+/* number of itoa_str entries */
+#define NB_ITOA_STR 16
+
+/* maximum quoted string length (truncated above) */
+#define QSTR_SIZE 200
+#define NB_QSTR 10
+
+/* returns 1 only if only zero or one bit is set in X, which means that X is a
+ * power of 2, and 0 otherwise */
+#define POWEROF2(x) (((x) & ((x)-1)) == 0)
+
+/* return an integer of type <ret> with only the highest bit set. <ret> may be
+ * both a variable or a type.
+ */
+#define MID_RANGE(ret) ((typeof(ret))1 << (8*sizeof(ret) - 1))
+
+/* return the largest possible integer of type <ret>, with all bits set */
+#define MAX_RANGE(ret) (~(typeof(ret))0)
+
+/* DEFNULL() returns either the argument as-is, or NULL if absent. This is for
+ * use in macros arguments.
+ */
+#define DEFNULL(...) _FIRST_ARG(NULL, ##__VA_ARGS__, NULL)
+#define _FIRST_ARG(a, b, ...) b
+
+/* special return values for the time parser (parse_time_err()) */
+#define PARSE_TIME_UNDER ((char *)1)
+#define PARSE_TIME_OVER ((char *)2)
+
+/* unit flags to pass to parse_time_err() */
+#define TIME_UNIT_US 0x0000
+#define TIME_UNIT_MS 0x0001
+#define TIME_UNIT_S 0x0002
+#define TIME_UNIT_MIN 0x0003
+#define TIME_UNIT_HOUR 0x0004
+#define TIME_UNIT_DAY 0x0005
+#define TIME_UNIT_MASK 0x0007
+
+#define SEC 1
+#define MINUTE (60 * SEC)
+#define HOUR (60 * MINUTE)
+#define DAY (24 * HOUR)
+
+/* UTF-8 decoder status */
+#define UTF8_CODE_OK 0x00
+#define UTF8_CODE_OVERLONG 0x10
+#define UTF8_CODE_INVRANGE 0x20
+#define UTF8_CODE_BADSEQ 0x40
+
+/* HAP_STRING() makes a string from a literal while HAP_XSTRING() first
+ * evaluates the argument and is suited to pass macros.
+ *
+ * They allow macros like PCRE_MAJOR to be defined without quotes, which
+ * is convenient for applications that want to test its value.
+ */
+#define HAP_STRING(...) #__VA_ARGS__
+#define HAP_XSTRING(...) HAP_STRING(__VA_ARGS__)
+
+/* operators to compare values. They're ordered that way so that the lowest bit
+ * serves as a negation for the test and contains all tests that are not equal.
+ */
+enum {
+ STD_OP_LE = 0, STD_OP_GT = 1,
+ STD_OP_EQ = 2, STD_OP_NE = 3,
+ STD_OP_GE = 4, STD_OP_LT = 5,
+};
+
+enum http_scheme {
+ SCH_HTTP,
+ SCH_HTTPS,
+};
+
+/* output format used by url2sa() */
+struct split_url {
+ enum http_scheme scheme;
+ const char *host;
+ int host_len;
+};
+
+/* generic structure associating a name and a value, for use in arrays */
+struct name_desc {
+ const char *name;
+ const char *desc;
+};
+
+#endif /* _HAPROXY_TOOLS_T_H */
diff --git a/include/common/standard.h b/include/haproxy/tools.h
similarity index 92%
rename from include/common/standard.h
rename to include/haproxy/tools.h
index ab8c075..627675a 100644
--- a/include/common/standard.h
+++ b/include/haproxy/tools.h
@@ -1,8 +1,8 @@
/*
- * include/common/standard.h
+ * include/haproxy/tools.h
* This files contains some general purpose functions and macros.
*
- * Copyright (C) 2000-2010 Willy Tarreau - w@1wt.eu
+ * Copyright (C) 2000-2020 Willy Tarreau - w@1wt.eu
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef _COMMON_STANDARD_H
-#define _COMMON_STANDARD_H
+#ifndef _HAPROXY_TOOLS_H
+#define _HAPROXY_TOOLS_H
#ifdef USE_BACKTRACE
#define _GNU_SOURCE
@@ -37,23 +37,14 @@
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <import/eb32tree.h>
+#include <import/eb32sctree.h>
#include <haproxy/api.h>
#include <haproxy/intops.h>
#include <haproxy/chunk.h>
#include <haproxy/namespace-t.h>
-#include <import/eb32tree.h>
-#include <import/eb32sctree.h>
#include <haproxy/protocol-t.h>
-
-/* size used for max length of decimal representation of long long int. */
-#define NB_LLMAX_STR (sizeof("-9223372036854775807")-1)
-
-/* number of itoa_str entries */
-#define NB_ITOA_STR 16
-
-/* maximum quoted string length (truncated above) */
-#define QSTR_SIZE 200
-#define NB_QSTR 10
+#include <haproxy/tools-t.h>
/****** string-specific macros and functions ******/
/* if a > max, then bound <a> to <max>. The macro returns the new <a> */
@@ -62,52 +53,8 @@
/* if a < min, then bound <a> to <min>. The macro returns the new <a> */
#define LBOUND(a, min) ({ typeof(a) b = (min); if ((a) < b) (a) = b; (a); })
-/* returns 1 only if only zero or one bit is set in X, which means that X is a
- * power of 2, and 0 otherwise */
-#define POWEROF2(x) (((x) & ((x)-1)) == 0)
-
#define SWAP(a, b) do { typeof(a) t; t = a; a = b; b = t; } while(0)
-/* return an integer of type <ret> with only the highest bit set. <ret> may be
- * both a variable or a type.
- */
-#define MID_RANGE(ret) ((typeof(ret))1 << (8*sizeof(ret) - 1))
-
-/* return the largest possible integer of type <ret>, with all bits set */
-#define MAX_RANGE(ret) (~(typeof(ret))0)
-
-/* DEFNULL() returns either the argument as-is, or NULL if absent. This is for
- * use in macros arguments.
- */
-#define DEFNULL(...) _FIRST_ARG(NULL, ##__VA_ARGS__, NULL)
-#define _FIRST_ARG(a, b, ...) b
-
-/* operators to compare values. They're ordered that way so that the lowest bit
- * serves as a negation for the test and contains all tests that are not equal.
- */
-enum {
- STD_OP_LE = 0, STD_OP_GT = 1,
- STD_OP_EQ = 2, STD_OP_NE = 3,
- STD_OP_GE = 4, STD_OP_LT = 5,
-};
-
-enum http_scheme {
- SCH_HTTP,
- SCH_HTTPS,
-};
-
-struct split_url {
- enum http_scheme scheme;
- const char *host;
- int host_len;
-};
-
-/* generic structure associating a name and a value, for use in arrays */
-struct name_desc {
- const char *name;
- const char *desc;
-};
-
extern THREAD_LOCAL int itoa_idx; /* index of next itoa_str to use */
/*
@@ -588,24 +535,6 @@
extern const char *parse_time_err(const char *text, unsigned *ret, unsigned unit_flags);
extern const char *parse_size_err(const char *text, unsigned *ret);
-/* special return values for the time parser */
-#define PARSE_TIME_UNDER ((char *)1)
-#define PARSE_TIME_OVER ((char *)2)
-
-/* unit flags to pass to parse_time_err */
-#define TIME_UNIT_US 0x0000
-#define TIME_UNIT_MS 0x0001
-#define TIME_UNIT_S 0x0002
-#define TIME_UNIT_MIN 0x0003
-#define TIME_UNIT_HOUR 0x0004
-#define TIME_UNIT_DAY 0x0005
-#define TIME_UNIT_MASK 0x0007
-
-#define SEC 1
-#define MINUTE (60 * SEC)
-#define HOUR (60 * MINUTE)
-#define DAY (24 * HOUR)
-
/*
* Parse binary string written in hexadecimal (source) and store the decoded
* result into binstr and set binstrlen to the length of binstr. Memory for
@@ -1003,12 +932,6 @@
return caddr & ~(unsigned long)(data & 3);
}
-/* UTF-8 decoder status */
-#define UTF8_CODE_OK 0x00
-#define UTF8_CODE_OVERLONG 0x10
-#define UTF8_CODE_INVRANGE 0x20
-#define UTF8_CODE_BADSEQ 0x40
-
unsigned char utf8_next(const char *s, int len, unsigned int *c);
static inline unsigned char utf8_return_code(unsigned int code)
@@ -1112,13 +1035,4 @@
return ha_random32() >> 1;
}
-/* HAP_STRING() makes a string from a literal while HAP_XSTRING() first
- * evaluates the argument and is suited to pass macros.
- *
- * They allow macros like PCRE_MAJOR to be defined without quotes, which
- * is convenient for applications that want to test its value.
- */
-#define HAP_STRING(...) #__VA_ARGS__
-#define HAP_XSTRING(...) HAP_STRING(__VA_ARGS__)
-
-#endif /* _COMMON_STANDARD_H */
+#endif /* _HAPROXY_TOOLS_H */
diff --git a/include/proto/stats.h b/include/proto/stats.h
index 01c08ba..f98a5ec 100644
--- a/include/proto/stats.h
+++ b/include/proto/stats.h
@@ -23,7 +23,7 @@
#ifndef _PROTO_STATS_H
#define _PROTO_STATS_H
-#include <common/standard.h>
+#include <haproxy/tools.h>
#include <haproxy/api.h>
#include <types/applet.h>
#include <types/stream_interface.h>
diff --git a/include/proto/stick_table.h b/include/proto/stick_table.h
index 1a5a13d..7f35cfa 100644
--- a/include/proto/stick_table.h
+++ b/include/proto/stick_table.h
@@ -24,7 +24,7 @@
#define _PROTO_STICK_TABLE_H
#include <haproxy/errors.h>
-#include <common/standard.h>
+#include <haproxy/tools.h>
#include <haproxy/ticks.h>
#include <haproxy/time.h>
#include <types/stick_table.h>
diff --git a/include/proto/trace.h b/include/proto/trace.h
index f16763d..3a70205 100644
--- a/include/proto/trace.h
+++ b/include/proto/trace.h
@@ -23,7 +23,7 @@
#define _PROTO_TRACE_H
#include <haproxy/api.h>
-#include <common/standard.h>
+#include <haproxy/tools.h>
#include <import/ist.h>
#include <haproxy/list.h>
#include <types/log.h>