mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
auth support in esound and native
AUTH and SET_NAME operatins in native simple library git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@51 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
722c2c8c87
commit
f8cbde54da
22 changed files with 615 additions and 98 deletions
84
src/util.c
84
src/util.c
|
|
@ -124,3 +124,87 @@ int pa_make_tcp_socket_low_delay(int fd) {
|
|||
return ret;
|
||||
|
||||
}
|
||||
|
||||
ssize_t pa_loop_read(int fd, void*data, size_t size) {
|
||||
ssize_t ret = 0;
|
||||
assert(fd >= 0 && data && size);
|
||||
|
||||
while (size > 0) {
|
||||
ssize_t r;
|
||||
|
||||
if ((r = read(fd, data, size)) < 0)
|
||||
return r;
|
||||
|
||||
if (r == 0)
|
||||
break;
|
||||
|
||||
ret += r;
|
||||
data += r;
|
||||
size -= r;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
ssize_t pa_loop_write(int fd, const void*data, size_t size) {
|
||||
ssize_t ret = 0;
|
||||
assert(fd >= 0 && data && size);
|
||||
|
||||
while (size > 0) {
|
||||
ssize_t r;
|
||||
|
||||
if ((r = write(fd, data, size)) < 0)
|
||||
return r;
|
||||
|
||||
if (r == 0)
|
||||
break;
|
||||
|
||||
ret += r;
|
||||
data += r;
|
||||
size -= r;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pa_unix_socket_is_stale(const char *fn) {
|
||||
struct sockaddr_un sa;
|
||||
int fd = -1, ret = -1;
|
||||
|
||||
if ((fd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) {
|
||||
fprintf(stderr, "socket(): %s\n", strerror(errno));
|
||||
goto finish;
|
||||
}
|
||||
|
||||
sa.sun_family = AF_LOCAL;
|
||||
strncpy(sa.sun_path, fn, sizeof(sa.sun_path)-1);
|
||||
sa.sun_path[sizeof(sa.sun_path) - 1] = 0;
|
||||
|
||||
if (connect(fd, (struct sockaddr*) &sa, sizeof(sa)) < 0) {
|
||||
if (errno == ECONNREFUSED)
|
||||
ret = 1;
|
||||
} else
|
||||
ret = 0;
|
||||
|
||||
finish:
|
||||
if (fd >= 0)
|
||||
close(fd);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pa_unix_socket_remove_stale(const char *fn) {
|
||||
int r;
|
||||
|
||||
if ((r = pa_unix_socket_is_stale(fn)) < 0)
|
||||
return errno != ENOENT ? -1 : 0;
|
||||
|
||||
if (!r)
|
||||
return 0;
|
||||
|
||||
/* Yes, here is a race condition. But who cares? */
|
||||
if (unlink(fn) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue