Commit 2ecae4f3 authored by David Gibson's avatar David Gibson

bytestring: Add initializer macro

The BYTESTRING macro is constant, since it's designed to take a string
literal, but it doesn't count as constant since it involves an (inlined)
function call.  That means it can't be used in a static storage duration
initializer.

Unfortunately, I can't see a portable way to make something which can be
used as an initializer, but which can also be used in other contexts where
BYTESTRING() can be used, so this patch introduces BYTESTRING_INIT() which
is similar to BYTESTRING() but produces an initializer.
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 846f605e
...@@ -55,6 +55,18 @@ bytestring(const char *p, size_t l) ...@@ -55,6 +55,18 @@ bytestring(const char *p, size_t l)
*/ */
#define BYTESTRING(s) (bytestring((s), ARRAY_SIZE(s) - 1)) #define BYTESTRING(s) (bytestring((s), ARRAY_SIZE(s) - 1))
/**
* BYTESTRING_INIT - bytestring initializer
* @s: string literal
*
* Produces an initializer for a bytestring from a literal string.
* The resulting bytestring will not include the terminating \0, but
* will include any internal \0s.
*
* Example:
* static const struct bytestring CONSTANT = BYTESTRING_INIT("CONSTANT");
*/
#define BYTESTRING_INIT(s) { .ptr = (s), .len = ARRAY_SIZE(s) - 1}
/** /**
* bytestring_from_string - construct a bytestring from a NUL terminated string * bytestring_from_string - construct a bytestring from a NUL terminated string
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment