OSDN Git Service

Move snd_is_local() to socket.c
authorTakashi Iwai <tiwai@suse.de>
Wed, 30 Nov 2005 11:31:18 +0000 (11:31 +0000)
committerTakashi Iwai <tiwai@suse.de>
Wed, 30 Nov 2005 11:31:18 +0000 (11:31 +0000)
Move snd_is_local() to socket.c since it's used in control_shm, too.

src/pcm/pcm_shm.c
src/socket.c

index f2968a5..ad57f0f 100644 (file)
@@ -778,57 +778,6 @@ int snd_pcm_shm_open(snd_pcm_t **pcmp, const char *name,
        return result;
 }
 
-#ifndef DOC_HIDDEN
-int snd_is_local(struct hostent *hent)
-{
-       int s;
-       int err;
-       struct ifconf conf;
-       size_t numreqs = 10;
-       size_t i;
-       struct in_addr *haddr = (struct in_addr*) hent->h_addr_list[0];
-       
-       s = socket(PF_INET, SOCK_STREAM, 0);
-       if (s < 0) {
-               SYSERR("socket failed");
-               return -errno;
-       }
-       
-       conf.ifc_len = numreqs * sizeof(struct ifreq);
-       conf.ifc_buf = malloc((unsigned int) conf.ifc_len);
-       if (! conf.ifc_buf)
-               return -ENOMEM;
-       while (1) {
-               err = ioctl(s, SIOCGIFCONF, &conf);
-               if (err < 0) {
-                       SYSERR("SIOCGIFCONF failed");
-                       return -errno;
-               }
-               if ((size_t)conf.ifc_len < numreqs * sizeof(struct ifreq))
-                       break;
-               numreqs *= 2;
-               conf.ifc_len = numreqs * sizeof(struct ifreq);
-               conf.ifc_buf = realloc(conf.ifc_buf, (unsigned int) conf.ifc_len);
-               if (! conf.ifc_buf)
-                       return -ENOMEM;
-       }
-       numreqs = conf.ifc_len / sizeof(struct ifreq);
-       for (i = 0; i < numreqs; ++i) {
-               struct ifreq *req = &conf.ifc_req[i];
-               struct sockaddr_in *s_in = (struct sockaddr_in *)&req->ifr_addr;
-               s_in->sin_family = AF_INET;
-               err = ioctl(s, SIOCGIFADDR, req);
-               if (err < 0)
-                       continue;
-               if (haddr->s_addr == s_in->sin_addr.s_addr)
-                       break;
-       }
-       close(s);
-       free(conf.ifc_buf);
-       return i < numreqs;
-}
-#endif
-
 /*! \page pcm_plugins
 
 \section pcm_plugins_shm Plugin: shm
index edf2739..97c919f 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * \file pcm/socket.c
+ * \file socket.c
  * \brief Socket helper routines
  * \author Abramo Bagnara <abramo@alsa-project.org>
  * \date 2003
 #include <sys/socket.h>
 #include <sys/uio.h>
 #include <sys/un.h>
+#include <netinet/in.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <netdb.h>
 #include "local.h"
 
 #ifndef DOC_HIDDEN
@@ -102,4 +106,53 @@ int snd_receive_fd(int sock, void *data, size_t len, int *fd)
        *fd = *fds;
        return ret;
 }
+
+int snd_is_local(struct hostent *hent)
+{
+       int s;
+       int err;
+       struct ifconf conf;
+       size_t numreqs = 10;
+       size_t i;
+       struct in_addr *haddr = (struct in_addr*) hent->h_addr_list[0];
+       
+       s = socket(PF_INET, SOCK_STREAM, 0);
+       if (s < 0) {
+               SYSERR("socket failed");
+               return -errno;
+       }
+       
+       conf.ifc_len = numreqs * sizeof(struct ifreq);
+       conf.ifc_buf = malloc((unsigned int) conf.ifc_len);
+       if (! conf.ifc_buf)
+               return -ENOMEM;
+       while (1) {
+               err = ioctl(s, SIOCGIFCONF, &conf);
+               if (err < 0) {
+                       SYSERR("SIOCGIFCONF failed");
+                       return -errno;
+               }
+               if ((size_t)conf.ifc_len < numreqs * sizeof(struct ifreq))
+                       break;
+               numreqs *= 2;
+               conf.ifc_len = numreqs * sizeof(struct ifreq);
+               conf.ifc_buf = realloc(conf.ifc_buf, (unsigned int) conf.ifc_len);
+               if (! conf.ifc_buf)
+                       return -ENOMEM;
+       }
+       numreqs = conf.ifc_len / sizeof(struct ifreq);
+       for (i = 0; i < numreqs; ++i) {
+               struct ifreq *req = &conf.ifc_req[i];
+               struct sockaddr_in *s_in = (struct sockaddr_in *)&req->ifr_addr;
+               s_in->sin_family = AF_INET;
+               err = ioctl(s, SIOCGIFADDR, req);
+               if (err < 0)
+                       continue;
+               if (haddr->s_addr == s_in->sin_addr.s_addr)
+                       break;
+       }
+       close(s);
+       free(conf.ifc_buf);
+       return i < numreqs;
+}
 #endif