OSDN Git Service

Types size fixes
authorAbramo Bagnara <abramo@alsa-project.org>
Thu, 31 Aug 2000 13:31:46 +0000 (13:31 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Thu, 31 Aug 2000 13:31:46 +0000 (13:31 +0000)
include/aserver.h
src/aserver/aserver.c
src/pcm/pcm_client.c

index 428ec28..7c477fa 100644 (file)
@@ -65,7 +65,7 @@ typedef struct {
 
 typedef struct {
        long result;
-       long cookie;
+       int cookie;
 } snd_client_open_answer_t;
 
 struct cmsg_fd
index edc749a..f4234ab 100644 (file)
@@ -110,36 +110,40 @@ int make_inet_socket(int port)
 int send_fd(int socket, void *data, size_t len, int fd)
 {
     int ret;
-    struct cmsg_fd cmsg;
+    size_t cmsg_len = CMSG_LEN(sizeof(int));
+    struct cmsghdr *cmsg = alloca(cmsg_len);
+    int *fds = (int *) CMSG_DATA(cmsg);
     struct msghdr msghdr;
     struct iovec vec;
 
     vec.iov_base = (void *)&data;
     vec.iov_len = len;
 
-    cmsg.len = sizeof(cmsg);
-    cmsg.level = SOL_SOCKET;
-    cmsg.type = SCM_RIGHTS;
-    cmsg.fd = fd;
+    cmsg->cmsg_len = cmsg_len;
+    cmsg->cmsg_level = SOL_SOCKET;
+    cmsg->cmsg_type = SCM_RIGHTS;
+    *fds = fd;
 
     msghdr.msg_name = NULL;
     msghdr.msg_namelen = 0;
     msghdr.msg_iov = &vec;
     msghdr.msg_iovlen = 1;
-    msghdr.msg_control = &cmsg;
-    msghdr.msg_controllen = sizeof(cmsg);
+    msghdr.msg_control = cmsg;
+    msghdr.msg_controllen = cmsg_len;
     msghdr.msg_flags = 0;
 
     ret = sendmsg(socket, &msghdr, 0 );
-    if (ret < 0)
+    if (ret < 0) {
+           perrno("sendmsg");
            return -errno;
+    }
     return ret;
 }
 
 typedef struct client client_t;
 
 typedef struct {
-       int (*open)(client_t *client, long *cookie);
+       int (*open)(client_t *client, int *cookie);
        int (*cmd)(client_t *client);
        int (*close)(client_t *client);
        int (*poll_prepare)(client_t *client, struct pollfd *pfds, int pindex);
@@ -198,7 +202,7 @@ struct client {
 client_t clients[CLIENTS_MAX];
 int clients_count = 0;
 
-int pcm_shm_open(client_t *client, long *cookie)
+int pcm_shm_open(client_t *client, int *cookie)
 {
        int shmid;
        snd_pcm_t *pcm;
@@ -566,8 +570,6 @@ void snd_client_open(client_t *client)
        }
 
  _answer:
-       ans.result = htonl(ans.result);
-       ans.cookie = htonl(ans.cookie);
        err = write(client->ctrl.fd, &ans, sizeof(ans));
        if (err != sizeof(ans)) {
                perrno("write");
index 3106905..ed72f53 100644 (file)
@@ -51,30 +51,32 @@ typedef struct {
 int receive_fd(int socket, void *data, size_t len, int *fd)
 {
     int ret;
-    struct cmsg_fd cmsg;
+    size_t cmsg_len = CMSG_LEN(sizeof(int));
+    struct cmsghdr *cmsg = alloca(cmsg_len);
+    int *fds = (int *) CMSG_DATA(cmsg);
     struct msghdr msghdr;
     struct iovec vec;
 
     vec.iov_base = (void *)&data;
     vec.iov_len = len;
 
-    cmsg.len  = sizeof(cmsg);
-    cmsg.level = SOL_SOCKET;
-    cmsg.type = SCM_RIGHTS;
-    cmsg.fd = -1;
+    cmsg->cmsg_len = cmsg_len;
+    cmsg->cmsg_level = SOL_SOCKET;
+    cmsg->cmsg_type = SCM_RIGHTS;
+    *fds = -1;
 
     msghdr.msg_name = NULL;
     msghdr.msg_namelen = 0;
     msghdr.msg_iov = &vec;
     msghdr.msg_iovlen = 1;
-    msghdr.msg_control = &cmsg;
-    msghdr.msg_controllen = sizeof(cmsg);
+    msghdr.msg_control = cmsg;
+    msghdr.msg_controllen = cmsg_len;
     msghdr.msg_flags = 0;
 
     ret = recvmsg(socket, &msghdr, 0);
     if (ret < 0)
            return -errno;
-    *fd = cmsg.fd;
+    *fd = *fds;
     return ret;
 }
 
@@ -782,8 +784,7 @@ int snd_pcm_client_create(snd_pcm_t **handlep, char *host, int port, int transpo
                result = -EINVAL;
                goto _err;
        }
-       result = ntohl(ans.result);
-       ans.cookie = ntohl(ans.cookie);
+       result = ans.result;
        if (result < 0)
                goto _err;