From 2c20abc2e2fdaf1888472968e811d00260dcf8fa Mon Sep 17 00:00:00 2001 From: Cody P Schafer Date: Sat, 5 Sep 2015 21:21:05 -0400 Subject: [PATCH] mem: mark all functions as PURE This might allow compilers that support the anotation to make better choices when optimizing, and all these functions meet the requirements for being marked pure. Signed-off-by: Cody P Schafer Signed-off-by: David Gibson --- ccan/mem/_info | 1 + ccan/mem/mem.h | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/ccan/mem/_info b/ccan/mem/_info index 19b22287..6389e359 100644 --- a/ccan/mem/_info +++ b/ccan/mem/_info @@ -18,6 +18,7 @@ int main(int argc, char *argv[]) return 1; if (strcmp(argv[1], "depends") == 0) { + printf("ccan/compiler"); return 0; } diff --git a/ccan/mem/mem.h b/ccan/mem/mem.h index 89b16d42..8d6bba94 100644 --- a/ccan/mem/mem.h +++ b/ccan/mem/mem.h @@ -3,16 +3,19 @@ #define CCAN_MEM_H #include "config.h" +#include #include #include #if !HAVE_MEMMEM +PURE_FUNCTION void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen); #endif #if !HAVE_MEMRCHR +PURE_FUNCTION void *memrchr(const void *s, int c, size_t n); #endif @@ -37,6 +40,7 @@ void *memrchr(const void *s, int c, size_t n); * } * */ +PURE_FUNCTION void *mempbrkm(const void *data, size_t len, const void *accept, size_t accept_len); /** @@ -57,6 +61,7 @@ void *mempbrkm(const void *data, size_t len, const void *accept, size_t accept_l * printf("Nada\n"); * } */ +PURE_FUNCTION static inline char *mempbrk(const void *data, size_t len, const char *accept) { return mempbrkm(data, len, accept, strlen(accept)); @@ -81,6 +86,7 @@ static inline char *mempbrk(const void *data, size_t len, const char *accept) * printf("Found %c after trimming spaces\n", *r); * } */ +PURE_FUNCTION void *memcchr(void const *data, int c, size_t data_len); /** @@ -95,6 +101,7 @@ void *memcchr(void const *data, int c, size_t data_len); * printf("memory blocks are the same!\n"); * } */ +PURE_FUNCTION static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) { return al == bl && !memcmp(a, b, bl); @@ -114,6 +121,7 @@ static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) * printf("somebytes starts with otherbytes!\n"); * } */ +PURE_FUNCTION static inline bool memstarts(void const *data, size_t data_len, void const *prefix, size_t prefix_len) { @@ -135,6 +143,7 @@ static inline bool memstarts(void const *data, size_t data_len, * printf("somebytes == 'foo'!\n"); * } */ +PURE_FUNCTION static inline bool memeqstr(const void *data, size_t length, const char *string) { return memeq(data, length, string, strlen(string)); @@ -151,6 +160,7 @@ static inline bool memeqstr(const void *data, size_t length, const char *string) * printf("somebytes starts with 'It'\n"); * } */ +PURE_FUNCTION static inline bool memstarts_str(const void *a, size_t al, const char *s) { return memstarts(a, al, s, strlen(s)); @@ -166,6 +176,7 @@ static inline bool memstarts_str(const void *a, size_t al, const char *s) * Returns true if @suffix appears as a substring at the end of @s, * false otherwise. */ +PURE_FUNCTION static inline bool memends(const void *s, size_t s_len, const void *suffix, size_t suffix_len) { return (s_len >= suffix_len) && (memcmp((const char *)s + s_len - suffix_len, -- 2.39.2