aboutsummaryrefslogtreecommitdiffstats
path: root/src/message.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/message.h')
-rw-r--r--src/message.h31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/message.h b/src/message.h
index d6447f1..15a9330 100644
--- a/src/message.h
+++ b/src/message.h
@@ -20,6 +20,16 @@
+#ifndef GCC_ONLY
+# if defined(__GNUC__) && !defined(__clang__)
+# define GCC_ONLY(...) __VA_ARGS__
+# else
+# define GCC_ONLY(...) /* nothing */
+# endif
+#endif
+
+
+
/**
* Message passed between a server and a client
*/
@@ -33,7 +43,7 @@ struct message
* but `headers` itself is `NULL` if there are no headers.
* The "Length" header should be included in this list.
*/
- char** headers;
+ char** restrict headers;
/**
* The number of headers in the message
@@ -43,7 +53,7 @@ struct message
/**
* The payload of the message, `NULL` if none (of zero-length)
*/
- char* payload;
+ char* restrict payload;
/**
* The size of the payload
@@ -58,7 +68,7 @@ struct message
/**
* Internal buffer for the reading function (internal data)
*/
- char* buffer;
+ char* restrict buffer;
/**
* The size allocated to `buffer` (internal data)
@@ -90,7 +100,8 @@ struct message
* @param this Memory slot in which to store the new message
* @return Non-zero on error, `errno` will be set accordingly
*/
-int message_initialise(struct message* this);
+GCC_ONLY(__attribute__((nonnull)))
+int message_initialise(struct message* restrict this);
/**
* Release all resources in a message, should
@@ -98,7 +109,8 @@ int message_initialise(struct message* this);
*
* @param this The message
*/
-void message_destroy(struct message* this);
+GCC_ONLY(__attribute__((nonnull)))
+void message_destroy(struct message* restrict this);
/**
* Marshal a message for state serialisation
@@ -109,7 +121,8 @@ void message_destroy(struct message* this);
* needs to be
* @return The number of marshalled byte
*/
-size_t message_marshal(const struct message* this, void* buf);
+GCC_ONLY(__attribute__((nonnull(1))))
+size_t message_marshal(const struct message* restrict this, void* restrict buf);
/**
* Unmarshal a message for state deserialisation
@@ -118,7 +131,8 @@ size_t message_marshal(const struct message* this, void* buf);
* @param buf In buffer with the marshalled data
* @return The number of unmarshalled bytes, 0 on error
*/
-size_t message_unmarshal(struct message* this, const void* buf);
+GCC_ONLY(__attribute__((nonnull)))
+size_t message_unmarshal(struct message* restrict this, const void* restrict buf);
/**
* Read the next message from a file descriptor
@@ -134,5 +148,6 @@ size_t message_unmarshal(struct message* this, const void* buf);
* Other: Failure
* -2: Corrupt message (unrecoverable)
*/
-int message_read(struct message* this, int fd);
+GCC_ONLY(__attribute__((nonnull)))
+int message_read(struct message* restrict this, int fd);