diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2024-12-14 15:46:34 -0800 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2024-12-15 10:17:22 -0800 |
commit | daf2c5397607c32c3814f02831b9c1158fd1e52c (patch) | |
tree | ed88e358dc4f81156e317b52fd79673fd29aaa6d | |
parent | 021e887de99444492b992805fcaf4acd9e72a781 (diff) |
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.h | 23 | ||||
-rw-r--r-- | src/xcbext.h | 3 | ||||
-rw-r--r-- | src/xcbint.h | 1 |
3 files changed, 27 insertions, 0 deletions
@@ -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); |