# include "config.h"
#endif
-#define _WIN32_WINNT 0x0501
#include <vlc_common.h>
#include <stdlib.h>
# define SOL_DCCP 269
#endif
+#include "libvlc.h" /* vlc_object_waitpipe */
+
extern int rootwrap_bind (int family, int socktype, int protocol,
const struct sockaddr *addr, size_t alen);
*****************************************************************************/
ssize_t
__net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
- uint8_t *restrict p_buf, size_t i_buflen, bool waitall)
+ void *restrict p_buf, size_t i_buflen, bool waitall)
{
size_t i_total = 0;
struct pollfd ufd[2] = {
break; // EOF
i_total += n;
- p_buf += n;
+ p_buf = (char *)p_buf + n;
i_buflen -= n;
if (!waitall)
/* Write exact amount requested */
ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs,
- const uint8_t *p_data, size_t i_data )
+ const void *restrict p_data, size_t i_data )
{
size_t i_total = 0;
struct pollfd ufd[2] = {
ufd[0].revents = ufd[1].revents = 0;
- if (poll (ufd, 1, -1) == -1)
+ if (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), -1) == -1)
{
if (errno == EINTR)
continue;
break;
}
- p_data += val;
+ p_data = (const char *)p_data + val;
i_data -= val;
i_total += val;
}
return -1;
}
+/**
+ * Reads a line from a file descriptor.
+ * This function is not thread-safe; the same file descriptor cI/O annot be read
+ * by another thread at the same time (although it can be written to).
+ *
+ * @return nul-terminated heap-allocated string, or NULL on I/O error.
+ */
char *__net_Gets( vlc_object_t *p_this, int fd, const v_socket_t *p_vs )
{
char *psz_line = NULL, *ptr = NULL;
ptr = psz_line + i_line;
}
- if( net_Read( p_this, fd, p_vs, (uint8_t *)ptr, 1, true ) != 1 )
+ if( net_Read( p_this, fd, p_vs, ptr, 1, true ) != 1 )
{
if( i_line == 0 )
{
char *psz;
int i_ret;
- size_t i_size = vasprintf( &psz, psz_fmt, args );
+ int i_size = vasprintf( &psz, psz_fmt, args );
if( i_size == -1 )
return -1;
- i_ret = __net_Write( p_this, fd, p_vs, (uint8_t *)psz, i_size ) < i_size
+ i_ret = __net_Write( p_this, fd, p_vs, psz, i_size ) < i_size
? -1 : i_size;
free( psz );
return i_ret;
}
-
-/*****************************************************************************
- * inet_pton replacement for obsolete and/or crap operating systems
- *****************************************************************************/
-int vlc_inet_pton(int af, const char *src, void *dst)
-{
-#ifndef HAVE_INET_PTON
- /* Windows Vista has inet_pton(), but not XP. */
- /* We have a pretty good example of abstraction inversion here... */
- struct addrinfo hints = {
- .ai_family = af,
- .ai_socktype = SOCK_DGRAM, /* make sure we have... */
- .ai_protocol = IPPROTO_UDP, /* ...only one response */
- .ai_flags = AI_NUMERICHOST,
- }, *res;
-
- if (getaddrinfo (src, NULL, &hints, &res))
- return -1;
-
- const void *data;
- size_t len;
-
- switch (af)
- {
- case AF_INET:
- data = &((const struct sockaddr_in *)res->ai_addr)->sin_addr;
- len = 4;
- break;
-#ifdef AF_INET6
- case AF_INET6:
- data = &((const struct sockaddr_in6 *)res->ai_addr)->sin6_addr;
- len = 16;
- break;
-#endif
- default:
- errno = EAFNOSUPPORT;
- return -1;
- }
- memcpy (dst, data, len);
- return 0;
-#else /* HAVE_INET_PTON */
- return inet_pton( af, src, dst );
-#endif /* HAVE_INET_PTON */
-}
-
-const char *vlc_inet_ntop(int af, const void * src,
- char * dst, socklen_t cnt)
-{
-#ifndef HAVE_INET_NTOP
-#ifdef WIN32
- switch( af )
- {
-#ifdef AF_INET6
- case AF_INET6:
- {
- struct sockaddr_in6 addr;
- memset(&addr, 0, sizeof(addr));
- addr.sin6_family = AF_INET6;
- addr.sin6_addr = *((struct in6_addr*)src);
- if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr,
- sizeof(struct sockaddr_in6),
- NULL, dst, &cnt) )
- {
- dst[cnt] = '\0';
- return dst;
- }
- errno = WSAGetLastError();
- return NULL;
-
- }
-
-#endif
- case AF_INET:
- {
- struct sockaddr_in addr;
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr = *((struct in_addr*)src);
- if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr,
- sizeof(struct sockaddr_in),
- NULL, dst, &cnt) )
- {
- dst[cnt] = '\0';
- return dst;
- }
- errno = WSAGetLastError();
- return NULL;
-
- }
- }
- errno = EAFNOSUPPORT;
- return NULL;
-#else /* WIN32 */
- return NULL;
-#endif /* WIN32 */
-#else /* HAVE_INET_NTOP */
- return inet_ntop( af, src, dst, cnt );
-#endif /* HAVE_INET_NTOP */
-}
-
#ifdef WIN32
/* vlc_sendmsg, vlc_recvmsg Defined in winsock.c */
#else /* !WIN32 */