コード例 #1
0
int BencodeParser::bencode_string_value(
		bencode_t * be,
		const char **str,
		int *slen
)
{
	const char *sp;

	*slen = 0;

	assert(bencode_is_string(be));

	sp = __read_string_len(be->str, slen);

	assert(sp);
	assert(0 < be->len);

	/*  make sure we still fit within the buffer */
	if (sp + *slen > be->start + (long int) be->len)
	{
		*str = NULL;
		return 0;
	}

	*str = sp;
	return 1;
}
コード例 #2
0
void TestBencodeIsStringEmpty(
    CuTest * tc
)
{
    bencode_t ben;

    char *str = strdup(" ");

    bencode_init(&ben, str, strlen(str));
    CuAssertTrue(tc, 0 == bencode_is_string(&ben));
    free(str);
}
コード例 #3
0
void TestBencodeListInListWithValue(
    CuTest * tc
)
{
    bencode_t ben, ben2, ben3;
    const char *ren;
    char *str = strdup("ll3:fooee");
    int len;

    bencode_init(&ben, str, strlen(str));

    CuAssertTrue(tc, 1 == bencode_is_list(&ben));
    CuAssertTrue(tc, 1 == bencode_list_get_next(&ben, &ben2));
    CuAssertTrue(tc, 1 == bencode_is_list(&ben2));
    CuAssertTrue(tc, 1 == bencode_list_get_next(&ben2, &ben3));
    CuAssertTrue(tc, 1 == bencode_is_string(&ben3));
    bencode_string_value(&ben3, &ren, &len);
    CuAssertTrue(tc, !strncmp("foo", ren, len));
    CuAssertTrue(tc, 0 == bencode_list_get_next(&ben, &ben2));
    free(str);
}