Пример #1
0
struct rfc822_msg *rfc822_check(const struct rfc822_msg *msg,
				const char *abortstr)
{
	assert(msg);
	if (!list_check(&msg->headers, abortstr))
                return NULL;
	if (!tal_check(msg, abortstr))
		return NULL;
        return (struct rfc822_msg *)msg;
}
Пример #2
0
int main(int argc, char *argv[])
{
	char **split, *str;
	void *ctx;

	plan_tests(69);
	split = tal_strsplit(NULL, "hello  world", " ", STR_EMPTY_OK);
	ok1(!strcmp(split[0], "hello"));
	ok1(!strcmp(split[1], ""));
	ok1(!strcmp(split[2], "world"));
	ok1(split[3] == NULL);
	ok1(tal_count(split) == 4);
	tal_free(split);

	split = tal_strsplit(NULL, "hello  world", " ", STR_NO_EMPTY);
	ok1(!strcmp(split[0], "hello"));
	ok1(!strcmp(split[1], "world"));
	ok1(split[2] == NULL);
	ok1(tal_count(split) == 3);
	tal_free(split);

	split = tal_strsplit(NULL, "  hello  world", " ", STR_NO_EMPTY);
	ok1(!strcmp(split[0], "hello"));
	ok1(!strcmp(split[1], "world"));
	ok1(split[2] == NULL);
	ok1(tal_count(split) == 3);
	tal_free(split);

	split = tal_strsplit(NULL, "hello  world", "o ", STR_EMPTY_OK);
	ok1(!strcmp(split[0], "hell"));
	ok1(!strcmp(split[1], ""));
	ok1(!strcmp(split[2], ""));
	ok1(!strcmp(split[3], "w"));
	ok1(!strcmp(split[4], "rld"));
	ok1(split[5] == NULL);
	ok1(tal_count(split) == 6);

	ctx = split;
	split = tal_strsplit(ctx, "hello  world", "o ", STR_EMPTY_OK);
	ok1(tal_parent(split) == ctx);
	tal_free(ctx);

	str = tal_strjoin(NULL, (char **)substrings, ", ", STR_TRAIL);
	ok1(!strcmp(str, "far, bar, baz, b, ba, z, ar, "));
	ctx = str;
	str = tal_strjoin(ctx, (char **)substrings, "", STR_TRAIL);
	ok1(!strcmp(str, "farbarbazbbazar"));
	ok1(tal_parent(str) == ctx);
	str = tal_strjoin(ctx, (char **)substrings, ", ", STR_NO_TRAIL);
	ok1(tal_parent(str) == ctx);
	ok1(!strcmp(str, "far, bar, baz, b, ba, z, ar"));
	str = tal_strjoin(ctx, (char **)substrings, "", STR_NO_TRAIL);
	ok1(!strcmp(str, "farbarbazbbazar"));
	ok1(tal_parent(str) == ctx);
	tal_free(ctx);

	ctx = tal_strdup(NULL, "context");
	/* Pass through NULLs from take. */
	ok1(tal_strsplit(NULL, take(NULL), " ", STR_EMPTY_OK) == NULL);
	ok1(tal_strsplit(NULL, "foo", take(NULL), STR_EMPTY_OK) == NULL);

	/* tal_strsplit take string.  It reallocs it to same size, but
	 * that sometimes causes a move, so we can't directly check
	 * that split[0] == str. */
	str = tal_strdup(ctx, "hello world");
	ok1(tal_check(ctx, NULL));
	ok1(tal_check(str, NULL));
	split = tal_strsplit(ctx, take(str), " ", STR_EMPTY_OK);
	ok1(tal_parent(split) == ctx);
	ok1(!strcmp(split[0], "hello"));
	ok1(!strcmp(split[1], "world"));
	ok1(split[2] == NULL);
	ok1(tal_check(split, NULL));
	ok1(tal_check(ctx, NULL));
	tal_free(split);
	/* Previous free should get rid of str */
	ok1(!tal_first(ctx));

	/* tal_strsplit take delims */
	str = tal_strdup(ctx, " ");
	split = tal_strsplit(ctx, "hello world", take(str), STR_EMPTY_OK);
	ok1(tal_parent(split) == ctx);
	ok1(!strcmp(split[0], "hello"));
	ok1(!strcmp(split[1], "world"));
	ok1(split[2] == NULL);
	ok1(tal_check(split, NULL));
	ok1(tal_check(ctx, NULL));
	tal_free(split);
	/* str is gone... */
	ok1(!tal_first(ctx));

	/* tal_strsplit takes both. */
	split = tal_strsplit(ctx, take(tal_strdup(NULL, "hello world")),
			     take(tal_strdup(NULL, " ")), STR_EMPTY_OK);
	ok1(tal_parent(split) == ctx);
	ok1(!strcmp(split[0], "hello"));
	ok1(!strcmp(split[1], "world"));
	ok1(split[2] == NULL);
	ok1(tal_check(split, NULL));
	ok1(tal_check(ctx, NULL));
	tal_free(split);
	/* temp allocs are gone... */
	ok1(!tal_first(ctx));

	/* tal_strjoin passthrough taken NULLs OK. */
	ok1(tal_strjoin(ctx, take(NULL), "", STR_TRAIL) == NULL);
	ok1(tal_strjoin(ctx, take(NULL), "", STR_NO_TRAIL) == NULL);
	ok1(tal_strjoin(ctx, split, take(NULL), STR_TRAIL) == NULL);
	ok1(tal_strjoin(ctx, split, take(NULL), STR_NO_TRAIL) == NULL);

	/* tal_strjoin take strings[] */
	split = tal_strsplit(ctx, "hello world", " ", STR_EMPTY_OK);
	str = tal_strjoin(ctx, take(split), " there ", STR_NO_TRAIL);
	ok1(!strcmp(str, "hello there world"));
	ok1(tal_parent(str) == ctx);
	/* split is gone... */
	ok1(tal_first(ctx) == str && !tal_next(ctx, str));
	tal_free(str);
	ok1(!tal_first(ctx));

	/* tal_strjoin take delim */
	split = tal_strsplit(ctx, "hello world", " ", STR_EMPTY_OK);
	str = tal_strjoin(ctx, split, take(tal_strdup(ctx, " there ")),
			  STR_NO_TRAIL);
	ok1(!strcmp(str, "hello there world"));
	ok1(tal_parent(str) == ctx);
	tal_free(split);
	/* tmp alloc is gone, str is only remainder. */
	ok1(tal_first(ctx) == str && !tal_next(ctx, str));
	tal_free(str);
	ok1(!tal_first(ctx));

	/* tal_strjoin take both. */
	str = tal_strjoin(ctx, take(tal_strsplit(ctx, "hello world", " ",
						 STR_EMPTY_OK)),
			  take(tal_strdup(ctx, " there ")), STR_NO_TRAIL);
	ok1(!strcmp(str, "hello there world"));
	ok1(tal_parent(str) == ctx);
	/* tmp allocs are gone, str is only remainder. */
	ok1(tal_first(ctx) == str && !tal_next(ctx, str));
	tal_free(str);
	ok1(!tal_first(ctx));
	tal_free(ctx);

	return exit_status();
}