| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "nacl_io/kernel_proxy.h" | 5 #include "nacl_io/kernel_proxy.h" |
| 6 | 6 |
| 7 #include <assert.h> | 7 #include <assert.h> |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <fcntl.h> | 9 #include <fcntl.h> |
| 10 #include <limits.h> | 10 #include <limits.h> |
| (...skipping 1806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1817 if (AF_INET == domain || AF_INET6 == domain) { | 1817 if (AF_INET == domain || AF_INET6 == domain) { |
| 1818 errno = EOPNOTSUPP; | 1818 errno = EOPNOTSUPP; |
| 1819 return -1; | 1819 return -1; |
| 1820 } | 1820 } |
| 1821 | 1821 |
| 1822 if (AF_UNIX != domain) { | 1822 if (AF_UNIX != domain) { |
| 1823 errno = EAFNOSUPPORT; | 1823 errno = EAFNOSUPPORT; |
| 1824 return -1; | 1824 return -1; |
| 1825 } | 1825 } |
| 1826 | 1826 |
| 1827 if (SOCK_STREAM != type) { | 1827 // TODO(cernekee): mask this off with SOCK_TYPE_MASK first. |
| 1828 if (SOCK_STREAM != type && SOCK_DGRAM != type) { |
| 1828 errno = EPROTOTYPE; | 1829 errno = EPROTOTYPE; |
| 1829 return -1; | 1830 return -1; |
| 1830 } | 1831 } |
| 1831 | 1832 |
| 1832 int open_flags = O_RDWR; | 1833 int open_flags = O_RDWR; |
| 1833 | 1834 |
| 1834 #if defined(SOCK_CLOEXEC) | 1835 #if defined(SOCK_CLOEXEC) |
| 1835 if (type & SOCK_CLOEXEC) { | 1836 if (type & SOCK_CLOEXEC) { |
| 1836 #if defined(O_CLOEXEC) | 1837 #if defined(O_CLOEXEC) |
| 1837 // The NaCl newlib version of fcntl.h doesn't currently define | 1838 // The NaCl newlib version of fcntl.h doesn't currently define |
| 1838 // O_CLOEXEC. | 1839 // O_CLOEXEC. |
| 1839 // TODO(sbc): remove this guard once it gets added. | 1840 // TODO(sbc): remove this guard once it gets added. |
| 1840 open_flags |= O_CLOEXEC; | 1841 open_flags |= O_CLOEXEC; |
| 1841 #endif | 1842 #endif |
| 1842 type &= ~SOCK_CLOEXEC; | 1843 type &= ~SOCK_CLOEXEC; |
| 1843 } | 1844 } |
| 1844 #endif | 1845 #endif |
| 1845 | 1846 |
| 1846 #if defined(SOCK_NONBLOCK) | 1847 #if defined(SOCK_NONBLOCK) |
| 1847 if (type & SOCK_NONBLOCK) { | 1848 if (type & SOCK_NONBLOCK) { |
| 1848 open_flags |= O_NONBLOCK; | 1849 open_flags |= O_NONBLOCK; |
| 1849 type &= ~SOCK_NONBLOCK; | 1850 type &= ~SOCK_NONBLOCK; |
| 1850 } | 1851 } |
| 1851 #endif | 1852 #endif |
| 1852 | 1853 |
| 1853 UnixNode* socket = new UnixNode(stream_fs_.get()); | 1854 UnixNode* socket = new UnixNode(stream_fs_.get(), type); |
| 1854 Error rtn = socket->Init(O_RDWR); | 1855 Error rtn = socket->Init(O_RDWR); |
| 1855 if (rtn != 0) { | 1856 if (rtn != 0) { |
| 1856 errno = rtn; | 1857 errno = rtn; |
| 1857 return -1; | 1858 return -1; |
| 1858 } | 1859 } |
| 1859 ScopedNode node0(socket); | 1860 ScopedNode node0(socket); |
| 1860 socket = new UnixNode(stream_fs_.get(), *socket); | 1861 socket = new UnixNode(stream_fs_.get(), *socket); |
| 1861 rtn = socket->Init(O_RDWR); | 1862 rtn = socket->Init(O_RDWR); |
| 1862 if (rtn != 0) { | 1863 if (rtn != 0) { |
| 1863 errno = rtn; | 1864 errno = rtn; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1895 errno = ENOTSOCK; | 1896 errno = ENOTSOCK; |
| 1896 return -1; | 1897 return -1; |
| 1897 } | 1898 } |
| 1898 | 1899 |
| 1899 return 0; | 1900 return 0; |
| 1900 } | 1901 } |
| 1901 | 1902 |
| 1902 #endif // PROVIDES_SOCKET_API | 1903 #endif // PROVIDES_SOCKET_API |
| 1903 | 1904 |
| 1904 } // namespace_nacl_io | 1905 } // namespace_nacl_io |
| OLD | NEW |