Exemplo n.º 1
0
static ssize_t struct_machine_unpack(machine_t *machine, request_t *request){
	ssize_t          ret;
	data_t          *buffer;
	request_t       *values;
	struct_userdata *userdata = (struct_userdata *)machine->userdata;
	
	buffer = hash_data_find(request, userdata->buffer);
	if(buffer != NULL){
		switch(userdata->values){
			case STRUCT_VALUES_WHOLE: values = request; break;
			case STRUCT_VALUES_ONE:
				hash_data_get(ret, TYPE_HASHT, values, request, userdata->key_values);
				if(ret != 0)
					return error("hash with keys not supplied");
				break;
		};
		
		if(struct_unpack(userdata->structure, values, buffer) == 0)
			return error("struct_unpack failed");
	}
	
	return machine_pass(machine, request);
}
Exemplo n.º 2
0
		fail_unless(memcmp(test, orig, sizeof(orig)) == 0,  "struct_pack data failed");
	
	uint32_t  test1;
	off_t     test2;
	char     *test3 = malloc(100);
	memset(test3, 0x41, 99);
	test3[99] = 0;
	
	request_t query[] = {
		{ HK(key4), DATA_STRING(test3) },
		{ HK(key1), DATA_UINT32T(0)   },
		{ HK(key2), DATA_OFFT(0)    },
		hash_end
	};
	
	ret = struct_unpack(structure, query, &test_data);
		fail_unless(ret > 0,                                "struct_unpack failed");
	
	hash_data_get(ret, TYPE_UINT32T,  test1, query, HK(key1));
		fail_unless(ret == 0 && test1 == 100,               "struct_unpack data 1 failed\n");
	hash_data_get(ret, TYPE_OFFT,   test2, query, HK(key2));
		fail_unless(ret == 0 && test2 == 10,                "struct_unpack data 2 failed\n");
	hash_data_get(ret, TYPE_STRINGT, test3, query, HK(key4));
		fail_unless(ret == 0 && strcmp(test3,"hello") == 0, "struct_unpack data 3 failed\n");
	
	free(test3);
}
END_TEST
REGISTER_TEST(core, test_structs)