Enlightenment CVS committal Author : raster Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_ipc Modified Files: Tag: SPLIT ecore_ipc.c Log Message: oops... fix. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/Attic/ecore_ipc.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -3 -r1.1.2.3 -r1.1.2.4 --- ecore_ipc.c 6 Aug 2003 02:29:08 -0000 1.1.2.3 +++ ecore_ipc.c 8 Aug 2003 02:54:50 -0000 1.1.2.4 @@ -439,7 +439,7 @@ _ecore_ipc_event_client_data(void *data, int ev_type, void *ev) { Ecore_Con_Event_Client_Data *e; - + e = ev; if (!_ecore_list_find(servers, ecore_con_server_data_get(ecore_con_client_server_get(e->client)))) return 1; /* handling code here */ @@ -472,11 +472,12 @@ cl->buf_size += e->size; } /* examine header */ - msg = (Ecore_Ipc_Msg_Head *)cl->buf; if (cl->buf_size >= sizeof(Ecore_Ipc_Msg_Head)) { int major, minor, ref, ref_to, response, size; - + int offset = 0; + + msg = (Ecore_Ipc_Msg_Head *)cl->buf; major = ntohl(msg->major); minor = ntohl(msg->minor); ref = ntohl(msg->ref); @@ -486,14 +487,16 @@ /* there is enough data in the buffer for a full message */ if (cl->buf_size >= (sizeof(Ecore_Ipc_Msg_Head) + size)) { - unsigned char *buf = NULL; + unsigned char *buf; Ecore_Ipc_Event_Client_Data *e2; + redo: + buf = NULL; if (size > 0) { buf = malloc(size); if (!buf) return 0; - memcpy(buf, cl->buf + sizeof(Ecore_Ipc_Msg_Head), size); + memcpy(buf, cl->buf + offset + sizeof(Ecore_Ipc_Msg_Head), size); } e2 = calloc(1, sizeof(Ecore_Ipc_Event_Client_Data)); if (e2) @@ -509,8 +512,21 @@ 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; + 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 (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 - size - sizeof(Ecore_Ipc_Msg_Head); + size = cl->buf_size - offset; /* if amount left after scroll is > 0 */ if (size > 0) { @@ -522,7 +538,7 @@ cl->buf_size = 0; return 0; } - memcpy(buf, cl->buf + size + sizeof(Ecore_Ipc_Msg_Head), size); + memcpy(buf, cl->buf + offset + sizeof(Ecore_Ipc_Msg_Head), size); free(cl->buf); cl->buf = buf; cl->buf_size = size; @@ -576,11 +592,12 @@ svr->buf_size += e->size; } /* examine header */ - msg = (Ecore_Ipc_Msg_Head *)svr->buf; if (svr->buf_size >= sizeof(Ecore_Ipc_Msg_Head)) { int major, minor, ref, ref_to, response, size; - + int offset = 0; + + msg = (Ecore_Ipc_Msg_Head *)svr->buf; major = ntohl(msg->major); minor = ntohl(msg->minor); ref = ntohl(msg->ref); @@ -590,14 +607,16 @@ /* there is enough data in the buffer for a full message */ if (svr->buf_size >= (sizeof(Ecore_Ipc_Msg_Head) + size)) { - unsigned char *buf = NULL; + unsigned char *buf; Ecore_Ipc_Event_Server_Data *e2; + redo: + buf = NULL; if (size > 0) { buf = malloc(size); if (!buf) return 0; - memcpy(buf, svr->buf + sizeof(Ecore_Ipc_Msg_Head), size); + memcpy(buf, svr->buf + offset + sizeof(Ecore_Ipc_Msg_Head), size); } e2 = calloc(1, sizeof(Ecore_Ipc_Event_Server_Data)); if (e2) @@ -613,8 +632,21 @@ 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; + 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 (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 - size - sizeof(Ecore_Ipc_Msg_Head); + size = svr->buf_size - offset; /* if amount left after scroll is > 0 */ if (size > 0) { @@ -626,7 +658,7 @@ svr->buf_size = 0; return 0; } - memcpy(buf, svr->buf + size + sizeof(Ecore_Ipc_Msg_Head), size); + memcpy(buf, svr->buf + offset + sizeof(Ecore_Ipc_Msg_Head), size); free(svr->buf); svr->buf = buf; svr->buf_size = size; @@ -639,25 +671,6 @@ } } } -#if 0 - Ecore_Ipc_Server *svr; - - svr = ecore_con_server_data_get(e->server); - { - Ecore_Ipc_Event_Server_Data *e2; - - e2 = calloc(1, sizeof(Ecore_Ipc_Event_Server_Data)); - if (e2) - { - e2->server = svr; - e2->size = e->size; - e2->data = e->data; - e->data = NULL; /* take it out of the old event */ - ecore_event_add(ECORE_IPC_EVENT_SERVER_DATA, e2, - _ecore_ipc_event_server_data_free, NULL); - } - } -#endif } return 0; } ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs