socsvn commit: r253795 - soc2013/dpl/head/contrib/bzip2

dpl at FreeBSD.org dpl at FreeBSD.org
Mon Jul 1 16:22:46 UTC 2013


Author: dpl
Date: Mon Jul  1 16:22:45 2013
New Revision: 253795
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253795

Log:
  Changed sendfd to use malloc(). Still not working tough.
  

Modified:
  soc2013/dpl/head/contrib/bzip2/bzip2.c

Modified: soc2013/dpl/head/contrib/bzip2/bzip2.c
==============================================================================
--- soc2013/dpl/head/contrib/bzip2/bzip2.c	Mon Jul  1 15:12:05 2013	(r253794)
+++ soc2013/dpl/head/contrib/bzip2/bzip2.c	Mon Jul  1 16:22:45 2013	(r253795)
@@ -228,11 +228,13 @@
 int sendfd(int, int);
 int recvfd(int);
 
+#define DATALEN CMSG_LEN(sizeof(int))
+
 int
 sendfd(int s, int fd)
 {
    struct msghdr msg;   
-   struct cmsghdr cmsg;
+   struct cmsghdr *cmsg;
    struct iovec io[1];
    char buf = { "!" };
    int ret;
@@ -240,22 +242,25 @@
    io[0].iov_base = buf;
    io[0].iov_len = 1;
 
+   if( (cmsg = malloc(DATALEN) ) == NULL )
+      return -1;
+
    msg.msg_name = NULL;
    msg.msg_namelen = 0;
    msg.msg_iov = io;
    msg.msg_iovlen = 1;
-   msg.msg_control = &cmsg;
-   msg.msg_controllen = CMSG_LEN(sizeof(int));
+   msg.msg_control =cmsg;
+   msg.msg_controllen = DATALEN;
 
-   cmsg.cmsg_len = msg.msg_controllen;
-   cmsg.cmsg_level = SOL_SOCKET;
-   cmsg.cmsg_type = SCM_RIGHTS;
-   *(int *)CMSG_DATA(&cmsg) = fd;
-   printf("sendmsg(%d, %p, 0)\n",s, &msg);
+   cmsg->cmsg_len = DATALEN;
+   cmsg->cmsg_level = SOL_SOCKET;
+   cmsg->cmsg_type = SCM_RIGHTS;
+   *(int *)CMSG_DATA(cmsg) = fd;
    if( (ret = sendmsg(s, &msg, 0)) <= 0){
-      printf("sendmsg() returned: %d\n", ret);
+      printf("sendmsg() returned: %d (%s)\n", ret, strerror(errno));
       return -1;
    }
+   free(cmsg);
    return 0;
 }
 
@@ -276,9 +281,9 @@
    msg.msg_iov = io;
    msg.msg_iovlen = 1;
    msg.msg_control = &cmsg;
-   msg.msg_controllen = CMSG_LEN(sizeof(int));
+   msg.msg_controllen = DATALEN;
 
-   cmsg.cmsg_len = msg.msg_controllen;
+   cmsg.cmsg_len = DATALEN;
    cmsg.cmsg_level = SOL_SOCKET;
    cmsg.cmsg_type = SCM_RIGHTS;
    /*Why does sendmsg set errno to 9 EBADF??*/


More information about the svn-soc-all mailing list