Skip to content

Commit

Permalink
compatible with libmemcached-1.0.8
Browse files Browse the repository at this point in the history
* support 64bit linux/mac
* upgrade to libmemcached-1.0.8 support
* use rebar to build
  • Loading branch information
echou committed Jul 9, 2012
1 parent 8e1622a commit bb0239e
Show file tree
Hide file tree
Showing 57 changed files with 958 additions and 4,996 deletions.
24 changes: 0 additions & 24 deletions Makefile

This file was deleted.

83 changes: 0 additions & 83 deletions README.markdown

This file was deleted.

83 changes: 0 additions & 83 deletions README.txt

This file was deleted.

49 changes: 27 additions & 22 deletions lib/mcache/c_src/memcached_drv.cpp → c_src/memcached_drv.cpp
Expand Up @@ -27,9 +27,12 @@ class Cache

bool setServers(const string& servers)
{

memcached_server_st* s = memcached_servers_parse(servers.c_str());
printf("servers %s, %p\r\n", servers.c_str(), s);
if (!s) return false;

memcached_servers_reset(mc);
int ret = memcached_server_push(mc, s);
memcached_server_list_free(s);

Expand Down Expand Up @@ -57,7 +60,7 @@ class Driver
set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY);
}

int control(unsigned int command, char *buf, int len, char **rbuf, int rlen)
ErlDrvSSizeT control(unsigned int command, char *buf, int len, char **rbuf, int rlen)
{
switch(command)
{
Expand Down Expand Up @@ -102,23 +105,23 @@ class Driver
{
TermData td;
td.open_tuple();
td.add_atom("mc_async");
td.add_atom((char*)"mc_async");
td.add_uint(seq);
return td;
}

TermData& ok(TermData& td, bool in_tuple = true)
{
if (in_tuple) td.open_tuple();
td.add_atom("ok");
td.add_atom((char*)"ok");
return td;
}

TermData& error(TermData& td, memcached_return rc)
{
const char * errmsg = memcached_strerror(m_cache, rc);
td.open_tuple();
td.add_atom("error");
td.add_atom((char*)"error");
td.add_buf((char*)errmsg, strlen(errmsg));
td.close_tuple();
return td;
Expand All @@ -127,8 +130,8 @@ class Driver
TermData& badarg(TermData& td)
{
td.open_tuple();
td.add_atom("error");
td.add_atom("badarg");
td.add_atom((char*)"error");
td.add_atom((char*)"badarg");
td.close_tuple();
return td;
}
Expand All @@ -140,7 +143,7 @@ class Driver

// command handlers

int doSetServers(char* buf, int len, char** rbuf, int rlen)
ErlDrvSSizeT doSetServers(char* buf, int len, char** rbuf, int rlen)
{
m_cache.setServers(buf);
return 0;
Expand Down Expand Up @@ -177,7 +180,7 @@ class Driver
else if (rc == MEMCACHED_NOTFOUND)
{
ok(td, true);
td.add_atom("undefined");
td.add_atom((char*)"undefined");
}
else
{
Expand Down Expand Up @@ -235,14 +238,14 @@ class Driver
free_list.push_back(result);

td.open_tuple();
td.add_buf(result->key, result->key_length);
td.add_buf(memcached_string_value(&(result->value)), memcached_string_length(&(result->value)));
td.add_uint(result->flags);
td.add_buf(result->item_key, result->key_length);
td.add_buf(result->value.string, result->value.current_size);
td.add_uint(result->item_flags);
td.close_tuple();
}
td.close_list();
send(td);
for(int i=0; i<free_list.size(); i++) memcached_result_free(free_list[i]);
for(size_t i=0; i<free_list.size(); i++) memcached_result_free(free_list[i]);
}

void doMGet2(uint32_t seq, IOVec& vec)
Expand All @@ -259,7 +262,6 @@ class Driver

for(int i=0;i<num_keys;i++)
{
char nul;
if (!(vec.get(lengths[i]) && vec.get(keys[i], lengths[i]+1))) // trailing zero is included
goto L_badarg;
//printf("key #%d = %s\r\n", i, keys[i]);
Expand Down Expand Up @@ -298,10 +300,10 @@ class Driver
for(int i=0; i<num_keys; i++)
{
memcached_result_st* r = NULL;
for(int j=ri; j<results.size(); j++)
for(size_t j=ri; j<results.size(); j++)
{
if (lengths[i] == results[j]->key_length &&
memcmp(keys[i], results[j]->key, lengths[i]) == 0)
memcmp(keys[i], results[j]->item_key, lengths[i]) == 0)
{
r = results[j];
//ri = j+1;
Expand All @@ -312,20 +314,20 @@ class Driver
{
td.open_tuple();
//td.add_buf(result->key, result->key_length);
td.add_buf(memcached_string_value(&(r->value)), memcached_string_length(&(r->value)));
td.add_uint(r->flags);
td.add_buf(r->value.string, r->value.current_size);
td.add_uint(r->item_flags);
td.close_tuple();
}
else
{
td.add_atom("undefined");
td.add_atom((char*)"undefined");
}
}

td.close_list();
send(td);

for(int i=0; i<results.size(); i++)
for(size_t i=0; i<results.size(); i++)
memcached_result_free(results[i]);
}
void doSet(char type, uint32_t seq, IOVec& vec)
Expand Down Expand Up @@ -401,16 +403,18 @@ static void driverStop(ErlDrvData handle)
delete (Driver*)handle;
}

static int driverControl(ErlDrvData drv_data, unsigned int command, char *buf, int len, char **rbuf, int rlen)
static ErlDrvSSizeT driverControl(ErlDrvData drv_data, unsigned int command, char *buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen)
{
return ((Driver*)drv_data)->control(command, buf, len, rbuf, rlen);
}

#if 0
static void driverOutput(ErlDrvData drv_data, char* buf, int len)
{
IOVec vec(buf, len);
((Driver*)drv_data)->output(vec);
}
#endif

static void driverOutputv(ErlDrvData drv_data, ErlIOVec* ev)
{
Expand All @@ -424,14 +428,15 @@ static void driverOutputv(ErlDrvData drv_data, ErlIOVec* ev)
((Driver*)drv_data)->output(vec);
}


ErlDrvEntry driver_entry = {
NULL, /* F_PTR init, N/A */
driverStart, /* L_PTR start, called when port is opened */
driverStop, /* F_PTR stop, called when port is closed */
NULL, //driverOutput, /* F_PTR output, called when erlang has sent */
NULL, /* F_PTR ready_input, called when input descriptor ready */
NULL, /* F_PTR ready_output, called when output descriptor ready */
"memcached_drv", /* char *driver_name, the argument to open_port */
(char*)"memcached_drv", /* char *driver_name, the argument to open_port */
NULL, /* F_PTR finish, called when unloaded */
NULL, /* handle */
driverControl, /* F_PTR control, port_command callback */
Expand All @@ -443,7 +448,7 @@ ErlDrvEntry driver_entry = {
NULL,
ERL_DRV_EXTENDED_MARKER,
ERL_DRV_EXTENDED_MAJOR_VERSION,
ERL_DRV_EXTENDED_MAJOR_VERSION,
ERL_DRV_EXTENDED_MINOR_VERSION,
ERL_DRV_FLAG_USE_PORT_LOCKING
};

Expand Down
Binary file added c_src/memcached_drv.o
Binary file not shown.

0 comments on commit bb0239e

Please sign in to comment.