diff options
Diffstat (limited to 'contrib/ffmpeg/libavformat/os_support.c')
-rw-r--r-- | contrib/ffmpeg/libavformat/os_support.c | 114 |
1 files changed, 51 insertions, 63 deletions
diff --git a/contrib/ffmpeg/libavformat/os_support.c b/contrib/ffmpeg/libavformat/os_support.c index 7a4be8fa7..cc109d596 100644 --- a/contrib/ffmpeg/libavformat/os_support.c +++ b/contrib/ffmpeg/libavformat/os_support.c @@ -21,90 +21,69 @@ */ #include "config.h" #include "avformat.h" -#if defined(CONFIG_WINCE) -/* Skip includes on WinCE. */ -#elif defined(__MINGW32__) -#include <sys/types.h> -#include <sys/timeb.h> -#elif defined(CONFIG_OS2) -#include <string.h> -#include <sys/time.h> -#else #include <unistd.h> #include <fcntl.h> -#include <sys/time.h> -#endif -#include <time.h> +#include "os_support.h" -#ifndef HAVE_SYS_POLL_H -#if defined(__MINGW32__) +#ifdef CONFIG_NETWORK +#ifndef HAVE_POLL_H +#ifdef HAVE_WINSOCK2_H #include <winsock2.h> -#else +#elif defined (HAVE_SYS_SELECT_H) #include <sys/select.h> #endif #endif -/** - * gets the current time in micro seconds. - */ -int64_t av_gettime(void) -{ -#if defined(CONFIG_WINCE) - return timeGetTime() * INT64_C(1000); -#elif defined(__MINGW32__) - struct timeb tb; - _ftime(&tb); - return ((int64_t)tb.time * INT64_C(1000) + (int64_t)tb.millitm) * INT64_C(1000); -#else - struct timeval tv; - gettimeofday(&tv,NULL); - return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec; -#endif -} - -#if !defined(CONFIG_WINCE) && !defined(HAVE_LOCALTIME_R) -struct tm *localtime_r(const time_t *t, struct tm *tp) -{ - struct tm *l; - - l = localtime(t); - if (!l) - return 0; - *tp = *l; - return tp; -} -#endif /* !defined(CONFIG_WINCE) && !defined(HAVE_LOCALTIME_R) */ +#include "network.h" -#if !defined(HAVE_INET_ATON) && defined(CONFIG_NETWORK) +#if !defined(HAVE_INET_ATON) #include <stdlib.h> #include <strings.h> -#include "network.h" int inet_aton (const char * str, struct in_addr * add) { - const char * pch = str; unsigned int add1 = 0, add2 = 0, add3 = 0, add4 = 0; - add1 = atoi(pch); - pch = strpbrk(pch,"."); - if (pch == 0 || ++pch == 0) goto done; - add2 = atoi(pch); - pch = strpbrk(pch,"."); - if (pch == 0 || ++pch == 0) goto done; - add3 = atoi(pch); - pch = strpbrk(pch,"."); - if (pch == 0 || ++pch == 0) goto done; - add4 = atoi(pch); - -done: + if (sscanf(str, "%d.%d.%d.%d", &add1, &add2, &add3, &add4) != 4) + return 0; + + if (!add1 || (add1|add2|add3|add4) > 255) return 0; + add->s_addr=(add4<<24)+(add3<<16)+(add2<<8)+add1; return 1; } -#endif /* !defined(HAVE_INET_ATON) && defined(CONFIG_NETWORK) */ +#endif /* !defined(HAVE_INET_ATON) */ + +/* resolve host with also IP address parsing */ +int resolve_host(struct in_addr *sin_addr, const char *hostname) +{ + struct hostent *hp; + + if (!inet_aton(hostname, sin_addr)) { + hp = gethostbyname(hostname); + if (!hp) + return -1; + memcpy(sin_addr, hp->h_addr, sizeof(struct in_addr)); + } + return 0; +} + +int ff_socket_nonblock(int socket, int enable) +{ +#ifdef HAVE_WINSOCK2_H + return ioctlsocket(socket, FIONBIO, &enable); +#else + if (enable) + return fcntl(socket, F_SETFL, fcntl(socket, F_GETFL) | O_NONBLOCK); + else + return fcntl(socket, F_SETFL, fcntl(socket, F_GETFL) & ~O_NONBLOCK); +#endif +} +#endif /* CONFIG_NETWORK */ #ifdef CONFIG_FFSERVER -#ifndef HAVE_SYS_POLL_H +#ifndef HAVE_POLL_H int poll(struct pollfd *fds, nfds_t numfds, int timeout) { fd_set read_set; @@ -114,6 +93,13 @@ int poll(struct pollfd *fds, nfds_t numfds, int timeout) int n; int rc; +#ifdef HAVE_WINSOCK2_H + if (numfds >= FD_SETSIZE) { + errno = EINVAL; + return -1; + } +#endif + FD_ZERO(&read_set); FD_ZERO(&write_set); FD_ZERO(&exception_set); @@ -122,10 +108,12 @@ int poll(struct pollfd *fds, nfds_t numfds, int timeout) for(i = 0; i < numfds; i++) { if (fds[i].fd < 0) continue; +#ifndef HAVE_WINSOCK2_H if (fds[i].fd >= FD_SETSIZE) { errno = EINVAL; return -1; } +#endif if (fds[i].events & POLLIN) FD_SET(fds[i].fd, &read_set); if (fds[i].events & POLLOUT) FD_SET(fds[i].fd, &write_set); @@ -162,6 +150,6 @@ int poll(struct pollfd *fds, nfds_t numfds, int timeout) return rc; } -#endif /* HAVE_SYS_POLL_H */ +#endif /* HAVE_POLL_H */ #endif /* CONFIG_FFSERVER */ |