summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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);