mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	Add a wrapper around close() to work around Windows' ass backwards way of
handling sockets. git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1429 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
		
							parent
							
								
									8bf7943e8e
								
							
						
					
					
						commit
						df47c7b828
					
				
					 7 changed files with 45 additions and 24 deletions
				
			
		| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2004-2006 Lennart Poettering
 | 
					  Copyright 2004-2006 Lennart Poettering
 | 
				
			||||||
  Copyright 2004 Joe Marcus Clarke
 | 
					  Copyright 2004 Joe Marcus Clarke
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as
 | 
					  it under the terms of the GNU Lesser General Public License as
 | 
				
			||||||
| 
						 | 
					@ -348,6 +348,26 @@ ssize_t pa_loop_write(int fd, const void*data, size_t size, int *type) {
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Platform independent read function. Necessary since not all
 | 
				
			||||||
 | 
					 * systems treat all file descriptors equal. */
 | 
				
			||||||
 | 
					int pa_close(int fd)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef OS_IS_WIN32
 | 
				
			||||||
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ret = closesocket(fd);
 | 
				
			||||||
 | 
					    if (ret == 0)
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (WSAGetLastError() != WSAENOTSOCK) {
 | 
				
			||||||
 | 
					        errno = WSAGetLastError();
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return close(fd);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Print a warning messages in case that the given signal is not
 | 
					/* Print a warning messages in case that the given signal is not
 | 
				
			||||||
 * blocked or trapped */
 | 
					 * blocked or trapped */
 | 
				
			||||||
void pa_check_signal_is_blocked(int sig) {
 | 
					void pa_check_signal_is_blocked(int sig) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@
 | 
				
			||||||
  This file is part of PulseAudio.
 | 
					  This file is part of PulseAudio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2004-2006 Lennart Poettering
 | 
					  Copyright 2004-2006 Lennart Poettering
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as
 | 
					  it under the terms of the GNU Lesser General Public License as
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,8 @@ ssize_t pa_write(int fd, const void *buf, size_t count, int *type);
 | 
				
			||||||
ssize_t pa_loop_read(int fd, void*data, size_t size, int *type);
 | 
					ssize_t pa_loop_read(int fd, void*data, size_t size, int *type);
 | 
				
			||||||
ssize_t pa_loop_write(int fd, const void*data, size_t size, int *type);
 | 
					ssize_t pa_loop_write(int fd, const void*data, size_t size, int *type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int pa_close(int fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pa_check_signal_is_blocked(int sig);
 | 
					void pa_check_signal_is_blocked(int sig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char *pa_sprintf_malloc(const char *format, ...) PA_GCC_PRINTF_ATTR(1,2);
 | 
					char *pa_sprintf_malloc(const char *format, ...) PA_GCC_PRINTF_ATTR(1,2);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@
 | 
				
			||||||
  This file is part of PulseAudio.
 | 
					  This file is part of PulseAudio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2004-2006 Lennart Poettering
 | 
					  Copyright 2004-2006 Lennart Poettering
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as
 | 
					  it under the terms of the GNU Lesser General Public License as
 | 
				
			||||||
| 
						 | 
					@ -174,10 +174,9 @@ void pa_iochannel_free(pa_iochannel*io) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!io->no_close) {
 | 
					    if (!io->no_close) {
 | 
				
			||||||
        if (io->ifd >= 0)
 | 
					        if (io->ifd >= 0)
 | 
				
			||||||
 | 
					            pa_close(io->ifd);
 | 
				
			||||||
            close(io->ifd);
 | 
					 | 
				
			||||||
        if (io->ofd >= 0 && io->ofd != io->ifd)
 | 
					        if (io->ofd >= 0 && io->ofd != io->ifd)
 | 
				
			||||||
            close(io->ofd);
 | 
					            pa_close(io->ofd);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_xfree(io);
 | 
					    pa_xfree(io);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
/***
 | 
					/***
 | 
				
			||||||
  This file is part of PulseAudio.
 | 
					  This file is part of PulseAudio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as published
 | 
					  it under the terms of the GNU Lesser General Public License as published
 | 
				
			||||||
| 
						 | 
					@ -144,17 +144,17 @@ int pipe(int filedes[2]) {
 | 
				
			||||||
    if ((addr.sin_port != peer.sin_port) || (addr.sin_addr.s_addr != peer.sin_addr.s_addr))
 | 
					    if ((addr.sin_port != peer.sin_port) || (addr.sin_addr.s_addr != peer.sin_addr.s_addr))
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    close(listener);
 | 
					    pa_close(listener);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
	if (listener >= 0)
 | 
						if (listener >= 0)
 | 
				
			||||||
		close(listener);
 | 
							pa_close(listener);
 | 
				
			||||||
	if (filedes[0] >= 0)
 | 
						if (filedes[0] >= 0)
 | 
				
			||||||
		close(filedes[0]);
 | 
							pa_close(filedes[0]);
 | 
				
			||||||
	if (filedes[1] >= 0)
 | 
						if (filedes[1] >= 0)
 | 
				
			||||||
		close(filedes[0]);
 | 
							pa_close(filedes[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return -1;
 | 
						return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@
 | 
				
			||||||
  This file is part of PulseAudio.
 | 
					  This file is part of PulseAudio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2004-2006 Lennart Poettering
 | 
					  Copyright 2004-2006 Lennart Poettering
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as
 | 
					  it under the terms of the GNU Lesser General Public License as
 | 
				
			||||||
| 
						 | 
					@ -163,7 +163,7 @@ static void do_call(pa_socket_client *c) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
finish:
 | 
					finish:
 | 
				
			||||||
    if (!io && c->fd >= 0)
 | 
					    if (!io && c->fd >= 0)
 | 
				
			||||||
        close(c->fd);
 | 
					        pa_close(c->fd);
 | 
				
			||||||
    c->fd = -1;
 | 
					    c->fd = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    free_events(c);
 | 
					    free_events(c);
 | 
				
			||||||
| 
						 | 
					@ -310,7 +310,7 @@ static void socket_client_free(pa_socket_client *c) {
 | 
				
			||||||
    free_events(c);
 | 
					    free_events(c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (c->fd >= 0)
 | 
					    if (c->fd >= 0)
 | 
				
			||||||
        close(c->fd);
 | 
					        pa_close(c->fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef HAVE_LIBASYNCNS
 | 
					#ifdef HAVE_LIBASYNCNS
 | 
				
			||||||
    if (c->asyncns_query)
 | 
					    if (c->asyncns_query)
 | 
				
			||||||
| 
						 | 
					@ -403,7 +403,7 @@ static void timeout_cb(pa_mainloop_api *m, pa_time_event *e, const struct timeva
 | 
				
			||||||
    assert(c);
 | 
					    assert(c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (c->fd >= 0) {
 | 
					    if (c->fd >= 0) {
 | 
				
			||||||
        close(c->fd);
 | 
					        pa_close(c->fd);
 | 
				
			||||||
        c->fd = -1;
 | 
					        c->fd = -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@
 | 
				
			||||||
  This file is part of PulseAudio.
 | 
					  This file is part of PulseAudio.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2004-2006 Lennart Poettering
 | 
					  Copyright 2004-2006 Lennart Poettering
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as published
 | 
					  it under the terms of the GNU Lesser General Public License as published
 | 
				
			||||||
| 
						 | 
					@ -106,7 +106,7 @@ static void callback(pa_mainloop_api *mainloop, pa_io_event *e, int fd, PA_GCC_U
 | 
				
			||||||
    pa_fd_set_cloexec(nfd, 1);
 | 
					    pa_fd_set_cloexec(nfd, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!s->on_connection) {
 | 
					    if (!s->on_connection) {
 | 
				
			||||||
        close(nfd);
 | 
					        pa_close(nfd);
 | 
				
			||||||
        goto finish;
 | 
					        goto finish;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -119,7 +119,7 @@ static void callback(pa_mainloop_api *mainloop, pa_io_event *e, int fd, PA_GCC_U
 | 
				
			||||||
        fromhost(&req);
 | 
					        fromhost(&req);
 | 
				
			||||||
        if (!hosts_access(&req)) {
 | 
					        if (!hosts_access(&req)) {
 | 
				
			||||||
            pa_log_warn("TCP connection refused by tcpwrap.");
 | 
					            pa_log_warn("TCP connection refused by tcpwrap.");
 | 
				
			||||||
            close(nfd);
 | 
					            pa_close(nfd);
 | 
				
			||||||
            goto finish;
 | 
					            goto finish;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -216,7 +216,7 @@ pa_socket_server* pa_socket_server_new_unix(pa_mainloop_api *m, const char *file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
    if (fd >= 0)
 | 
					    if (fd >= 0)
 | 
				
			||||||
        close(fd);
 | 
					        pa_close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return NULL;
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -275,7 +275,7 @@ pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
    if (fd >= 0)
 | 
					    if (fd >= 0)
 | 
				
			||||||
        close(fd);
 | 
					        pa_close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return NULL;
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -331,7 +331,7 @@ pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t ad
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
    if (fd >= 0)
 | 
					    if (fd >= 0)
 | 
				
			||||||
        close(fd);
 | 
					        pa_close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return NULL;
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -398,7 +398,7 @@ static void socket_server_free(pa_socket_server*s) {
 | 
				
			||||||
        pa_xfree(s->filename);
 | 
					        pa_xfree(s->filename);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    close(s->fd);
 | 
					    pa_close(s->fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_xfree(s->tcpwrap_service);
 | 
					    pa_xfree(s->tcpwrap_service);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright 2004-2006 Lennart Poettering
 | 
					  Copyright 2004-2006 Lennart Poettering
 | 
				
			||||||
  Copyright 2004 Joe Marcus Clarke
 | 
					  Copyright 2004 Joe Marcus Clarke
 | 
				
			||||||
  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
					  Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PulseAudio is free software; you can redistribute it and/or modify
 | 
					  PulseAudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as published
 | 
					  it under the terms of the GNU Lesser General Public License as published
 | 
				
			||||||
| 
						 | 
					@ -236,7 +236,7 @@ int pa_unix_socket_is_stale(const char *fn) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
finish:
 | 
					finish:
 | 
				
			||||||
    if (fd >= 0)
 | 
					    if (fd >= 0)
 | 
				
			||||||
        close(fd);
 | 
					        pa_close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue