add checking routine 'recv' function's return value
authorjihye kim <jihye1128.kim@samsung.com>
Mon, 5 Nov 2012 11:23:28 +0000 (20:23 +0900)
committerjihye kim <jihye1128.kim@samsung.com>
Mon, 5 Nov 2012 11:23:28 +0000 (20:23 +0900)
debian/changelog
debian/control
packaging/emuld.spec
src/emuld.c

index 787e510dd05e03695aef0115e6034519aa8f71fe..5108c36ba24de3d59edb3cfc189758f0f713ff0e 100644 (file)
@@ -1,3 +1,11 @@
+emuld (0.2.20) unstable; urgency=low
+
+  * add checking routine 'recv' function's return value
+  * Git: slp/pkgs/e/emulator-daemon
+  * Tag: emuld_0.2.20
+
+ -- Jihye kim <jihye1128.kim@samsung.com> Mon, 04 Nov 2012 20:00:18 +0900
+
 emuld (0.2.18) unstable; urgency=low
 
   * fixed hang up when sending packet vmodem to eventinjector
index 1af04faf03f6b2a8c8a83a119c150f025a5a5766..685dbb78aacb9808637859f63c36ad9b50693810 100644 (file)
@@ -2,7 +2,7 @@ Source: emuld
 Section: misc
 Priority: extra
 Maintainer:Sungmin Ha <sungmin82.ha@samsung.com>,Jihye Kim <jihye1128.kim@samsung.com>,Yeongkyoon Lee <yeongkyoon.lee@samsung.com>
-Standards-Version: 0.2.18
+Standards-Version: 0.2.20
 
 Package: emuld
 Section: misc
index 1437b4ef68301563ee4989cef55c311757e742a0..3ea88e8b18567bd7b4cffae94574eed9d229ca0e 100644 (file)
@@ -1,6 +1,6 @@
 #git:/slp/pkgs/e/emulator-daemon
 Name: emuld
-Version: 0.2.19
+Version: 0.2.20
 Release: 1
 Summary: emuld is used for communication emulator between and ide.
 License: Apache
index 28f0b1c6091c385ac489578934be651818f2f012..80eb768737a15479d521c13fd3bbaa2edf0bf766 100644 (file)
@@ -490,13 +490,18 @@ int recv_data(int event_fd, char** r_databuf, int size)
 
        while(recvd_size < size)
        {
-               memset(r_tmpbuf, '\0', sizeof(char) * size);
+               memset(r_tmpbuf, '\0', sizeof(char) * size + 1);
                len = recv(event_fd, r_tmpbuf, size - recvd_size, 0);
+               if (len < 0) {
+                       break;
+               }
+
                memcpy((*r_databuf) + recvd_size, r_tmpbuf, len);
                recvd_size += len;
                getcnt++;
-               if(getcnt > MAX_GETCNT)
+               if(getcnt > MAX_GETCNT) {
                        break;
+               }
        }
        free(r_tmpbuf);
        r_tmpbuf = NULL;
@@ -548,17 +553,18 @@ void client_recv(int event_fd)
        LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
        memset(packet, 0, sizeof(LXT_MESSAGE));
 
-       LOG("start");
+       LOG("start (event fd: %d)", event_fd);
        /* there need to be more precise code here */ 
        /* for example , packet check(protocol needed) , real recv size check , etc. */
+       if (event_fd == -1) {
+               return;
+       }
 
        // vmodem to event injector
        if(event_fd == g_vm_sockfd)
        {       
                recvd_size = recv_data(event_fd, &r_databuf, HEADER_SIZE);
-
-               LOG("recv_len: %d, vmodem header recv buffer: %s", recvd_size, r_databuf);
-
+               LOG("receive size: %d", recvd_size);
                if(recvd_size <= 0)
                {
                        free(r_databuf);
@@ -572,6 +578,7 @@ void client_recv(int event_fd)
                        return;
                }
 
+               LOG("vmodem header recv buffer: %s", r_databuf);
                memcpy((void*)packet, (void*)r_databuf, sizeof(char) * HEADER_SIZE);
 
                LOG("first packet of vmodem to event injector %s", r_databuf);
@@ -620,10 +627,7 @@ void client_recv(int event_fd)
                /* read from socket */
                // read identifier
                recvd_size = recv_data(event_fd, &r_databuf, ID_SIZE);
-
-               LOG("Something may be added in the data end, but it does not matter.");
-               LOG("identifier: %s", r_databuf);
-
+               LOG("receive size: %d", recvd_size);
                if( recvd_size <= 0 )
                {
                        free(r_databuf);
@@ -637,6 +641,9 @@ void client_recv(int event_fd)
                        return;
                }
 
+               LOG("Something may be added in the data end, but it does not matter.");
+               LOG("identifier: %s", r_databuf);
+
                memset(tmpbuf, '\0', sizeof(tmpbuf));
                parse_len = parse_val(r_databuf, 0x0a, tmpbuf);
 
@@ -683,9 +690,6 @@ void client_recv(int event_fd)
 
                        recvd_size = recv_data(event_fd, &r_databuf, packet->length);
 
-                       LOG("Something may be added in the data end, but it does not matter.");
-                       LOG("telephony data recv buffer: %s", r_databuf);
-
                        if(recvd_size <= 0)
                        {
                                free(r_databuf);
@@ -693,9 +697,12 @@ void client_recv(int event_fd)
                                free(packet);
                                packet = NULL;
                                return;
-                       }
-                       else
+                       } else {
+                               LOG("Something may be added in the data end, but it does not matter.");
+                               LOG("telephony data recv buffer: %s", r_databuf);
+
                                len = send(g_vm_sockfd, r_databuf, packet->length, 0);
+                       }
                }
                else if(strncmp(tmpbuf, "sensor", 6) == 0)
                {