diff options
Diffstat (limited to 'polyp')
-rw-r--r-- | polyp/Makefile.am | 4 | ||||
-rw-r--r-- | polyp/packet.h | 2 | ||||
-rw-r--r-- | polyp/polyplib-context.c | 1 | ||||
-rw-r--r-- | polyp/socket-util.c | 20 | ||||
-rw-r--r-- | polyp/util.c | 30 |
5 files changed, 50 insertions, 7 deletions
diff --git a/polyp/Makefile.am b/polyp/Makefile.am index d90d3229..e97ed94d 100644 --- a/polyp/Makefile.am +++ b/polyp/Makefile.am @@ -624,7 +624,7 @@ endif ### Some minor stuff suid: polypaudio - chown root:root $< + chown root $< chmod u+s $< esdcompat.sh: esdcompat.sh.in Makefile @@ -643,7 +643,7 @@ daemon.conf: daemon.conf.in Makefile -e 's,@DEFAULT_CONFIG_FILE\@,$(polypconfdir)/daemon.conf,g' < $< > $@ install-exec-hook: - chown root:root $(DESTDIR)$(bindir)/polypaudio + chown root $(DESTDIR)$(bindir)/polypaudio chmod u+s $(DESTDIR)$(bindir)/polypaudio $(SYMDEF_FILES): module-defs.h.m4 diff --git a/polyp/packet.h b/polyp/packet.h index 8bea07e1..8f5cb835 100644 --- a/polyp/packet.h +++ b/polyp/packet.h @@ -23,7 +23,7 @@ ***/ #include <sys/types.h> -#include <stdint.h> +#include <inttypes.h> struct pa_packet { enum { PA_PACKET_APPENDED, PA_PACKET_DYNAMIC } type; diff --git a/polyp/polyplib-context.c b/polyp/polyplib-context.c index cf1a8e60..1a25523f 100644 --- a/polyp/polyplib-context.c +++ b/polyp/polyplib-context.c @@ -34,6 +34,7 @@ #include <sys/stat.h> #include <errno.h> #include <sys/wait.h> +#include <signal.h> #include "polyplib-internal.h" #include "polyplib-context.h" diff --git a/polyp/socket-util.c b/polyp/socket-util.c index 499739bd..4e1eb6ab 100644 --- a/polyp/socket-util.c +++ b/polyp/socket-util.c @@ -30,13 +30,16 @@ #include <assert.h> #include <string.h> #include <stdio.h> +#include <sys/types.h> #include <sys/un.h> #include <netinet/in.h> #include <fcntl.h> #include <unistd.h> -#include <sys/types.h> +#include <netinet/in_systm.h> #include <netinet/tcp.h> #include <netinet/ip.h> +#include <sys/socket.h> +#include <sys/stat.h> #include <netdb.h> #include "socket-util.h" @@ -94,9 +97,11 @@ int pa_socket_low_delay(int fd) { int priority; assert(fd >= 0); +#ifdef SO_PRIORITY priority = 7; if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &priority, sizeof(priority)) < 0) return -1; +#endif return 0; } @@ -109,12 +114,25 @@ int pa_socket_tcp_low_delay(int fd) { ret = pa_socket_low_delay(fd); on = 1; +#if defined(SOL_TCP) || defined(IPPROTO_TCP) +#if defined(SOL_TCP) if (setsockopt(fd, SOL_TCP, TCP_NODELAY, &on, sizeof(on)) < 0) +#else + if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0) +#endif ret = -1; +#endif +#if defined(IPTOS_LOWDELAY) && defined(IP_TOS) && (defined(SOL_IP) || \ + defined(IPPROTO_IP)) tos = IPTOS_LOWDELAY; +#ifdef SOL_IP if (setsockopt(fd, SOL_IP, IP_TOS, &tos, sizeof(tos)) < 0) +#else + if (setsockopt(fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0) +#endif ret = -1; +#endif return ret; diff --git a/polyp/util.c b/polyp/util.c index 9697a1eb..b138266b 100644 --- a/polyp/util.c +++ b/polyp/util.c @@ -209,7 +209,13 @@ char *pa_get_user_name(char *s, size_t l) { if (!(p = getenv("LOGNAME"))) if (!(p = getenv("USERNAME"))) { +#ifdef HAVE_GETPWUID_R if (getpwuid_r(getuid(), &pw, buf, sizeof(buf), &r) != 0 || !r) { +#else + /* XXX Not thread-safe, but needed on OSes (e.g. FreeBSD 4.X) + * that do not support getpwuid_r. */ + if ((r = getpwuid(getuid())) == NULL) { +#endif snprintf(s, l, "%lu", (unsigned long) getuid()); return s; } @@ -445,11 +451,17 @@ int pa_parse_resample_method(const char *string) { static int is_group(gid_t gid, const char *name) { struct group group, *result = NULL; - long n = sysconf(_SC_GETGR_R_SIZE_MAX); + long n; void *data; int r = -1; - - assert(n > 0); + +#ifdef HAVE_GETGRGID_R +#ifdef _SC_GETGR_R_SIZE_MAX + n = sysconf(_SC_GETGR_R_SIZE_MAX); +#else + n = -1; +#endif + if (n < 0) n = 512; data = pa_xmalloc(n); if (getgrgid_r(gid, &group, data, n, &result) < 0 || !result) { @@ -462,6 +474,18 @@ static int is_group(gid_t gid, const char *name) { finish: pa_xfree(data); +#else + /* XXX Not thread-safe, but needed on OSes (e.g. FreeBSD 4.X) that do not + * support getgrgid_r. */ + if ((result = getgrgid(gid)) == NULL) { + pa_log(__FILE__ ": getgrgid(%u) failed: %s\n", gid, strerror(errno)); + goto finish; + } + + r = strcmp(name, result->gr_name) == 0; + +finish: +#endif return r; } |