diff options
Diffstat (limited to 'audio/esound/files/patch-esdlib.c')
-rw-r--r-- | audio/esound/files/patch-esdlib.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/audio/esound/files/patch-esdlib.c b/audio/esound/files/patch-esdlib.c new file mode 100644 index 000000000000..68018a173ede --- /dev/null +++ b/audio/esound/files/patch-esdlib.c @@ -0,0 +1,55 @@ +--- esdlib.c.orig 2008-11-18 15:35:19.000000000 -0500 ++++ esdlib.c 2008-11-20 14:32:59.000000000 -0500 +@@ -21,6 +21,8 @@ + #include <errno.h> + #include <sys/wait.h> + #include <poll.h> ++#include <pwd.h> ++#include <limits.h> + + #include <sys/un.h> + +@@ -928,7 +930,7 @@ int esd_open_sound( const char *rhost ) + putenv(preload2); + } + cmd = malloc(strlen(SERVERDIR"/esd -spawnfd 9999999999") + strlen(esd_spawn_options)); +- sprintf(cmd, "%s/esd %s -spawnfd %d", SERVERDIR, esd_spawn_options, esd_pipe[1]); ++ sprintf(cmd, "exec esd %s -spawnfd %d", esd_spawn_options?esd_spawn_options:"", esd_pipe[1]); + + if(!fork()) { + /* child of child process. Minimal so startup overhead is +@@ -1747,3 +1749,34 @@ int esd_close( int esd ) + return close( esd ); + } + ++char * ++esd_unix_socket_dir(void) { ++ static char *sockdir = NULL, sockdirbuf[PATH_MAX]; ++ struct passwd *pw; ++ ++ if (sockdir != NULL) ++ return (sockdir); ++ pw = getpwuid(getuid()); ++ if (pw == NULL || pw->pw_dir == NULL) { ++ fprintf(stderr, "esd: could not find home directory\n"); ++ exit(1); ++ } ++ snprintf(sockdirbuf, sizeof(sockdirbuf), "%s/.esd", pw->pw_dir); ++ endpwent(); ++ sockdir = sockdirbuf; ++ return (sockdir); ++} ++ ++char * ++esd_unix_socket_name(void) { ++ static char *sockname = NULL, socknamebuf[PATH_MAX]; ++ ++ if (sockname != NULL) ++ return (sockname); ++ snprintf(socknamebuf, sizeof(socknamebuf), "%s/socket", ++ esd_unix_socket_dir()); ++ sockname = socknamebuf; ++ return (sockname); ++ } ++ ++ |