Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_ipc
Modified Files:
ecore_ipc.c ecore_ipc_private.h
Log Message:
ipc header compression as part of the protocol. this relies on previosu
header states and does delta's. it seems to give me about 50-70% compression
for the headers - not bad. also solved aligned memory access problem waiting
to happen... :)
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- ecore_ipc.c 20 Apr 2004 09:30:59 -0000 1.7
+++ ecore_ipc.c 23 Apr 2004 07:24:38 -0000 1.8
@@ -7,17 +7,170 @@
#include <netinet/in.h>
-typedef struct _Ecore_Ipc_Msg_Head Ecore_Ipc_Msg_Head;
+#define DLT_ZERO 0
+#define DLT_ONE 1
+#define DLT_SAME 2
+#define DLT_SHL 3
+#define DLT_SHR 4
+#define DLT_ADD8 5
+#define DLT_DEL8 6
+#define DLT_ADDU8 7
+#define DLT_DELU8 8
+#define DLT_ADD16 9
+#define DLT_DEL16 10
+#define DLT_ADDU16 11
+#define DLT_DELU16 12
+#define DLT_SET 13
+#define DLT_R1 14
+#define DLT_R2 15
-struct _Ecore_Ipc_Msg_Head
+static int _ecore_ipc_dlt_int(int out, int prev, int *mode);
+static int _ecore_ipc_ddlt_int(int in, int prev, int mode);
+
+static int
+_ecore_ipc_dlt_int(int out, int prev, int *mode)
+{
+ int dlt;
+
+ /* 0 byte */
+ if (out == 0)
+ {
+ *mode = DLT_ZERO;
+ return 0;
+ }
+ if (out == 0xffffffff)
+ {
+ *mode = DLT_ONE;
+ return 0;
+ }
+ if (out == prev)
+ {
+ *mode = DLT_SAME;
+ return 0;
+ }
+ if (out == prev << 1)
+ {
+ *mode = DLT_SHL;
+ return 0;
+ }
+ if (out == prev >> 1)
+ {
+ *mode = DLT_SHR;
+ return 0;
+ }
+ /* 1 byte */
+ dlt = out - prev;
+ if (!(dlt & 0xffffff00))
+ {
+ *mode = DLT_ADD8;
+ return dlt & 0xff;
+ }
+ dlt = prev - out;
+ if (!(dlt & 0xffffff00))
+ {
+ *mode = DLT_DEL8;
+ return dlt & 0xff;
+ }
+ dlt = out - prev;
+ if (!(dlt & 0x00ffffff))
+ {
+ *mode = DLT_ADDU8;
+ return (dlt >> 24) & 0xff;
+ }
+ dlt = prev - out;
+ if (!(dlt & 0x00ffffff))
+ {
+ *mode = DLT_DELU8;
+ return (dlt >> 24) & 0xff;
+ }
+ /* 2 byte */
+ dlt = out - prev;
+ if (!(dlt & 0xffff0000))
+ {
+ *mode = DLT_ADD8;
+ return dlt & 0xfffff;
+ }
+ dlt = prev - out;
+ if (!(dlt & 0xffff0000))
+ {
+ *mode = DLT_DEL8;
+ return dlt & 0xffff;
+ }
+ dlt = out - prev;
+ if (!(dlt & 0x0000ffff))
+ {
+ *mode = DLT_ADDU8;
+ return (dlt >> 16) & 0xffff;
+ }
+ dlt = prev - out;
+ if (!(dlt & 0x0000ffff))
+ {
+ *mode = DLT_DELU8;
+ return (dlt >> 16) & 0xffff;
+ }
+ /* 4 byte */
+ *mode = DLT_SET;
+ return out;
+}
+
+static int
+_ecore_ipc_ddlt_int(int in, int prev, int mode)
{
- int major;
- int minor;
- int ref;
- int ref_to;
- int response;
- int size;
-} __attribute__ ((packed));
+ switch (mode)
+ {
+ case DLT_ZERO:
+ return 0;
+ break;
+ case DLT_ONE:
+ return 0xffffffff;
+ break;
+ case DLT_SAME:
+ return prev;
+ break;
+ case DLT_SHL:
+ return prev << 1;
+ break;
+ case DLT_SHR:
+ return prev >> 1;
+ break;
+ case DLT_ADD8:
+ return prev + in;
+ break;
+ case DLT_DEL8:
+ return prev - in;
+ break;
+ case DLT_ADDU8:
+ return prev + (in << 24);
+ break;
+ case DLT_DELU8:
+ return prev - (in << 24);
+ break;
+ case DLT_ADD16:
+ return prev + in;
+ break;
+ case DLT_DEL16:
+ return prev - in;
+ break;
+ case DLT_ADDU16:
+ return prev + (in << 16);
+ break;
+ case DLT_DELU16:
+ return prev - (in << 16);
+ break;
+ case DLT_SET:
+ return in;
+ break;
+ case DLT_R1:
+ return 0;
+ break;
+ case DLT_R2:
+ return 0;
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
static int _ecore_ipc_event_client_add(void *data, int ev_type, void *ev);
static int _ecore_ipc_event_client_del(void *data, int ev_type, void *ev);
@@ -238,6 +391,38 @@
return ecore_con_server_connected_get(svr->server);
}
+#define SVENC(_member) \
+ d = _ecore_ipc_dlt_int(msg._member, svr->prev.o._member, &md); \
+ if (md >= DLT_SET) \
+ { \
+ unsigned int v; \
+ unsigned char *dd; \
+ dd = (unsigned char *)&v; \
+ v = d; \
+ v = htonl(v); \
+ *(dat + s + 0) = dd[0]; \
+ *(dat + s + 1) = dd[1]; \
+ *(dat + s + 2) = dd[2]; \
+ *(dat + s + 3) = dd[3]; \
+ s += 4; \
+ } \
+ else if (md >= DLT_ADD16) \
+ { \
+ unsigned short v; \
+ unsigned char *dd; \
+ dd = (unsigned char *)&v; \
+ v = d; \
+ v = htons(v); \
+ *(dat + s + 0) = dd[0]; \
+ *(dat + s + 1) = dd[1]; \
+ s += 2; \
+ } \
+ else if (md >= DLT_ADD8) \
+ { \
+ *(dat + s + 0) = (unsigned char)d; \
+ s += 1; \
+ }
+
/**
* To be documented.
*
@@ -248,6 +433,8 @@
{
Ecore_Ipc_Msg_Head msg;
int ret;
+ int *head, md = 0, d, s;
+ unsigned char dat[sizeof(Ecore_Ipc_Msg_Head)];
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
{
@@ -256,17 +443,65 @@
return 0;
}
if (size < 0) size = 0;
- msg.major = htonl(major);
- msg.minor = htonl(minor);
- msg.ref = htonl(ref);
- msg.ref_to = htonl(ref_to);
- msg.response = htonl(response);
- msg.size = htonl(size);
- ret = ecore_con_server_send(svr->server, &msg, sizeof(Ecore_Ipc_Msg_Head));
- if (size > 0) ret |= ecore_con_server_send(svr->server, data, size);
+ msg.major = major;
+ msg.minor = minor;
+ msg.ref = ref;
+ msg.ref_to = ref_to;
+ msg.response = response;
+ msg.size = size;
+ head = (int *)dat;
+ s = 4;
+ SVENC(major);
+ *head = md;
+ SVENC(minor);
+ *head |= md << (4 * 1);
+ SVENC(ref);
+ *head |= md << (4 * 2);
+ SVENC(ref_to);
+ *head |= md << (4 * 3);
+ SVENC(response);
+ *head |= md << (4 * 4);
+ SVENC(size);
+ *head |= md << (4 * 5);
+ *head = htonl(*head);
+ svr->prev.o = msg;
+ ret = ecore_con_server_send(svr->server, dat, s);
+ if (size > 0) ret += ecore_con_server_send(svr->server, data, size);
return ret;
}
+#define CLENC(_member) \
+ d = _ecore_ipc_dlt_int(msg._member, cl->prev.o._member, &md); \
+ if (md >= DLT_SET) \
+ { \
+ unsigned int v; \
+ unsigned char *dd; \
+ dd = (unsigned char *)&v; \
+ v = d; \
+ v = htonl(v); \
+ *(dat + s + 0) = dd[0]; \
+ *(dat + s + 1) = dd[1]; \
+ *(dat + s + 2) = dd[2]; \
+ *(dat + s + 3) = dd[3]; \
+ s += 4; \
+ } \
+ else if (md >= DLT_ADD16) \
+ { \
+ unsigned short v; \
+ unsigned char *dd; \
+ dd = (unsigned char *)&v; \
+ v = d; \
+ v = htons(v); \
+ *(dat + s + 0) = dd[0]; \
+ *(dat + s + 1) = dd[1]; \
+ s += 2; \
+ } \
+ else if (md >= DLT_ADD8) \
+ { \
+ *(dat + s) = (unsigned char)d; \
+ s += 1; \
+ }
+
/**
* To be documented.
*
@@ -277,6 +512,8 @@
{
Ecore_Ipc_Msg_Head msg;
int ret;
+ int *head, md = 0, d, s;
+ unsigned char dat[sizeof(Ecore_Ipc_Msg_Head)];
if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_IPC_CLIENT))
{
@@ -285,14 +522,30 @@
return 0;
}
if (size < 0) size = 0;
- msg.major = htonl(major);
- msg.minor = htonl(minor);
- msg.ref = htonl(ref);
- msg.ref_to = htonl(ref_to);
- msg.response = htonl(response);
- msg.size = htonl(size);
- ret = ecore_con_client_send(cl->client, &msg, sizeof(Ecore_Ipc_Msg_Head));
- if (size > 0) ret |= ecore_con_client_send(cl->client, data, size);
+ msg.major = major;
+ msg.minor = minor;
+ msg.ref = ref;
+ msg.ref_to = ref_to;
+ msg.response = response;
+ msg.size = size;
+ head = (int *)dat;
+ s = 4;
+ CLENC(major);
+ *head = md;
+ CLENC(minor);
+ *head |= md << (4 * 1);
+ CLENC(ref);
+ *head |= md << (4 * 2);
+ CLENC(ref_to);
+ *head |= md << (4 * 3);
+ CLENC(response);
+ *head |= md << (4 * 4);
+ CLENC(size);
+ *head |= md << (4 * 5);
+ *head = htonl(*head);
+ cl->prev.o = msg;
+ ret = ecore_con_client_send(cl->client, dat, s);
+ if (size > 0) ret += ecore_con_client_send(cl->client, data, size);
return ret;
}
@@ -491,6 +744,37 @@
return 0;
}
+#define CLSZ(_n) \
+ md = ((head >> (4 * _n)) & 0xf); \
+ if (md >= DLT_SET) s += 4; \
+ else if (md >= DLT_ADD16) s += 2; \
+ else if (md >= DLT_ADD8) s += 1;
+
+#define CLDEC(_n, _member) \
+ md = ((head >> (4 * _n)) & 0xf); \
+ if (md >= DLT_SET) \
+ { \
+ dd[0] = *(cl->buf + offset + s + 0); \
+ dd[1] = *(cl->buf + offset + s + 1); \
+ dd[2] = *(cl->buf + offset + s + 2); \
+ dd[3] = *(cl->buf + offset + s + 3); \
+ d = ntohl(d); \
+ s += 4; \
+ } \
+ else if (md >= DLT_ADD16) \
+ { \
+ dd[0] = *(cl->buf + offset + s + 0); \
+ dd[1] = *(cl->buf + offset + s + 1); \
+ d = ntohs(d); \
+ s += 2; \
+ } \
+ else if (md >= DLT_ADD8) \
+ { \
+ d = *(cl->buf + offset + s + 0); \
+ s += 1; \
+ } \
+ msg._member = _ecore_ipc_ddlt_int(d, cl->prev.i._member, md);
+
static int
_ecore_ipc_event_client_data(void *data, int ev_type, void *ev)
{
@@ -501,7 +785,9 @@
/* handling code here */
{
Ecore_Ipc_Client *cl;
- Ecore_Ipc_Msg_Head *msg;
+ Ecore_Ipc_Msg_Head msg;
+ int offset = 0;
+ unsigned char *buf;
cl = ecore_con_client_data_get(e->client);
@@ -528,102 +814,143 @@
cl->buf_size += e->size;
}
/* examine header */
- if (cl->buf_size >= sizeof(Ecore_Ipc_Msg_Head))
+ redo:
+ if ((cl->buf_size - offset) >= sizeof(int))
{
- int major, minor, ref, ref_to, response, size;
- int offset = 0;
-
- msg = (Ecore_Ipc_Msg_Head *)(cl->buf + offset);
- major = ntohl(msg->major);
- minor = ntohl(msg->minor);
- ref = ntohl(msg->ref);
- ref_to = ntohl(msg->ref_to);
- response = ntohl(msg->response);
- size = ntohl(msg->size);
- if (size < 0) size = 0;
+ int s, md, d, head;
+ unsigned char *dd;
+
+ dd = (unsigned char *)&head;
+ dd[0] = *(cl->buf + offset + 0);
+ dd[1] = *(cl->buf + offset + 1);
+ dd[2] = *(cl->buf + offset + 2);
+ dd[3] = *(cl->buf + offset + 3);
+ head = ntohl(head);
+ dd = (unsigned char *)&d;
+ s = 4;
+ CLSZ(0);
+ CLSZ(1);
+ CLSZ(2);
+ CLSZ(3);
+ CLSZ(4);
+ CLSZ(5);
+ if ((cl->buf_size - offset) < s)
+ {
+ if (offset > 0) goto scroll;
+ return 0;
+ }
+
+ s = 4;
+ CLDEC(0, major);
+ CLDEC(1, minor);
+ CLDEC(2, ref);
+ CLDEC(3, ref_to);
+ CLDEC(4, response);
+ CLDEC(5, size);
+ if (msg.size < 0) msg.size = 0;
/* there is enough data in the buffer for a full message */
- if (cl->buf_size >= (sizeof(Ecore_Ipc_Msg_Head) + size))
+ if ((cl->buf_size - offset) >= (s + msg.size))
{
- unsigned char *buf;
Ecore_Ipc_Event_Client_Data *e2;
- redo:
buf = NULL;
- if (size > 0)
+ if (msg.size > 0)
{
- buf = malloc(size);
+ buf = malloc(msg.size);
if (!buf) return 0;
- memcpy(buf, cl->buf + offset + sizeof(Ecore_Ipc_Msg_Head),
size);
+ memcpy(buf, cl->buf + offset + s, msg.size);
}
e2 = calloc(1, sizeof(Ecore_Ipc_Event_Client_Data));
if (e2)
{
e2->client = cl;
- e2->major = major;
- e2->minor = minor;
- e2->ref = ref;
- e2->ref_to = ref_to;
- e2->response = response;
- e2->size = size;
+ e2->major = msg.major;
+ e2->minor = msg.minor;
+ e2->ref = msg.ref;
+ e2->ref_to = msg.ref_to;
+ e2->response = msg.response;
+ e2->size = msg.size;
e2->data = buf;
ecore_event_add(ECORE_IPC_EVENT_CLIENT_DATA, e2,
_ecore_ipc_event_client_data_free, NULL);
}
- offset += (sizeof(Ecore_Ipc_Msg_Head) + size);
- if ((cl->buf_size - offset) >= sizeof(Ecore_Ipc_Msg_Head))
- {
- msg = (Ecore_Ipc_Msg_Head *)(cl->buf + offset);
- major = ntohl(msg->major);
- minor = ntohl(msg->minor);
- ref = ntohl(msg->ref);
- ref_to = ntohl(msg->ref_to);
- response = ntohl(msg->response);
- size = ntohl(msg->size);
- if (size < 0) size = 0;
- if ((cl->buf_size - offset) >= (sizeof(Ecore_Ipc_Msg_Head) +
size))
- goto redo;
- }
- /* remove data from our buffer and "scoll" the rest down */
- size = cl->buf_size - offset;
- /* if amount left after scroll is > 0 */
- if (size > 0)
- {
- buf = malloc(size);
- if (!buf)
- {
- free(cl->buf);
- cl->buf = NULL;
- cl->buf_size = 0;
- return 0;
- }
- memcpy(buf, cl->buf + offset, size);
- free(cl->buf);
- cl->buf = buf;
- cl->buf_size = size;
- }
- else
+ cl->prev.i = msg;
+ offset += (s + msg.size);
+ if (cl->buf_size == offset)
{
free(cl->buf);
cl->buf = NULL;
cl->buf_size = 0;
+ return 0;
}
+ goto redo;
+ }
+ else goto scroll;
+ }
+ else
+ {
+ scroll:
+ buf = malloc(cl->buf_size - offset);
+ if (!buf)
+ {
+ free(cl->buf);
+ cl->buf = NULL;
+ cl->buf_size = 0;
+ return 0;
}
+ memcpy(buf, cl->buf + offset, cl->buf_size - offset);
+ free(cl->buf);
+ cl->buf = buf;
+ cl->buf_size -= offset;
}
}
return 0;
}
+#define SVSZ(_n) \
+ md = ((head >> (4 * _n)) & 0xf); \
+ if (md >= DLT_SET) s += 4; \
+ else if (md >= DLT_ADD16) s += 2; \
+ else if (md >= DLT_ADD8) s += 1;
+
+#define SVDEC(_n, _member) \
+ md = ((head >> (4 * _n)) & 0xf); \
+ if (md >= DLT_SET) \
+ { \
+ dd[0] = *(svr->buf + offset + s + 0); \
+ dd[1] = *(svr->buf + offset + s + 1); \
+ dd[2] = *(svr->buf + offset + s + 2); \
+ dd[3] = *(svr->buf + offset + s + 3); \
+ d = ntohl(d); \
+ s += 4; \
+ } \
+ else if (md >= DLT_ADD16) \
+ { \
+ dd[0] = *(svr->buf + offset + s + 0); \
+ dd[1] = *(svr->buf + offset + s + 1); \
+ d = ntohs(d); \
+ s += 2; \
+ } \
+ else if (md >= DLT_ADD8) \
+ { \
+ d = *(svr->buf + offset + s + 0); \
+ s += 1; \
+ } \
+ msg._member = _ecore_ipc_ddlt_int(d, svr->prev.i._member, md);
+
static int
_ecore_ipc_event_server_data(void *data, int ev_type, void *ev)
{
Ecore_Con_Event_Server_Data *e;
-
+
e = ev;
if (!_ecore_list_find(servers, ecore_con_server_data_get(e->server))) return 1;
/* handling code here */
{
- Ecore_Ipc_Server *svr;
- Ecore_Ipc_Msg_Head *msg;
+ Ecore_Ipc_Server *svr;
+ Ecore_Ipc_Msg_Head msg;
+ int offset = 0;
+ unsigned char *buf;
svr = ecore_con_server_data_get(e->server);
@@ -650,86 +977,94 @@
svr->buf_size += e->size;
}
/* examine header */
- if (svr->buf_size >= sizeof(Ecore_Ipc_Msg_Head))
+ redo:
+ if ((svr->buf_size - offset) >= sizeof(int))
{
- int major, minor, ref, ref_to, response, size;
- int offset = 0;
-
- msg = (Ecore_Ipc_Msg_Head *)(svr->buf + offset);
- major = ntohl(msg->major);
- minor = ntohl(msg->minor);
- ref = ntohl(msg->ref);
- ref_to = ntohl(msg->ref_to);
- response = ntohl(msg->response);
- size = ntohl(msg->size);
- if (size < 0) size = 0;
+ int s, md, d, head;
+ unsigned char *dd;
+
+ dd = (unsigned char *)&head;
+ dd[0] = *(svr->buf + offset + 0);
+ dd[1] = *(svr->buf + offset + 1);
+ dd[2] = *(svr->buf + offset + 2);
+ dd[3] = *(svr->buf + offset + 3);
+ head = ntohl(head);
+ dd = (unsigned char *)&d;
+ s = 4;
+ SVSZ(0);
+ SVSZ(1);
+ SVSZ(2);
+ SVSZ(3);
+ SVSZ(4);
+ SVSZ(5);
+ if ((svr->buf_size - offset) < s)
+ {
+ if (offset > 0) goto scroll;
+ return 0;
+ }
+
+ s = 4;
+ SVDEC(0, major);
+ SVDEC(1, minor);
+ SVDEC(2, ref);
+ SVDEC(3, ref_to);
+ SVDEC(4, response);
+ SVDEC(5, size);
+ if (msg.size < 0) msg.size = 0;
/* there is enough data in the buffer for a full message */
- if (svr->buf_size >= (sizeof(Ecore_Ipc_Msg_Head) + size))
+ if ((svr->buf_size - offset) >= (s + msg.size))
{
- unsigned char *buf;
Ecore_Ipc_Event_Server_Data *e2;
- redo:
buf = NULL;
- if (size > 0)
+ if (msg.size > 0)
{
- buf = malloc(size);
+ buf = malloc(msg.size);
if (!buf) return 0;
- memcpy(buf, svr->buf + offset + sizeof(Ecore_Ipc_Msg_Head),
size);
+ memcpy(buf, svr->buf + offset + s, msg.size);
}
e2 = calloc(1, sizeof(Ecore_Ipc_Event_Server_Data));
if (e2)
{
e2->server = svr;
- e2->major = major;
- e2->minor = minor;
- e2->ref = ref;
- e2->ref_to = ref_to;
- e2->response = response;
- e2->size = size;
+ e2->major = msg.major;
+ e2->minor = msg.minor;
+ e2->ref = msg.ref;
+ e2->ref_to = msg.ref_to;
+ e2->response = msg.response;
+ e2->size = msg.size;
e2->data = buf;
ecore_event_add(ECORE_IPC_EVENT_SERVER_DATA, e2,
_ecore_ipc_event_server_data_free, NULL);
}
- offset += (sizeof(Ecore_Ipc_Msg_Head) + size);
- if (svr->buf_size - offset >= sizeof(Ecore_Ipc_Msg_Head))
- {
- msg = (Ecore_Ipc_Msg_Head *)(svr->buf + offset);
- major = ntohl(msg->major);
- minor = ntohl(msg->minor);
- ref = ntohl(msg->ref);
- ref_to = ntohl(msg->ref_to);
- response = ntohl(msg->response);
- size = ntohl(msg->size);
- if (size < 0) size = 0;
- if (svr->buf_size - offset >= (sizeof(Ecore_Ipc_Msg_Head) +
size))
- goto redo;
- }
- /* remove data from our buffer and "scoll" the rest down */
- size = svr->buf_size - offset;
- /* if amount left after scroll is > 0 */
- if (size > 0)
- {
- buf = malloc(size);
- if (!buf)
- {
- free(svr->buf);
- svr->buf = NULL;
- svr->buf_size = 0;
- return 0;
- }
- memcpy(buf, svr->buf + offset, size);
- free(svr->buf);
- svr->buf = buf;
- svr->buf_size = size;
- }
- else
+ svr->prev.i = msg;
+ offset += (s + msg.size);
+ if (svr->buf_size == offset)
{
free(svr->buf);
svr->buf = NULL;
svr->buf_size = 0;
+ return 0;
}
+ goto redo;
+ }
+ else goto scroll;
+ }
+ else
+ {
+ scroll:
+ buf = malloc(svr->buf_size - offset);
+ if (!buf)
+ {
+ free(svr->buf);
+ svr->buf = NULL;
+ svr->buf_size = 0;
+ return 0;
}
+ memcpy(buf, svr->buf + offset, svr->buf_size - offset);
+ free(svr->buf);
+ svr->buf = buf;
+ svr->buf_size -= offset;
}
}
return 0;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc_private.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_ipc_private.h 23 Sep 2003 08:09:31 -0000 1.2
+++ ecore_ipc_private.h 23 Apr 2004 07:24:40 -0000 1.3
@@ -6,7 +6,19 @@
typedef struct _Ecore_Ipc_Client Ecore_Ipc_Client;
typedef struct _Ecore_Ipc_Server Ecore_Ipc_Server;
-
+typedef struct _Ecore_Ipc_Msg_Head Ecore_Ipc_Msg_Head;
+
+struct _Ecore_Ipc_Msg_Head
+{
+ int head;
+ int major;
+ int minor;
+ int ref;
+ int ref_to;
+ int response;
+ int size;
+} __attribute__ ((packed));
+
struct _Ecore_Ipc_Client
{
Ecore_List __list_data;
@@ -15,6 +27,10 @@
void *data;
unsigned char *buf;
int buf_size;
+
+ struct {
+ Ecore_Ipc_Msg_Head i, o;
+ } prev;
};
struct _Ecore_Ipc_Server
@@ -26,6 +42,10 @@
void *data;
unsigned char *buf;
int buf_size;
+
+ struct {
+ Ecore_Ipc_Msg_Head i, o;
+ } prev;
};
#endif
-------------------------------------------------------
This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek
For a limited time only, get FREE Ground shipping on all orders of $35
or more. Hurry up and shop folks, this offer expires April 30th!
http://www.thinkgeek.com/freeshipping/?cpg=12297
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs