mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	support for esd arguments: -spawnpid and -spawnfd
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@231 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
		
							parent
							
								
									3e1bdacd4f
								
							
						
					
					
						commit
						12949d0a65
					
				
					 4 changed files with 183 additions and 2 deletions
				
			
		| 
						 | 
					@ -103,7 +103,9 @@ modlib_LTLIBRARIES= \
 | 
				
			||||||
		module-native-protocol-unix.la \
 | 
							module-native-protocol-unix.la \
 | 
				
			||||||
		module-native-protocol-fd.la \
 | 
							module-native-protocol-fd.la \
 | 
				
			||||||
		module-sine.la \
 | 
							module-sine.la \
 | 
				
			||||||
		module-combine.la
 | 
							module-combine.la \
 | 
				
			||||||
 | 
							module-esound-compat-spawnfd.la \
 | 
				
			||||||
 | 
							module-esound-compat-spawnpid.la
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lib_LTLIBRARIES= \
 | 
					lib_LTLIBRARIES= \
 | 
				
			||||||
		libpolyp-@PA_MAJORMINOR@.la \
 | 
							libpolyp-@PA_MAJORMINOR@.la \
 | 
				
			||||||
| 
						 | 
					@ -302,6 +304,14 @@ module_combine_la_SOURCES = module-combine.c
 | 
				
			||||||
module_combine_la_LDFLAGS = -module -avoid-version
 | 
					module_combine_la_LDFLAGS = -module -avoid-version
 | 
				
			||||||
module_combine_la_LIBADD = $(AM_LIBADD)
 | 
					module_combine_la_LIBADD = $(AM_LIBADD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module_esound_compat_spawnfd_la_SOURCES = module-esound-compat-spawnfd.c
 | 
				
			||||||
 | 
					module_esound_compat_spawnfd_la_LDFLAGS = -module -avoid-version
 | 
				
			||||||
 | 
					module_esound_compat_spawnfd_la_LIBADD = $(AM_LIBADD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module_esound_compat_spawnpid_la_SOURCES = module-esound-compat-spawnpid.c
 | 
				
			||||||
 | 
					module_esound_compat_spawnpid_la_LDFLAGS = -module -avoid-version
 | 
				
			||||||
 | 
					module_esound_compat_spawnpid_la_LIBADD = $(AM_LIBADD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libpolyp_@PA_MAJORMINOR@_la_SOURCES = polyplib.h \
 | 
					libpolyp_@PA_MAJORMINOR@_la_SOURCES = polyplib.h \
 | 
				
			||||||
		polyplib-def.h \
 | 
							polyplib-def.h \
 | 
				
			||||||
		tagstruct.c tagstruct.h \
 | 
							tagstruct.c tagstruct.h \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,9 +26,13 @@ fail() {
 | 
				
			||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARGS=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for N in $(seq $#) ; do
 | 
					for N in $(seq $#) ; do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case "$1" in
 | 
					    case "$1" in
 | 
				
			||||||
 | 
					        "")
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        -v|--version)
 | 
					        -v|--version)
 | 
				
			||||||
            echo "$VERSION_STRING"
 | 
					            echo "$VERSION_STRING"
 | 
				
			||||||
| 
						 | 
					@ -63,6 +67,16 @@ EOF
 | 
				
			||||||
            exit 0
 | 
					            exit 0
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        -spawnpid)
 | 
				
			||||||
 | 
					            shift
 | 
				
			||||||
 | 
					            ARGS="$ARGS '-Lmodule-esound-compat-spawnpid pid=$1'"
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        -spawnfd)
 | 
				
			||||||
 | 
					            shift
 | 
				
			||||||
 | 
					            ARGS="$ARGS '-Lmodule-esound-compat-spawnfd fd=$1'"
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        -unix|-b|-public|-terminate|-nobeeps|-trust|-tcp|-promiscuous)  
 | 
					        -unix|-b|-public|-terminate|-nobeeps|-trust|-tcp|-promiscuous)  
 | 
				
			||||||
            # Ignore these commands
 | 
					            # Ignore these commands
 | 
				
			||||||
            ;; 
 | 
					            ;; 
 | 
				
			||||||
| 
						 | 
					@ -70,6 +84,7 @@ EOF
 | 
				
			||||||
        -d|-r|-as|-port|-bind)
 | 
					        -d|-r|-as|-port|-bind)
 | 
				
			||||||
            # Ignore these commands and their arguments
 | 
					            # Ignore these commands and their arguments
 | 
				
			||||||
            shift
 | 
					            shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        *)
 | 
					        *)
 | 
				
			||||||
