mirror of
https://github.com/fluencelabs/redis
synced 2025-05-10 17:57:11 +00:00
add wit support
This commit is contained in:
parent
ae52a7084d
commit
9dd65dedad
@ -11,9 +11,11 @@ SDK = sdk/syscalls_stubs.c
|
|||||||
EXPORT_FUNCS = \
|
EXPORT_FUNCS = \
|
||||||
--export=allocate,$\
|
--export=allocate,$\
|
||||||
--export=deallocate,$\
|
--export=deallocate,$\
|
||||||
--export=invoke,$\
|
--export=set_result_size,$\
|
||||||
--export=load,$\
|
--export=set_result_ptr,$\
|
||||||
--export=store
|
--export=get_result_size,$\
|
||||||
|
--export=get_result_ptr,$\
|
||||||
|
--export=invoke
|
||||||
|
|
||||||
REDIS_SERVER_SRC = \
|
REDIS_SERVER_SRC = \
|
||||||
adlist.c\
|
adlist.c\
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
client *g_client;
|
client *g_client;
|
||||||
|
char *RESULT_PTR;
|
||||||
|
int RESULT_SIZE;
|
||||||
|
|
||||||
// TODO: add handling of the initialization process errors
|
// TODO: add handling of the initialization process errors
|
||||||
void init() {
|
void init() {
|
||||||
@ -25,8 +27,20 @@ void deallocate(void *ptr, int size) {
|
|||||||
zfree(ptr);
|
zfree(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void store(char *ptr, unsigned char byte) {
|
void set_result_ptr(char *ptr) {
|
||||||
*ptr = byte;
|
*RESULT_PTR = ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_result_size(int size) {
|
||||||
|
RESULT_SIZE = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_result_size(void) {
|
||||||
|
return RESULT_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *get_result_ptr() {
|
||||||
|
return RESULT_PTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char load(const unsigned char *ptr) {
|
unsigned char load(const unsigned char *ptr) {
|
||||||
@ -59,10 +73,10 @@ void clean_client_buffer(client *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *write_response(client *c, size_t *response_size) {
|
char *write_response(client *c, size_t *response_size) {
|
||||||
char *response = allocate(c->bufpos + c->reply_bytes + 4);
|
char *response = allocate(c->bufpos + c->reply_bytes);
|
||||||
*response_size = 0;
|
*response_size = 0;
|
||||||
|
|
||||||
memcpy(response + 4, c->buf, c->bufpos);
|
memcpy(response, c->buf, c->bufpos);
|
||||||
*response_size += c->bufpos;
|
*response_size += c->bufpos;
|
||||||
|
|
||||||
while(listLength(c->reply)) {
|
while(listLength(c->reply)) {
|
||||||
@ -74,21 +88,17 @@ char *write_response(client *c, size_t *response_size) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(response + 4 + *response_size, o->buf, objlen);
|
memcpy(response + *response_size, o->buf, objlen);
|
||||||
|
|
||||||
c->reply_bytes -= o->size;
|
c->reply_bytes -= o->size;
|
||||||
*response_size += objlen;
|
*response_size += objlen;
|
||||||
listDelNode(c->reply, listFirst(c->reply));
|
listDelNode(c->reply, listFirst(c->reply));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < 4; ++i) {
|
|
||||||
response[i] = (*response_size >> 8*i) & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *invoke(char *request, int request_size) {
|
void invoke(char *request, int request_size) {
|
||||||
serverLog(LL_DEBUG, "invoke started\n");
|
serverLog(LL_DEBUG, "invoke started\n");
|
||||||
if(g_isInited == 0) {
|
if(g_isInited == 0) {
|
||||||
init();
|
init();
|
||||||
@ -119,6 +129,7 @@ const char *invoke(char *request, int request_size) {
|
|||||||
g_client->reply_bytes,
|
g_client->reply_bytes,
|
||||||
response_size
|
response_size
|
||||||
);
|
);
|
||||||
|
|
||||||
clean_client_buffer(g_client);
|
clean_client_buffer(g_client);
|
||||||
|
|
||||||
serverCron();
|
serverCron();
|
||||||
@ -127,5 +138,6 @@ const char *invoke(char *request, int request_size) {
|
|||||||
beforeSleep();
|
beforeSleep();
|
||||||
serverLog(LL_DEBUG, "beforeSleep\n");
|
serverLog(LL_DEBUG, "beforeSleep\n");
|
||||||
|
|
||||||
return response;
|
RESULT_PTR = response;
|
||||||
|
RESULT_SIZE = response_size;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user