X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftal%2Fstr%2Fstr.h;h=bdcb27ea3f8e18b398e81ba2f876154d6118b092;hp=f2a694896c6aa89deed462278a70c7aa41307e32;hb=38ec541c4fd76d971a4959e31cd2a9ff113237ca;hpb=e7ae27d64226dda9865f1e4b5d9a55adcee04694 diff --git a/ccan/tal/str/str.h b/ccan/tal/str/str.h index f2a69489..bdcb27ea 100644 --- a/ccan/tal/str/str.h +++ b/ccan/tal/str/str.h @@ -1,8 +1,11 @@ /* Licensed under BSD-MIT - see LICENSE file for details */ #ifndef CCAN_STR_TAL_H #define CCAN_STR_TAL_H +#ifdef TAL_USE_TALLOC +#include +#else #include -#include +#endif #include #include @@ -11,7 +14,8 @@ * @ctx: NULL, or tal allocated object to be parent. * @p: the string to copy (can be take()). */ -char *tal_strdup(const tal_t *ctx, const char *p); +#define tal_strdup(ctx, p) tal_strdup_(ctx, p, TAL_LABEL(char, "[]")) +char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); /** * tal_strndup - duplicate a limited amount of a string. @@ -21,14 +25,19 @@ char *tal_strdup(const tal_t *ctx, const char *p); * * Always gives a nul-terminated string, with strlen() <= @n. */ -char *tal_strndup(const tal_t *ctx, const char *p, size_t n); +#define tal_strndup(ctx, p, n) tal_strndup_(ctx, p, n, TAL_LABEL(char, "[]")) +char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, + const char *label); /** * tal_fmt - allocate a formatted string * @ctx: NULL, or tal allocated object to be parent. * @fmt: the printf-style format (can be take()). */ -char *tal_fmt(const tal_t *ctx, const char *fmt, ...) PRINTF_FMT(2,3); +#define tal_fmt(ctx, ...) \ + tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) +char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, + ...) PRINTF_FMT(3,4); /** * tal_vfmt - allocate a formatted string (va_list version) @@ -36,7 +45,10 @@ char *tal_fmt(const tal_t *ctx, const char *fmt, ...) PRINTF_FMT(2,3); * @fmt: the printf-style format (can be take()). * @va: the va_list containing the format args. */ -char *tal_vfmt(const tal_t *ctx, const char *fmt, va_list ap) +#define tal_vfmt(ctx, fmt, va) \ + tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) +char *tal_vfmt_(const tal_t *ctx, const char *fmt TAKES, va_list ap, + const char *label) PRINTF_FMT(2,0); /** @@ -46,7 +58,7 @@ char *tal_vfmt(const tal_t *ctx, const char *fmt, va_list ap) * * Returns false on allocation failure. */ -bool tal_append_fmt(char **baseptr, const char *fmt, ...) PRINTF_FMT(2,3); +bool tal_append_fmt(char **baseptr, const char *fmt TAKES, ...) PRINTF_FMT(2,3); /** * tal_append_vfmt - append a formatted string to a talloc string (va_list) @@ -56,7 +68,7 @@ bool tal_append_fmt(char **baseptr, const char *fmt, ...) PRINTF_FMT(2,3); * * Returns false on allocation failure. */ -bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap); +bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap); /** * tal_strcat - join two strings together @@ -64,7 +76,9 @@ bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap); * @s1: the first string (can be take()). * @s2: the second string (can be take()). */ -char *tal_strcat(const tal_t *ctx, const char *s1, const char *s2); +#define tal_strcat(ctx, s1, s2) tal_strcat_(ctx, s1, s2, TAL_LABEL(char, "[]")) +char *tal_strcat_(const tal_t *ctx, const char *s1 TAKES, const char *s2 TAKES, + const char *label); enum strsplit { STR_EMPTY_OK, @@ -106,8 +120,13 @@ enum strsplit { * return long_lines; * } */ -char **tal_strsplit(const tal_t *ctx, - const char *string, const char *delims, enum strsplit flag); +#define tal_strsplit(ctx, string, delims, flag) \ + tal_strsplit_(ctx, string, delims, flag, TAL_LABEL(char *, "[]")) +char **tal_strsplit_(const tal_t *ctx, + const char *string TAKES, + const char *delims TAKES, + enum strsplit flag, + const char *label); enum strjoin { STR_TRAIL, @@ -137,8 +156,13 @@ enum strjoin { * return ret; * } */ -char *tal_strjoin(const void *ctx, char *strings[], const char *delim, - enum strjoin flags); +#define tal_strjoin(ctx, strings, delim, flags) \ + tal_strjoin_(ctx, strings, delim, flags, TAL_LABEL(char, "[]")) +char *tal_strjoin_(const void *ctx, + char *strings[] TAKES, + const char *delim TAKES, + enum strjoin flags, + const char *label); /** * tal_strreg - match/extract from a string via (extended) regular expressions. @@ -161,13 +185,14 @@ char *tal_strjoin(const void *ctx, char *strings[], const char *delim, * regcomp(3), regex(3). * * Example: - * // Given 'My name is Rusty' outputs 'Hello Rusty!' - * // Given 'my first name is Rusty Russell' outputs 'Hello Rusty Russell!' - * // Given 'My name isnt Rusty Russell' outputs 'Hello there!' + * // Given "My name is Rusty" outputs "Hello Rusty!\n" + * // Given "my first name is Rusty Russell" outputs "Hello Rusty Russell!\n" + * // Given "My name isnt Rusty Russell" outputs "Hello there!\n" * int main(int argc, char *argv[]) * { * char *person, *input; * + * (void)argc; * // Join args and trim trailing space. * input = tal_strjoin(NULL, argv+1, " ", STR_NO_TRAIL); * if (tal_strreg(NULL, input, @@ -179,5 +204,8 @@ char *tal_strjoin(const void *ctx, char *strings[], const char *delim, * return 0; * } */ -bool tal_strreg(const void *ctx, const char *string, const char *regex, ...); +#define tal_strreg(ctx, string, ...) \ + tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) +bool tal_strreg_(const void *ctx, const char *string TAKES, + const char *label, const char *regex, ...); #endif /* CCAN_STR_TAL_H */