summaryrefslogtreecommitdiffstats
path: root/polyp
diff options
context:
space:
mode:
Diffstat (limited to 'polyp')
-rw-r--r--polyp/Makefile.am4
-rw-r--r--polyp/packet.h2
-rw-r--r--polyp/polyplib-context.c1
-rw-r--r--polyp/socket-util.c20
-rw-r--r--polyp/util.c30
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;
}