Ejemplo n.º 1
0
ssize_t cavan_cache_fill(struct cavan_cache *cache, char *buff, size_t size, size_t reserved, u32 timeout)
{
	char *buff_bak = buff;
	char *buff_end = buff + size;

	while (buff < buff_end)
	{
		ssize_t rdlen = cavan_cache_read(cache, buff, buff_end - buff, reserved, timeout);
		if (rdlen < 0)
		{
			pr_red_info("cavan_cache_read");
			return rdlen;
		}

		if (rdlen == 0)
		{
			size = buff - buff_bak;
			break;
		}

		buff += rdlen;
	}

	return size;
}
Ejemplo n.º 2
0
static void *read_thread_handler(void *data)
{
	ssize_t rdlen;
	char buff[1024];
	struct cavan_cache *cache = data;

	while (1) {
		rdlen = cavan_cache_read_line(cache, buff, sizeof(buff), 0, 20000);
		if (rdlen <= 0) {
			if (rdlen < 0) {
				pr_red_info("cavan_cache_read");
				break;
			} else {
				rdlen = cavan_cache_read(cache, buff, sizeof(buff) - 1, 0, 0);
				if (rdlen <= 0) {
					break;
				}
			}
		}

		buff[rdlen] = 0;

#if __WORDSIZE == 64
		pr_green_info("buff[%ld] = %s", rdlen, buff);
#else
		pr_green_info("buff[%d] = %s", rdlen, buff);
#endif

		// msleep(500);
	}

	pr_red_info("Read thread exit!");
	return NULL;
}
Ejemplo n.º 3
0
ssize_t cavan_cache_read_line(struct cavan_cache *cache, char *buff, size_t size, size_t reserved, u32 timeout)
{
	char *buff_bak = buff;
	char *buff_end = buff + size - 1;

	while (buff < buff_end)
	{
		char c;
		ssize_t rdlen;

		rdlen = cavan_cache_read(cache, &c, 1, reserved, timeout);
		if (rdlen < 0)
		{
			pr_red_info("cavan_cache_read");
			return rdlen;
		}

		if (rdlen == 0)
		{
			break;
		}

		switch (c)
		{
		case '\n':
			if (buff > buff_bak)
			{
				goto out_return;
			}
		case '\r':
			break;

		default:
			*buff++ = c;
		}
	}

out_return:
	*buff = 0;
	return buff - buff_bak;
}