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; }
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); }
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); }