Пример #1
0
int rl_list_serialize(rlite *UNUSED(db), void *obj, unsigned char *data)
{
	rl_list *list = obj;
	put_4bytes(data, list->left);
	put_4bytes(&data[4], list->right);
	put_4bytes(&data[8], list->max_node_size);
	put_4bytes(&data[12], list->size);
	return RL_OK;
}
Пример #2
0
int rl_list_node_serialize_long(rlite *UNUSED(db), void *obj, unsigned char *data)
{
	rl_list_node *node = obj;

	put_4bytes(data, node->size);
	put_4bytes(&data[4], node->left);
	put_4bytes(&data[8], node->right);
	long i, pos = 12;
	for (i = 0; i < node->size; i++) {
		put_4bytes(&data[pos], *(long *)(node->elements[i]));
		pos += 4;
	}
	return RL_OK;
}
Пример #3
0
int rl_header_serialize(struct rlite *db, void *UNUSED(obj), unsigned char *data)
{
	int identifier_len = strlen((char *)identifier);
	memcpy(data, identifier, identifier_len);
	put_4bytes(&data[identifier_len], db->page_size);
	put_4bytes(&data[identifier_len + 4], db->next_empty_page);
	put_4bytes(&data[identifier_len + 8], db->number_of_pages);
	put_4bytes(&data[identifier_len + 12], db->number_of_databases);
	long i, pos = identifier_len + 16;
	for (i = 0; i < db->number_of_databases + RLITE_INTERNAL_DB_COUNT; i++) {
		if (db->databases[i] != 0) {
			put_4bytes(&data[pos], db->databases[i]);
		}
		pos += 4;
	}
	return RL_OK;
}
Пример #4
0
int rl_write_signal(const char *signal_name, const char *data, size_t datalen) {
    char header[FIFO_HEADER_SIZE];
    put_4bytes((unsigned char *)header, datalen);

    uint64_t crc = rl_crc64(0, (unsigned char *)data, datalen);
    memrev64ifbe(&crc);
    memcpy(&header[4], &crc, 8);

    int fd = open(signal_name, O_WRONLY | O_NONBLOCK);
    if (fd == -1) {
        // fifo may not always exist on our code
        // it is a way to signal between processes, but it is show and forget
        return RL_OK;
    }
    write(fd, header, FIFO_HEADER_SIZE);
    write(fd, data, datalen);
    close(fd);
    return RL_OK;
}