| 
						 | 
					@ -80,4 +95,4 @@ EOF
 | 
				
			||||||
    shift
 | 
					    shift
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec "@POLYPAUDIO_BINARY@"
 | 
					eval "exec '@POLYPAUDIO_BINARY@'$ARGS"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										79
									
								
								polyp/module-esound-compat-spawnfd.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								polyp/module-esound-compat-spawnfd.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,79 @@
 | 
				
			||||||
 | 
					/* $Id$ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/***
 | 
				
			||||||
 | 
					  This file is part of polypaudio.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  polypaudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					  it under the terms of the GNU General Public License as published
 | 
				
			||||||
 | 
					  by the Free Software Foundation; either version 2 of the License,
 | 
				
			||||||
 | 
					  or (at your option) any later version.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  polypaudio is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
				
			||||||
 | 
					  General Public License for more details.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					  along with polypaudio; if not, write to the Free Software
 | 
				
			||||||
 | 
					  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
				
			||||||
 | 
					  USA.
 | 
				
			||||||
 | 
					***/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_CONFIG_H
 | 
				
			||||||
 | 
					#include <config.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "module.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					#include "modargs.h"
 | 
				
			||||||
 | 
					#include "log.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PA_MODULE_AUTHOR("Lennart Poettering")
 | 
				
			||||||
 | 
					PA_MODULE_DESCRIPTION("ESOUND compatibility module: -spawnfd emulation")
 | 
				
			||||||
 | 
					PA_MODULE_USAGE("fd=<file descriptor>")
 | 
				
			||||||
 | 
					PA_MODULE_VERSION(PACKAGE_VERSION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char* const valid_modargs[] = {
 | 
				
			||||||
 | 
					    "fd",
 | 
				
			||||||
 | 
					    NULL,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int pa__init(struct pa_core *c, struct pa_module*m) {
 | 
				
			||||||
 | 
					    struct pa_modargs *ma = NULL;
 | 
				
			||||||
 | 
					    int ret = -1, fd = -1;
 | 
				
			||||||
 | 
					    char x = 1;
 | 
				
			||||||
 | 
					    assert(c && m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!(ma = pa_modargs_new(m->argument, valid_modargs)) ||
 | 
				
			||||||
 | 
					        pa_modargs_get_value_s32(ma, "fd", &fd) < 0 ||
 | 
				
			||||||
 | 
					        fd < 0) {
 | 
				
			||||||
 | 
					        pa_log(__FILE__": Failed to parse module arguments\n");
 | 
				
			||||||
 | 
					        goto finish;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (pa_loop_write(fd, &x, sizeof(x)) != sizeof(x))
 | 
				
			||||||
 | 
					        pa_log(__FILE__": WARNING: write(%u, 1, 1) failed: %s\n", fd, strerror(errno));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pa_module_unload_request(m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					finish:
 | 
				
			||||||
 | 
					    if (ma)
 | 
				
			||||||
 | 
					        pa_modargs_free(ma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pa__done(struct pa_core *c, struct pa_module*m) {
 | 
				
			||||||
 | 
					    assert(c && m);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										77
									
								
								polyp/module-esound-compat-spawnpid.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								polyp/module-esound-compat-spawnpid.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,77 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/***
 | 
				
			||||||
 | 
					  This file is part of polypaudio.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  polypaudio is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					  it under the terms of the GNU General Public License as published
 | 
				
			||||||
 | 
					  by the Free Software Foundation; either version 2 of the License,
 | 
				
			||||||
 | 
					  or (at your option) any later version.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  polypaudio is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
				
			||||||
 | 
					  General Public License for more details.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					  along with polypaudio; if not, write to the Free Software
 | 
				
			||||||
 | 
					  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
				
			||||||
 | 
					  USA.
 | 
				
			||||||
 | 
					***/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_CONFIG_H
 | 
				
			||||||
 | 
					#include <config.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <signal.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "module.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					#include "modargs.h"
 | 
				
			||||||
 | 
					#include "log.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PA_MODULE_AUTHOR("Lennart Poettering")
 | 
				
			||||||
 | 
					PA_MODULE_DESCRIPTION("ESOUND compatibility module: -spawnpid emulation")
 | 
				
			||||||
 | 
					PA_MODULE_USAGE("pid=<process id>")
 | 
				
			||||||
 | 
					PA_MODULE_VERSION(PACKAGE_VERSION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char* const valid_modargs[] = {
 | 
				
			||||||
 | 
					    "pid",
 | 
				
			||||||
 | 
					    NULL,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int pa__init(struct pa_core *c, struct pa_module*m) {
 | 
				
			||||||
 | 
					    struct pa_modargs *ma = NULL;
 | 
				
			||||||
 | 
					    int ret = -1;
 | 
				
			||||||
 | 
					    uint32_t pid = 0;
 | 
				
			||||||
 | 
					    assert(c && m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!(ma = pa_modargs_new(m->argument, valid_modargs)) ||
 | 
				
			||||||
 | 
					        pa_modargs_get_value_u32(ma, "pid", &pid) < 0 ||
 | 
				
			||||||
 | 
					        !pid) {
 | 
				
			||||||
 | 
					        pa_log(__FILE__": Failed to parse module arguments\n");
 | 
				
			||||||
 | 
					        goto finish;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (kill(pid, SIGUSR1) < 0)
 | 
				
			||||||
 | 
					        pa_log(__FILE__": WARNING: kill(%u) failed: %s\n", pid, strerror(errno));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pa_module_unload_request(m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					finish:
 | 
				
			||||||
 | 
					    if (ma)
 | 
				
			||||||
 | 
					        pa_modargs_free(ma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pa__done(struct pa_core *c, struct pa_module*m) {
 | 
				
			||||||
 | 
					    assert(c && m);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue