summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2024-12-14 15:46:34 -0800
committerAlan Coopersmith <alan.coopersmith@oracle.com>2024-12-15 10:17:22 -0800
commitdaf2c5397607c32c3814f02831b9c1158fd1e52c (patch)
treeed88e358dc4f81156e317b52fd79673fd29aaa6d
parent021e887de99444492b992805fcaf4acd9e72a781 (diff)
add pure & const function attributes suggested by gcc -Wsuggest-attributeHEADmaster
This only covers the ones in the pre-written code. There are many more suggested in the generated code, which will require changing the generator and will thus be handled separately. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxcb/-/merge_requests/64>
-rw-r--r--src/xcb.h23
-rw-r--r--src/xcbext.h3
-rw-r--r--src/xcbint.h1
3 files changed, 27 insertions, 0 deletions
diff --git a/src/xcb.h b/src/xcb.h
index fd6b7b9..59c779d 100644
--- a/src/xcb.h
+++ b/src/xcb.h
@@ -51,12 +51,32 @@ extern "C" {
# define __has_attribute(x) 0 /* Compatibility with older compilers. */
#endif
+/*
+ * For the below checks, we currently assume that __GNUC__ indicates
+ * gcc 3.0 (released 2001) or later, as we require support for C99.
+ */
+
+/* Supported in gcc 2.5 and later */
+#if defined(__GNUC__) || __has_attribute(__const__)
+#define XCB_CONST_FUNCTION __attribute__((__const__))
+#else
+#define XCB_CONST_FUNCTION XCB_PURE_FUNCTION
+#endif
+
+/* Supported in gcc 2.7 and later */
#if defined(__GNUC__) || __has_attribute(__packed__)
#define XCB_PACKED __attribute__((__packed__))
#else
#define XCB_PACKED
#endif
+/* Supported in gcc 2.96 and later */
+#if defined(__GNUC__) || __has_attribute(__pure__)
+#define XCB_PURE_FUNCTION __attribute__((__pure__))
+#else
+#define XCB_PURE_FUNCTION
+#endif
+
/**
* @defgroup XCB_Core_API XCB Core API
* @brief Core API of the XCB library.
@@ -469,6 +489,7 @@ void xcb_prefetch_extension_data(xcb_connection_t *c, xcb_extension_t *ext);
*
* The result must not be freed.
*/
+XCB_PURE_FUNCTION
const struct xcb_setup_t *xcb_get_setup(xcb_connection_t *c);
/**
@@ -479,6 +500,7 @@ const struct xcb_setup_t *xcb_get_setup(xcb_connection_t *c);
* Accessor for the file descriptor that was passed to the
* xcb_connect_to_fd call that returned @p c.
*/
+XCB_PURE_FUNCTION
int xcb_get_file_descriptor(xcb_connection_t *c);
/**
@@ -499,6 +521,7 @@ int xcb_get_file_descriptor(xcb_connection_t *c);
* @return XCB_CONN_CLOSED_PARSE_ERR, error during parsing display string.
* @return XCB_CONN_CLOSED_INVALID_SCREEN, because the server does not have a screen matching the display.
*/
+XCB_PURE_FUNCTION
int xcb_connection_has_error(xcb_connection_t *c);
/**
diff --git a/src/xcbext.h b/src/xcbext.h
index 90f9d58..1bb992e 100644
--- a/src/xcbext.h
+++ b/src/xcbext.h
@@ -297,6 +297,7 @@ int xcb_poll_for_reply64(xcb_connection_t *c, uint64_t request, void **reply, xc
* @param replylen The size of the reply.
* @return Pointer to the location where received file descriptors are stored.
*/
+XCB_CONST_FUNCTION
int *xcb_get_reply_fds(xcb_connection_t *c, void *reply, size_t replylen);
@@ -306,6 +307,7 @@ int *xcb_get_reply_fds(xcb_connection_t *c, void *reply, size_t replylen);
* @param mask The mask to check
* @return The number of set bits in the mask
*/
+XCB_CONST_FUNCTION
int xcb_popcount(uint32_t mask);
/**
@@ -313,6 +315,7 @@ int xcb_popcount(uint32_t mask);
* @param len The length of the array
* @return The sum of all entries in the array.
*/
+XCB_PURE_FUNCTION
int xcb_sumof(uint8_t *list, int len);
#ifdef __cplusplus
diff --git a/src/xcbint.h b/src/xcbint.h
index 235c848..9836def 100644
--- a/src/xcbint.h
+++ b/src/xcbint.h
@@ -225,6 +225,7 @@ struct xcb_connection_t {
void _xcb_conn_shutdown(xcb_connection_t *c, int err);
+XCB_CONST_FUNCTION
xcb_connection_t *_xcb_conn_ret_error(int err);
int _xcb_conn_wait(xcb_connection_t *c, pthread_cond_t *cond, struct iovec **vector, int *count);