Linux Plugin Wrapper (Upgrade from Linux Flash Plugin Wrapper)
Norikatsu Shigemura
nork at FreeBSD.org
Sun Jun 15 03:22:45 PDT 2003
Hi Linux Flash Plugin Wrapper User!
I recieved a report about Linux RealPlayer Plugin from Takahiro
Igarashi. We can use Linux RealPlayer Plugin with native mozilla.
I made a port for this included new feature. Please test this port.
But, it's MIME type was registed audio/x-pn-realaudio-plugin.
I don't know how to s/-plugin// :-(. And, we should think how
to include mozilla's run-script and mplayerplugin(disable real
feature). Please teach me solves.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# linuxpluginwrapper
# linuxpluginwrapper/Makefile
# linuxpluginwrapper/files
# linuxpluginwrapper/files/linux-ioctl.h
# linuxpluginwrapper/files/pkg-message.in
# linuxpluginwrapper/files/pluginwrapper.c
# linuxpluginwrapper/pkg-descr
# linuxpluginwrapper/pkg-plist
#
echo c - linuxpluginwrapper
mkdir -p linuxpluginwrapper > /dev/null 2>&1
echo x - linuxpluginwrapper/Makefile
sed 's/^X//' >linuxpluginwrapper/Makefile << 'END-of-linuxpluginwrapper/Makefile'
X# New ports collection makefile for: linuxpluginwrapper
X# Date Created: 2003-06-15
X# Whom: nork at FreeBSD.org
X#
X# $FreeBSD$
X#
X
XPORTNAME= linuxpluginwrapper
XPORTVERSION= 20030615
XCATEGORIES= www linux
XMASTER_SITES= # none
XDISTFILES= # none
X
XMAINTAINER= nork at FreeBSD.org
XCOMMENT= A wrapper allowing use of linux-plugin with native mozilla
X
XRUN_DEPENDS+= ${LOCALBASE}/lib/flash/libflashplayer.so:${PORTSDIR}/www/linux-flashplugin
XRUN_DEPENDS+= ${LOCALBASE}/lib/RealPlayer8/rpnp.so:${PORTSDIR}/multimedia/linux-realplayer
X
XNO_WRKSUBDIR= YES
X
XUSE_XLIB= yes
XONLY_FOR_ARCHS= i386
XPKGMESSAGE= ${WRKDIR}/pkg-message
X
X.include <bsd.port.pre.mk>
X
X.ifdef WITH_JAVA
XUSE_GCC= 3.2+
Xpre-everything:
X @${ECHO_MSG} Please complie mozilla with USE_GCC=3.2.
X.if defined(USE_GCC) && ${USE_GCC} == 3.2+ && ${OSVERSION} < 500039
XCC= gcc32
XCXX= g++32
XBUILD_DEPENDS+= gcc32:${PORTSDIR}/lang/gcc32
XMAKE_ENV+= CC=${CC} CXX=${CXX}
X.endif
X.else
Xpre-everything:
X @${ECHO_MSG} "If you use native java plugin on 4-stable (this limitaion"
X @${ECHO_MSG} "was brought by java/jdk13), please compile with USE_JAVA"
X @${ECHO_MSG} "and mozilla with USE_GCC=3.2."
X.endif
X
Xdo-fetch:
X @${DO_NADA}
X
Xdo-build:
X ${CC} -shared -o ${WRKSRC}/pluginwrapper.so \
X -fpic ${CFLAGS} ${PTHREAD_CFLAGS} -I${FILESDIR} \
X ${FILESDIR}/pluginwrapper.c \
X -L${X11BASE}/lib -R${X11BASE}/lib -lXt
X
Xdo-install:
X ${INSTALL_DATA} ${WRKSRC}/pluginwrapper.so ${PREFIX}/lib/
X @${SED} -e 's,%%PREFIX%%,${PREFIX},' \
X -e 's,%%LOCALBASE%%,${LOCALBASE},' \
X -e 's,%%X11BASE%%,${X11BASE},' \
X ${FILESDIR}/pkg-message.in > ${PKGMESSAGE}
X @${LN} -sf ${PREFIX}/lib/flash/ShockwaveFlash.class ${X11BASE}/lib/browser_plugins/
X @${LN} -sf ${PREFIX}/lib/flash/libflashplayer.so ${X11BASE}/lib/browser_plugins/
X @${LN} -sf ${PREFIX}/lib/RealPlayer8/rpnp.so ${X11BASE}/lib/browser_plugins/
X @${LN} -sf ${PREFIX}/lib/RealPlayer8/raclass.zip ${X11BASE}/lib/browser_plugins/
X @${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.post.mk>
END-of-linuxpluginwrapper/Makefile
echo c - linuxpluginwrapper/files
mkdir -p linuxpluginwrapper/files > /dev/null 2>&1
echo x - linuxpluginwrapper/files/linux-ioctl.h
sed 's/^X//' >linuxpluginwrapper/files/linux-ioctl.h << 'END-of-linuxpluginwrapper/files/linux-ioctl.h'
X/*-
X * Copyright (c) 2002-2003 Norikatsu Shigemura
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X */
X
X#ifndef __LINUX_IOCTL__
X#define __LINUX_IOCTL__
X
X
X/******************************************************************************/
X#if defined(__i386__)
X
X#define _LINUX_IOC_NRBITS 8
X#define _LINUX_IOC_TYPEBITS 8
X#define _LINUX_IOC_SIZEBITS 14
X#define _LINUX_IOC_DIRBITS 2
X
X#else
X
X#error NOT SUPPORT ARCHITECTURE
X
X#endif
X
X
X/******************************************************************************/
X#define _LINUX_IOC_NRMASK ( (1 << _IOC_NRBITS ) - 1 )
X#define _LINUX_IOC_TYPEMASK ( (1 << _IOC_TYPEBITS) - 1 )
X#define _LINUX_IOC_SIZEMASK ( (1 << _IOC_SIZEBITS) - 1 )
X#define _LINUX_IOC_DIRMASK ( (1 << _IOC_DIRBITS ) - 1 )
X
X#define _LINUX_IOC_NRSHIFT 0
X#define _LINUX_IOC_TYPESHIFT (_LINUX_IOC_NRSHIFT + _LINUX_IOC_NRBITS)
X#define _LINUX_IOC_SIZESHIFT (_LINUX_IOC_TYPESHIFT + _LINUX_IOC_TYPEBITS)
X#define _LINUX_IOC_DIRSHIFT (_LINUX_IOC_SIZESHIFT + _LINUX_IOC_SIZEBITS)
X
X#define _LINUX_IOC_NONE 0U
X#define _LINUX_IOC_WRITE 1U
X#define _LINUX_IOC_READ 2U
X
X
X/******************************************************************************/
X#define _LINUX_IOC(dir, type, nr, size) \
X ( ( (dir) << _LINUX_IOC_DIRSHIFT ) | \
X ( (type) << _LINUX_IOC_TYPESHIFT ) | \
X ( (nr) << _LINUX_IOC_NRSHIFT ) | \
X ( (size) << _LINUX_IOC_SIZESHIFT ) )
X
X#define _LINUX_IO(type, nr) \
X _LINUX_IOC(_LINUX_IOC_NONE, (type), (nr), 0)
X#define _LINUX_IOR(type, nr, size) \
X _LINUX_IOC(_LINUX_IOC_READ, (type), (nr), sizeof(size))
X#define _LINUX_IOW(type, nr, size) \
X _LINUX_IOC(_LINUX_IOC_WRITE, (type), (nr), sizeof(size))
X#define _LINUX_IOWR(type, nr, size) \
X _LINUX_IOC(_LINUX_IOC_READ|_LINUX_IOC_WRITE, (type), (nr), sizeof(size))
X
X
X/******************************************************************************/
X#if 0
X
Xtypedef struct linux_audio_buf_info {
X int fragments;
X int fragstotal;
X int fragsize;
X int bytes;
X} linux_audio_buf_info;
X
Xtypedef struct linux_count_info {
X int bytes;
X int blocks;
X int ptr;
X} linux_count_info;
X
Xtypedef struct linux_buffmem_desc {
X unsigned *buffer;
X int size;
X} linux_buffmem_desc;
X
X#else
X
X/* XXX: assume that Linux's 'struct linux_*' is same FreeBSD's one */
X
X#define linux_audio_buf_info audio_buf_info
X#define linux_count_info count_info
X#define linux_buffmem_desc buffmem_desc
X
X#endif
X
X
X/******************************************************************************/
X#define LINUX_SNDCTL_DSP_RESET _LINUX_IO ('P', 0)
X#define LINUX_SNDCTL_DSP_SYNC _LINUX_IO ('P', 1)
X#define LINUX_SNDCTL_DSP_SPEED _LINUX_IOWR('P', 2, int)
X#define LINUX_SOUND_PCM_READ_RATE _LINUX_IOR ('P', 2, int)
X#define LINUX_SNDCTL_DSP_STEREO _LINUX_IOWR('P', 3, int)
X#define LINUX_SNDCTL_DSP_GETBLKSIZE _LINUX_IOWR('P', 4, int)
X#define LINUX_SOUND_PCM_READ_BITS _LINUX_IOR ('P', 5, int)
X#define LINUX_SNDCTL_DSP_SETFMT _LINUX_IOWR('P', 5, int)
X#define LINUX_SNDCTL_DSP_CHANNELS _LINUX_IOWR('P', 6, int)
X#define LINUX_SOUND_PCM_READ_CHANNELS _LINUX_IOR ('P', 6, int)
X#define LINUX_SOUND_PCM_WRITE_FILTER _LINUX_IOWR('P', 7, int)
X#define LINUX_SOUND_PCM_READ_FILTER _LINUX_IOR ('P', 7, int)
X#define LINUX_SNDCTL_DSP_POST _LINUX_IO ('P', 8)
X#define LINUX_SNDCTL_DSP_SUBDIVIDE _LINUX_IOWR('P', 9, int)
X#define LINUX_SNDCTL_DSP_SETFRAGMENT _LINUX_IOWR('P', 10, int)
X#define LINUX_SNDCTL_DSP_GETFMTS _LINUX_IOR ('P', 11, int)
X#define LINUX_SNDCTL_DSP_GETOSPACE _LINUX_IOR ('P', 12, linux_audio_buf_info)
X#define LINUX_SNDCTL_DSP_GETISPACE _LINUX_IOR ('P', 13, linux_audio_buf_info)
X#define LINUX_SNDCTL_DSP_NONBLOCK _LINUX_IO ('P', 14)
X#define LINUX_SNDCTL_DSP_GETCAPS _LINUX_IOR ('P', 15, int)
X#define LINUX_SNDCTL_DSP_GETTRIGGER _LINUX_IOR ('P', 16, int)
X#define LINUX_SNDCTL_DSP_SETTRIGGER _LINUX_IOW ('P', 16, int)
X#define LINUX_SNDCTL_DSP_GETIPTR _LINUX_IOR ('P', 17, linux_count_info)
X#define LINUX_SNDCTL_DSP_GETOPTR _LINUX_IOR ('P', 18, linux_count_info)
X#define LINUX_SNDCTL_DSP_MAPINBUF _LINUX_IOR ('P', 19, linux_buffmem_desc)
X#define LINUX_SNDCTL_DSP_MAPOUTBUF _LINUX_IOR ('P', 20, linux_buffmem_desc)
X#define LINUX_SNDCTL_DSP_SETSYNCRO _LINUX_IO ('P', 21)
X#define LINUX_SNDCTL_DSP_SETDUPLEX _LINUX_IO ('P', 22)
X#define LINUX_SNDCTL_DSP_GETODELAY _LINUX_IOR ('P', 23, int)
X#define LINUX_SNDCTL_DSP_PROFILE _LINUX_IOW ('P', 23, int)
X#define LINUX_SNDCTL_DSP_GETCHANNELMASK _LINUX_IOWR('P', 64, int)
X#define LINUX_SNDCTL_DSP_BIND_CHANNEL _LINUX_IOWR('P', 65, int)
X#define LINUX_SNDCTL_DSP_SETSPDIF _LINUX_IOW ('P', 66, int)
X#define LINUX_SNDCTL_DSP_GETSPDIF _LINUX_IOR ('P', 67, int)
X
X
X/******************************************************************************/
X#define DSP_DEVICE "/dev/dsp"
X
X
X#endif /* __LINUX_IOCTL__ */
END-of-linuxpluginwrapper/files/linux-ioctl.h
echo x - linuxpluginwrapper/files/pkg-message.in
sed 's/^X//' >linuxpluginwrapper/files/pkg-message.in << 'END-of-linuxpluginwrapper/files/pkg-message.in'
XIf you are using a Mozilla browser, you first need to copy the linux
Xflash plugin into the mozilla plugins directory:
X
X# cp %%LOCALBASE%%/lib/flash/libflashplayer.so \
X %%X11BASE%%/lib/browser_plugins/libflashplayer_linux.so
X# cp %%LOCALBASE%%/lib/flash/ShockwaveFlash.class \
X %%X11BASE%%/lib/browser_plugins/
X
XNext, change the Mozilla startup script, %%X11BASE%%/bin/mozilla
Xto have:
X
XLD_PRELOAD=%%PREFIX%%/lib/libflashplayer.so.1
Xexport LD_PRELOAD
X
Xat the top of it (but after #!/bin/sh). Now start mozilla and go to
X'about:plugins' and the flash plugin is enabled!
END-of-linuxpluginwrapper/files/pkg-message.in
echo x - linuxpluginwrapper/files/pluginwrapper.c
sed 's/^X//' >linuxpluginwrapper/files/pluginwrapper.c << 'END-of-linuxpluginwrapper/files/pluginwrapper.c'
X/*-
X * Copyright (c) 2002-2003 Norikatsu Shigemura
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
X * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
X * SUCH DAMAGE.
X *
X */
X
X#define DEV_SND_MAJOR 30
X#define ENV_DSPDEV "MOZILLA_DSP_DEVICE"
X#define ENV_DISABLER "MOZILLA_DSP_HACK_DISABLE"
X
X
X/*
X *
X */
X#define extern_alias(type, var, orgvar) \
X extern type var __attribute__ ( (alias(#orgvar)) ); \
X __asm__(".comm " #var ", 4, 4")
X
X
X/*
X *
X */
X#include <sys/param.h>
X#include <sys/types.h>
X#include <dlfcn.h>
X#include <fcntl.h>
X#include <stdio.h>
X#include <errno.h>
X#include <limits.h>
X#include <stdlib.h>
X#include <sys/stat.h>
X#include <sys/param.h>
X#include <sys/ioctl.h>
X#include "linux-ioctl.h"
X
X
X/*
X *
X */
X#ifdef DEBUG
X# define dprintf(str, ...) fprintf(stderr, str "\n" ,##__VA_ARGS__)
X#else
X# define dprintf(str, ...) /* NOTHING TO DO */
X#endif
X
X
X/*
X *
X */
X#if __FreeBSD_version < 400000
X# include <sys/sysctl.h>
X# include <machine/soundcard.h>
X# define ioctl(d, r, a) _thread_sys_ioctl(d, r, void *args)
X# define open(p, f, m) _thread_sys_open(p, f, void *args)
X# define close(d) _thread_sys_open(d)
X# define _open(p, f, ...) syscall(SYS_fhopen, d, r ,##__VA_ARGS__)
X# define _ioctl(d, r, ...) syscall(SYS_ioctl, d, r ,##__VA_ARGS__)
X# define _close(d) syscall(SYS_close, d)
X# define va_list int
X# define va_start(a, r) /* NOTHING TO DO */
X# define va_arg(a, t) (args)
X# define va_end(a) /* NOTHING TO DO */
X#else
X# include <stdarg.h>
X# include <sys/soundcard.h>
X#endif
X
X
X/*
X *
X */
Xstatic struct dsp_fd_type {
X int fd; /* File Descriptor: < 0 not available */
X int linux_ioctl_request; /* Linux ioctl requirement is true */
X} dsp_fd_type = {
X -1,
X 0,
X};
X
X
X/*
X *
X */
X#define FORCE_CLEAR_LD_PRELOAD if( !init_done ) unsetenv("LD_PRELOAD")
Xstatic int init_done = 0;
X
X
X/*
X *
X */
Xint
Xopen(const char *path, int flags, .../* mode_t mode */)
X{
X int ret;
X va_list ap;
X const char *name = NULL;
X
X va_start(ap, flags);
X
X FORCE_CLEAR_LD_PRELOAD; /* XXX: force clear (X_X) */
X
X if( strncmp(path, DSP_DEVICE, sizeof(DSP_DEVICE) - 1) == 0 ) {
X if( dsp_fd_type.fd >= 0 ) {
X return dsp_fd_type.fd; /* XXX: really? */
X }
X if( ( name = getenv(ENV_DSPDEV) ) != NULL ) {
X struct stat st;
X if( stat(name, &st) == 0
X && ( S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode) )
X && major(st.st_rdev) == DEV_SND_MAJOR ) {
X path = name;
X }
X }
X name = path; /* name IS NOT NULL for future use */
X }
X
X if( flags & O_CREAT ) {
X ret = _open(path, flags, va_arg(ap, mode_t*));
X } else {
X ret = _open(path, flags);
X }
X
X dprintf("OPEN(%d) open(%s, 0x%08X)", ret, path, flags);
X
X if( name ) {
X dsp_fd_type.fd = ret;
X dsp_fd_type.linux_ioctl_request = 0;
X }
X
X va_end(ap);
X
X return ret;
X}
X
X
X/*
X *
X */
Xint
Xioctl(int d, unsigned long request, ...)
X{
X int ret;
X va_list ap;
X
X va_start(ap, request);
X
X FORCE_CLEAR_LD_PRELOAD; /* XXX: force clear (X_X) */
X
X if( d == dsp_fd_type.fd ) {
X switch( request ) {
X
X#define SND_IOCTL_0( linuxctl, ...) \
X case linuxctl: \
X dprintf(#linuxctl); \
X dsp_fd_type.linux_ioctl_request = 1; \
X errno = ENOSYS; \
X ret = -1; \
X break
X
X#define SND_IOCTL_1(bsdctl, linuxctl, ...) \
X case bsdctl: \
X ret = _ioctl(d, bsdctl ,##__VA_ARGS__); \
X break
X
X#define SND_IOCTL_2(bsdctl, linuxctl, ...) \
X case linuxctl: \
X dprintf(#linuxctl); \
X dsp_fd_type.linux_ioctl_request = 1; \
X /* FALLTHROUGH */ \
X case bsdctl: \
X ret = _ioctl(d, bsdctl ,##__VA_ARGS__); \
X break
X
X SND_IOCTL_2(SNDCTL_DSP_RESET, LINUX_SNDCTL_DSP_RESET );
X SND_IOCTL_2(SNDCTL_DSP_SYNC, LINUX_SNDCTL_DSP_SYNC );
X SND_IOCTL_1(SNDCTL_DSP_SPEED, LINUX_SNDCTL_DSP_SPEED, va_arg(ap, int*));
X SND_IOCTL_2(SOUND_PCM_READ_RATE, LINUX_SOUND_PCM_READ_RATE, va_arg(ap, int*));
X SND_IOCTL_1(SNDCTL_DSP_STEREO, LINUX_SNDCTL_DSP_STEREO, va_arg(ap, int*));
X SND_IOCTL_2(SNDCTL_DSP_GETBLKSIZE, LINUX_SNDCTL_DSP_GETBLKSIZE, va_arg(ap, int*));
X SND_IOCTL_2(SOUND_PCM_READ_BITS, LINUX_SOUND_PCM_READ_BITS, va_arg(ap, int*));
X SND_IOCTL_1(SNDCTL_DSP_SETFMT, LINUX_SNDCTL_DSP_SETFMT, va_arg(ap, int*));
X SND_IOCTL_1(SNDCTL_DSP_CHANNELS, LINUX_SNDCTL_DSP_CHANNELS, va_arg(ap, int*));
X SND_IOCTL_2(SOUND_PCM_READ_CHANNELS, LINUX_SOUND_PCM_READ_CHANNELS, va_arg(ap, int*));
X SND_IOCTL_1(SOUND_PCM_WRITE_FILTER, LINUX_SOUND_PCM_WRITE_FILTER, va_arg(ap, int*));
X SND_IOCTL_2(SOUND_PCM_READ_FILTER, LINUX_SOUND_PCM_READ_FILTER, va_arg(ap, int*));
X SND_IOCTL_1(SNDCTL_DSP_POST, LINUX_SNDCTL_DSP_POST );
X SND_IOCTL_1(SNDCTL_DSP_SUBDIVIDE, LINUX_SNDCTL_DSP_SUBDIVIDE, va_arg(ap, int*));
X SND_IOCTL_1(SNDCTL_DSP_SETFRAGMENT, LINUX_SNDCTL_DSP_SETFRAGMENT, va_arg(ap, int*));
X SND_IOCTL_2(SNDCTL_DSP_GETFMTS, LINUX_SNDCTL_DSP_GETFMTS, va_arg(ap, int*));
X SND_IOCTL_2(SNDCTL_DSP_GETOSPACE, LINUX_SNDCTL_DSP_GETOSPACE, va_arg(ap, linux_audio_buf_info*));
X SND_IOCTL_2(SNDCTL_DSP_GETISPACE, LINUX_SNDCTL_DSP_GETISPACE, va_arg(ap, linux_audio_buf_info*));
X SND_IOCTL_2(SNDCTL_DSP_NONBLOCK, LINUX_SNDCTL_DSP_NONBLOCK );
X SND_IOCTL_2(SNDCTL_DSP_GETCAPS, LINUX_SNDCTL_DSP_GETCAPS, va_arg(ap, int*));
X SND_IOCTL_2(SNDCTL_DSP_GETTRIGGER, LINUX_SNDCTL_DSP_GETTRIGGER, va_arg(ap, int*));
X SND_IOCTL_2(SNDCTL_DSP_GETIPTR, LINUX_SNDCTL_DSP_GETIPTR, va_arg(ap, linux_count_info*));
X SND_IOCTL_2(SNDCTL_DSP_GETOPTR, LINUX_SNDCTL_DSP_GETOPTR, va_arg(ap, linux_count_info*));
X SND_IOCTL_2(SNDCTL_DSP_MAPINBUF, LINUX_SNDCTL_DSP_MAPINBUF, va_arg(ap, linux_buffmem_desc*));
X SND_IOCTL_2(SNDCTL_DSP_MAPOUTBUF, LINUX_SNDCTL_DSP_MAPOUTBUF, va_arg(ap, linux_buffmem_desc*));
X SND_IOCTL_2(SNDCTL_DSP_SETSYNCRO, LINUX_SNDCTL_DSP_SETSYNCRO );
X SND_IOCTL_2(SNDCTL_DSP_SETDUPLEX, LINUX_SNDCTL_DSP_SETDUPLEX );
X
X case LINUX_SNDCTL_DSP_GETODELAY:
X dprintf("LINUX_SNDCTL_DSP_GETODELAY");
X dsp_fd_type.linux_ioctl_request = 1;
X ret = _ioctl(d, SNDCTL_DSP_GETODELAY ,va_arg(ap, int*));
X break;
X
X case SNDCTL_DSP_GETODELAY/* LINUX_SNDCTL_DSP_PROFILE */:
X if( dsp_fd_type.linux_ioctl_request ) {
X errno = ENOSYS;
X ret = -1;
X } else {
X ret = _ioctl(d, SNDCTL_DSP_GETODELAY ,va_arg(ap, int*));
X }
X break;
X
X SND_IOCTL_0( LINUX_SNDCTL_DSP_GETCHANNELMASK, va_arg(ap, int*));
X SND_IOCTL_0( LINUX_SNDCTL_DSP_BIND_CHANNEL, va_arg(ap, int*));
X SND_IOCTL_0( LINUX_SNDCTL_DSP_SETSPDIF, va_arg(ap, int*));
X SND_IOCTL_0( LINUX_SNDCTL_DSP_GETSPDIF, va_arg(ap, int*));
X
X#undef SND_IOCTL_2
X#undef SND_IOCTL_1
X#undef SND_IOCTL_0
X
X default:
X dprintf("maybe native request: %08X", request);
X ret = _ioctl(d, request, va_arg(ap, void*));
X break;
X }
X } else {
X ret = _ioctl(d, request, va_arg(ap, void*));
X }
X
X va_end(ap);
X
X return ret;
X}
X
X/*
X *
X */
Xint
Xclose(int d)
X{
X if( dsp_fd_type.fd == d ) {
X dsp_fd_type.fd = -1;
X }
X
X dprintf("CLOSE(%d)", d);
X
X return _close(d);
X}
X
X
X/*
X *
X */
Xconst unsigned short int *__ctype_b;
X
X/*
X *
X */
X#if 1
Xextern_alias(char **, __environ, environ);
X#else
Xextern char **__environ __attribute__ ( (alias("environ")) );
X__asm__(".comm __environ, 4, 4");
X#endif
X
X
X/*
X * This is used by brk(2), sbrk(2). But FreeBSD's these is different from
X * Linux's these. Therefore, this is dummy variable.
X */
X
X#if 1
Xvoid *___brk_addr = NULL;
X#else
Xvoid *__curbrk = NULL;
Xextern FILE *___brk_addr __attribute__ ( (alias("__curbrk")) );
X#endif
X
X
X/*
X *
X */
Xlong int
X__strtol_internal(const char *nptr, char **endptr, int base, int group)
X{
X return strtol(nptr, endptr, base);
X}
X
X
X/*
X *
X */
X#undef stderr
X#if __FreeBSD_version >= 500022 || \
X (470101 <= __FreeBSD_version && __FreeBSD_version < 500000)
X#if 1
Xextern_alias(FILE*, stderr, __stderrp);
X#else
Xextern FILE *stderr __attribute__ ( (alias("__stderrp")) );
X__asm__(".comm stderr, 4, 4");
X#endif
X#else
XFILE *stderr = &_sF[2];
X#endif
X
X
X#if __GNUC__ > 2
X
X/*
X * __builtin_vec_new, __builtin_vec_delete are in gcc 2.95.4's libgcc.a.
X * But there are not in new gcc (3.0 or later?).
X */
X
Xvoid *
X__builtin_vec_new(size_t sz /* XXX: std::nothrow_t& nothrow */)
X{
X void *p;
X
X if( sz == 0 )
X sz = 1;
X
X p = malloc(sz);
X
X /* XXX: ERROR HANDLER is not available */
X
X return p;
X}
X
Xvoid
X__builtin_vec_delete(void *ptr)
X{
X if( ptr )
X free(ptr);
X}
X
Xvoid
X__pure_virtual(void)
X{
X#define MESSAGE "pure virtual method called\n"
X write(2, MESSAGE, sizeof (MESSAGE) - 1);
X#undef MESSAGE
X}
X#endif
END-of-linuxpluginwrapper/files/pluginwrapper.c
echo x - linuxpluginwrapper/pkg-descr
sed 's/^X//' >linuxpluginwrapper/pkg-descr << 'END-of-linuxpluginwrapper/pkg-descr'
XA wrapper that allows the use of the Linux flash plugin to work with
Xa FreeBSD-native binary of mozilla.
END-of-linuxpluginwrapper/pkg-descr
echo x - linuxpluginwrapper/pkg-plist
sed 's/^X//' >linuxpluginwrapper/pkg-plist << 'END-of-linuxpluginwrapper/pkg-plist'
Xlib/pluginwrapper.so
X at unexec /bin/rm -f %%X11BASE%%/browser_plugins/raclass.zip
X at unexec /bin/rm -f %%X11BASE%%/browser_plugins/rpnp.so
X at unexec /bin/rm -f %%X11BASE%%/browser_plugins/ShockwaveFlash.class
X at unexec /bin/rm -f %%X11BASE%%/browser_plugins/libflashplayer.so
X at exec /bin/ln -sf %D/lib/flash/libflashplayer.so %%X11BASE%%/browser_plugins/
X at exec /bin/ln -sf %D/lib/flash/ShockwaveFlash.class %%X11BASE%%/browser_plugins/
X at exec /bin/ln -sf %D/lib/lib/RealPlayer8/rpnp.so %%X11BASE%%/browser_plugins/
X at exec /bin/ln -sf %D/lib/lib/RealPlayer8/raclass.zip %%X11BASE%%/browser_plugins/
END-of-linuxpluginwrapper/pkg-plist
exit
More information about the freebsd-ports
mailing list