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

Reply via email to