- Update to 1.3.2 and remove obsolete local patches.

- Replace the defunct URL with a new upstream location.  Now this project has
a new maintainer:

https://www.redhat.com/archives/nspluginwrapper-devel-list/2011-April/msg00003.html

For more information about this release, please see the following thread:

https://www.redhat.com/archives/nspluginwrapper-devel-list/2011-April/msg00006.html

Prodded by:	Benjamin Kaduk (kaduk at MIT dot EDU), arundel
This commit is contained in:
Jung-uk Kim 2011-04-26 18:56:14 +00:00
parent dc898af0e9
commit cb3864f6b7
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=273224
12 changed files with 38 additions and 537 deletions

View File

@ -6,11 +6,11 @@
#
PORTNAME= nspluginwrapper
PORTVERSION= 1.3.0
PORTREVISION= 9
PORTVERSION= 1.3.2
CATEGORIES= www linux emulators
MASTER_SITES= LOCAL/jkim
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${BINFILE}${EXTRACT_SUFX}
MASTER_SITES= http://web.mit.edu/davidben/Public/nspluginwrapper/ \
LOCAL/jkim:binfile
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${BINFILE}:binfile
MAINTAINER= jkim@FreeBSD.org
COMMENT= A compatibility plugin for Mozilla NPAPI (development version)
@ -21,11 +21,11 @@ LATEST_LINK= ${PORTNAME}-devel
CONFLICTS= nspluginwrapper-1.2.*
BINFILE= ${PORTNAME}-i386-${PORTVERSION}-5
BINBUILD= 1
BINFILE= ${PORTNAME}-i386-${PORTVERSION}-${BINBUILD}${EXTRACT_SUFX}
ONLY_FOR_ARCHS= i386 amd64
USE_BZIP2= yes
USE_LINUX= yes
USE_LINUX_APPS= gtk2
USE_XORG= x11 xext xt
@ -39,8 +39,7 @@ HAS_CONFIGURE= yes
CONFIGURE_ARGS= --enable-generic --enable-strip --prefix=${PREFIX} \
--target-os=linux --target-cpu=i386 \
--with-cc=${CC} --with-cxx=${CXX} \
--with-x11-prefix=${LOCALBASE}
--with-cc=${CC} --with-cxx=${CXX}
LIBDIR= ${PREFIX}/lib/${PORTNAME}
@ -58,7 +57,7 @@ HOST_ARCH= ${ARCH}
.endif
post-patch:
${REINPLACE_CMD} -e 's,/usr/X11R6,${LOCALBASE},g' \
${REINPLACE_CMD} -e 's,%%LOCALBASE%%,${LOCALBASE},g' \
${WRKSRC}/src/npw-config.c
post-install:

View File

@ -1,4 +1,4 @@
SHA256 (nspluginwrapper-1.3.0.tar.bz2) = b8900bd5f0bd950f95b963e5c8f5e20d7d15cc70e777b6058289687ad968b21c
SIZE (nspluginwrapper-1.3.0.tar.bz2) = 336049
SHA256 (nspluginwrapper-i386-1.3.0-5.tar.bz2) = 57904964581c0b171be392fce30542941caf9a848b8b1db4987171949615283a
SIZE (nspluginwrapper-i386-1.3.0-5.tar.bz2) = 62313
SHA256 (nspluginwrapper-1.3.2.tar.gz) = f3a40d160601520d36b6f5c342e1e9751b2bdc70dff5e2e880e1d18ed8830201
SIZE (nspluginwrapper-1.3.2.tar.gz) = 410887
SHA256 (nspluginwrapper-i386-1.3.2-1.tar.gz) = 56bc1e4699456e6798929da47a867cf9e47bf29b3d5e7a88885a4f05f8de3be0
SIZE (nspluginwrapper-i386-1.3.2-1.tar.gz) = 64964

View File

@ -1,43 +0,0 @@
--- npapi/npapi.h 2009-01-02 09:22:28.000000000 -0500
+++ npapi/npapi.h 2010-08-18 19:07:09.000000000 -0400
@@ -439,7 +439,9 @@ typedef enum {
/* Get the NPObject wrapper for the plugins DOM element. */
NPNVPluginElementNPObject = 16,
- NPNVSupportsWindowless = 17
+ NPNVSupportsWindowless = 17,
+
+ NPNVprivateModeBool = 18
} NPNVariable;
--- src/npw-rpc.c 2010-08-18 19:10:19.000000000 -0400
+++ src/npw-rpc.c 2010-08-18 19:08:24.000000000 -0400
@@ -41,6 +41,7 @@ int rpc_type_of_NPNVariable(int variable
case NPNVisOfflineBool:
case NPNVSupportsXEmbedBool:
case NPNVSupportsWindowless:
+ case NPNVprivateModeBool:
type = RPC_TYPE_BOOLEAN;
break;
case NPNVToolkit:
--- src/npw-viewer.c 2010-08-18 19:10:19.000000000 -0400
+++ src/npw-viewer.c 2010-08-18 19:05:46.000000000 -0400
@@ -1266,6 +1266,7 @@ g_NPN_GetValue(NPP instance, NPNVariable
case NPNVSupportsXEmbedBool:
case NPNVWindowNPObject:
case NPNVPluginElementNPObject:
+ case NPNVprivateModeBool:
return g_NPN_GetValue_real(instance, variable, value);
default:
switch (variable & 0xff) {
--- src/utils.c 2009-01-02 09:22:29.000000000 -0500
+++ src/utils.c 2010-08-18 19:09:31.000000000 -0400
@@ -283,6 +283,7 @@ const char *string_of_NPNVariable(int va
_(NPNVWindowNPObject);
_(NPNVPluginElementNPObject);
_(NPNVSupportsWindowless);
+ _(NPNVprivateModeBool);
#undef _
default:
switch (variable & 0xff) {

View File

@ -1,178 +0,0 @@
Index: src/npw-viewer.c
===================================================================
--- src/npw-viewer.c (revision 942)
+++ src/npw-viewer.c (working copy)
@@ -2059,7 +2059,7 @@
RPC_METHOD_NPN_INVOKE,
RPC_TYPE_NPW_PLUGIN_INSTANCE, plugin,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, methodName,
+ RPC_TYPE_NP_IDENTIFIER, &methodName,
RPC_TYPE_ARRAY, RPC_TYPE_NP_VARIANT, argCount, args,
RPC_TYPE_INVALID);
@@ -2249,7 +2249,7 @@
RPC_METHOD_NPN_GET_PROPERTY,
RPC_TYPE_NPW_PLUGIN_INSTANCE, plugin,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, propertyName,
+ RPC_TYPE_NP_IDENTIFIER, &propertyName,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -2311,7 +2311,7 @@
RPC_METHOD_NPN_SET_PROPERTY,
RPC_TYPE_NPW_PLUGIN_INSTANCE, plugin,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, propertyName,
+ RPC_TYPE_NP_IDENTIFIER, &propertyName,
RPC_TYPE_NP_VARIANT, value,
RPC_TYPE_INVALID);
@@ -2370,7 +2370,7 @@
RPC_METHOD_NPN_REMOVE_PROPERTY,
RPC_TYPE_NPW_PLUGIN_INSTANCE, plugin,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, propertyName,
+ RPC_TYPE_NP_IDENTIFIER, &propertyName,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -2427,7 +2427,7 @@
RPC_METHOD_NPN_HAS_PROPERTY,
RPC_TYPE_NPW_PLUGIN_INSTANCE, plugin,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, propertyName,
+ RPC_TYPE_NP_IDENTIFIER, &propertyName,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -2484,7 +2484,7 @@
RPC_METHOD_NPN_HAS_METHOD,
RPC_TYPE_NPW_PLUGIN_INSTANCE, plugin,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, methodName,
+ RPC_TYPE_NP_IDENTIFIER, &methodName,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -2780,7 +2780,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPN_IDENTIFIER_IS_STRING,
- RPC_TYPE_NP_IDENTIFIER, identifier,
+ RPC_TYPE_NP_IDENTIFIER, &identifier,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -2838,7 +2838,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPN_UTF8_FROM_IDENTIFIER,
- RPC_TYPE_NP_IDENTIFIER, identifier,
+ RPC_TYPE_NP_IDENTIFIER, &identifier,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -2902,7 +2902,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPN_INT_FROM_IDENTIFIER,
- RPC_TYPE_NP_IDENTIFIER, identifier,
+ RPC_TYPE_NP_IDENTIFIER, &identifier,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
Index: src/npw-wrapper.c
===================================================================
--- src/npw-wrapper.c (revision 942)
+++ src/npw-wrapper.c (working copy)
@@ -1528,7 +1528,7 @@
free(name);
return rpc_method_send_reply(connection,
- RPC_TYPE_NP_IDENTIFIER, ident,
+ RPC_TYPE_NP_IDENTIFIER, &ident,
RPC_TYPE_INVALID);
}
@@ -1601,7 +1601,7 @@
NPIdentifier ident = g_NPN_GetIntIdentifier(intid);
return rpc_method_send_reply(connection,
- RPC_TYPE_NP_IDENTIFIER, ident,
+ RPC_TYPE_NP_IDENTIFIER, &ident,
RPC_TYPE_INVALID);
}
Index: src/npruntime.c
===================================================================
--- src/npruntime.c (revision 942)
+++ src/npruntime.c (working copy)
@@ -221,7 +221,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPCLASS_HAS_METHOD,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, name,
+ RPC_TYPE_NP_IDENTIFIER, &name,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -327,7 +327,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPCLASS_INVOKE,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, name,
+ RPC_TYPE_NP_IDENTIFIER, &name,
RPC_TYPE_ARRAY, RPC_TYPE_NP_VARIANT, argCount, args,
RPC_TYPE_INVALID);
@@ -509,7 +509,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPCLASS_HAS_PROPERTY,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, name,
+ RPC_TYPE_NP_IDENTIFIER, &name,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -599,7 +599,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPCLASS_GET_PROPERTY,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, name,
+ RPC_TYPE_NP_IDENTIFIER, &name,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
@@ -684,7 +684,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPCLASS_SET_PROPERTY,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, name,
+ RPC_TYPE_NP_IDENTIFIER, &name,
RPC_TYPE_NP_VARIANT, value,
RPC_TYPE_INVALID);
@@ -763,7 +763,7 @@
int error = rpc_method_invoke(g_rpc_connection,
RPC_METHOD_NPCLASS_REMOVE_PROPERTY,
RPC_TYPE_NP_OBJECT, npobj,
- RPC_TYPE_NP_IDENTIFIER, name,
+ RPC_TYPE_NP_IDENTIFIER, &name,
RPC_TYPE_INVALID);
if (error != RPC_ERROR_NO_ERROR) {
Index: src/npw-rpc.c
===================================================================
--- src/npw-rpc.c (revision 942)
+++ src/npw-rpc.c (working copy)
@@ -1252,7 +1252,7 @@
// the browser side
static int do_send_NPIdentifier(rpc_message_t *message, void *p_value)
{
- NPIdentifier ident = (NPIdentifier)p_value;
+ NPIdentifier ident = *(NPIdentifier *)p_value;
int id = 0;
if (ident) {
#ifdef BUILD_WRAPPER

View File

@ -1,55 +0,0 @@
--- src/npw-wrapper.c.orig 2009-01-02 09:22:29.000000000 -0500
+++ src/npw-wrapper.c 2011-03-31 12:34:33.000000000 -0400
@@ -2560,6 +2561,35 @@
return ret;
}
+#define NPW_ADOBE_FLASH_PLUGIN "Shockwave Flash"
+
+struct flash_version {
+ unsigned int major;
+ unsigned int minor;
+};
+
+// Detect Adobe Flash plugin version
+static void adobe_flash_version(struct flash_version *vers)
+{
+ static struct flash_version fv = { 0, 0 };
+ static bool tested = false;
+
+ if (!tested) {
+ if (g_plugin.name != NULL && g_plugin.description != NULL &&
+ strcmp(g_plugin.name, NPW_ADOBE_FLASH_PLUGIN) == 0 &&
+ strncmp(g_plugin.description, NPW_ADOBE_FLASH_PLUGIN,
+ strlen(NPW_ADOBE_FLASH_PLUGIN)) == 0) {
+ char *ptr, *endp;
+ ptr = g_plugin.description + strlen(NPW_ADOBE_FLASH_PLUGIN);
+ fv.major = strtol(ptr, &endp, 10);
+ if (*endp == '.')
+ fv.minor = strtol(endp + 1, NULL, 10);
+ }
+ tested = true;
+ }
+ *vers = fv;
+}
+
static int16 g_NPP_HandleEvent(NPP instance, void *event)
{
if (instance == NULL)
@@ -2569,6 +2599,16 @@
if (plugin == NULL)
return NPERR_INVALID_INSTANCE_ERROR;
+ if (((NPEvent *)event)->type == ButtonPress && ((XButtonEvent *)event)->button == Button3) {
+ static struct flash_version vers;
+ adobe_flash_version(&vers);
+ /* XXX: work around "right click" hang with Flash plugin 10.1 and later */
+ if ((vers.major == 10 && vers.minor >= 1) || vers.major > 10) {
+ D(bug("NPP_HandleEvent instance=%p, ignoring ButtonPress event for "
+ NPW_ADOBE_FLASH_PLUGIN " %u.%u\n", instance, vers.major, vers.minor));
+ return false;
+ }
+ }
if (((NPEvent *)event)->type == GraphicsExpose) {
/* XXX: flush the X output buffer so that the call to
gdk_pixmap_foreign_new() in the viewer can work */

View File

@ -1,209 +0,0 @@
--- src/npw-viewer.c.orig 2011-03-28 17:46:24.000000000 -0400
+++ src/npw-viewer.c 2011-03-28 17:52:16.000000000 -0400
@@ -221,8 +221,17 @@
static GList *g_delayed_calls = NULL;
static guint g_delayed_calls_id = 0;
+// We put delayed NPP_Destroy calls on a separate list because, unlike
+// NPN_ReleaseObject, these must be called on a clean stack and have no
+// other cause to get cleared. Otherwise, it is possible for the
+// delayed_calls_process in g_NPP_Destroy_Now to call it early.
+static GList *g_delayed_destroys = NULL;
+static guint g_delayed_destroys_id = 0;
+
static void g_NPN_ReleaseObject_Now(NPObject *npobj);
+static NPError g_NPP_Destroy_Now(PluginInstance *plugin, NPSavedData **sdata);
static gboolean delayed_calls_process_cb(gpointer user_data);
+static gboolean delayed_destroys_process_cb(gpointer user_data);
static void delayed_calls_add(int type, gpointer data)
{
@@ -238,13 +247,19 @@
delayed_calls_process_cb, NULL, NULL);
}
+static void delayed_destroys_add(PluginInstance *plugin)
+{
+ g_delayed_destroys = g_list_append(g_delayed_destroys, plugin);
+
+ if (g_delayed_destroys_id == 0)
+ g_delayed_destroys_id = g_idle_add_full(G_PRIORITY_LOW,
+ delayed_destroys_process_cb, NULL, NULL);
+}
+
// Returns whether there are pending calls left in the queue
static gboolean delayed_calls_process(PluginInstance *plugin, gboolean is_in_NPP_Destroy)
{
- GList *l = g_delayed_calls;
- while (l != NULL) {
- GList *cl = l;
- l = l->next;
+ while (g_delayed_calls != NULL) {
if (!is_in_NPP_Destroy) {
/* Continue later if there is incoming RPC */
@@ -252,7 +267,11 @@
return TRUE;
}
- DelayedCall *dcall = (DelayedCall *)cl->data;
+ DelayedCall *dcall = (DelayedCall *)g_delayed_calls->data;
+ /* XXX: Remove the link first; this function /must/ be
+ * re-entrant. We may be called again while processing the
+ * delayed call. */
+ g_delayed_calls = g_list_delete_link(g_delayed_calls, g_delayed_calls);
switch (dcall->type) {
case RPC_DELAYED_NPN_RELEASE_OBJECT:
{
@@ -262,7 +281,6 @@
}
}
NPW_MemFree(dcall);
- g_delayed_calls = g_list_delete_link(g_delayed_calls, cl);
}
if (g_delayed_calls)
@@ -280,6 +298,25 @@
return delayed_calls_process(NULL, FALSE);
}
+static gboolean delayed_destroys_process_cb(gpointer user_data)
+{
+ while (g_delayed_destroys != NULL) {
+ PluginInstance *plugin = (PluginInstance *)g_delayed_destroys->data;
+ g_delayed_destroys = g_list_delete_link(g_delayed_destroys,
+ g_delayed_destroys);
+ g_NPP_Destroy_Now(plugin, NULL);
+ }
+
+ if (g_delayed_destroys)
+ return TRUE;
+
+ if (g_delayed_destroys_id) {
+ g_source_remove(g_delayed_destroys_id);
+ g_delayed_destroys_id = 0;
+ }
+ return FALSE;
+}
+
// NPIdentifier cache
static inline bool use_npidentifier_cache(void)
{
@@ -741,7 +778,6 @@
}
}
-
/* ====================================================================== */
/* === XPCOM glue === */
/* ====================================================================== */
@@ -3338,6 +3374,13 @@
return error;
}
+ /* Clear any NPP_Destroys we may have delayed. Although it doesn't
+ really matter, and the plugin is going to die soon.
+
+ XXX: To be really picky, we should probably delay this and make
+ sure it is run on a new event loop iteration. */
+ delayed_destroys_process_cb(NULL);
+
NPError ret = g_NP_Shutdown();
return rpc_method_send_reply(connection, RPC_TYPE_INT32, ret, RPC_TYPE_INVALID);
}
@@ -3459,6 +3502,8 @@
// Process all pending calls as the data could become junk afterwards
// XXX: this also processes delayed calls from other instances
+ // XXX: Also, if this was delayed, the NPN_ReleaseObject calls will
+ // be ignored; the browser thinks we've already died.
delayed_calls_process(plugin, TRUE);
D(bugiI("NPP_Destroy instance=%p\n", instance));
@@ -3473,6 +3518,22 @@
return ret;
}
+static NPError g_NPP_Destroy_Now(PluginInstance *plugin, NPSavedData **save)
+{
+ D(bug("g_NPP_Destroy_Now\n"));
+
+ NPSavedData *save_area = NULL;
+ NPError ret = g_NPP_Destroy(PLUGIN_INSTANCE_NPP(plugin), &save_area);
+ if (save) {
+ *save = save_area;
+ } else if (save_area) {
+ npw_printf("WARNING: NPP_Destroy returned save_area, but it was ignored\n");
+ }
+
+ rpc_connection_unref(g_rpc_connection);
+ return ret;
+}
+
static int handle_NPP_Destroy(rpc_connection_t *connection)
{
D(bug("handle_NPP_Destroy\n"));
@@ -3488,8 +3549,26 @@
return error;
}
- NPSavedData *save_area;
- NPError ret = g_NPP_Destroy(PLUGIN_INSTANCE_NPP(plugin), &save_area);
+ NPSavedData *save_area = NULL;
+ NPError ret = NPERR_NO_ERROR;
+ /* Take a ref for the rpc_method_send_reply; otherwise the
+ * rpc_connection_unref in g_NPP_Destroy_Now may cause a slight
+ * nuisance. */
+ rpc_connection_ref(connection);
+ if (!rpc_method_in_invoke(connection)) {
+ /* The plugin is not on the stack; it's safe to call this. */
+ D(bug("NPP_Destroy is fine.\n"));
+ ret = g_NPP_Destroy_Now(plugin, &save_area);
+ } else {
+ /* It is not safe to call NPP_Destroy right now. Delay it until we
+ * return to the event loop.
+ *
+ * NOTE: This means that the browser never sees the real return
+ * value of NPP_Destroy; the NPSavedData will be discarded, and any
+ * error code will be ignored. */
+ D(bug("NPP_Destroy raced; delaying it to get a clean stack.\n"));
+ delayed_destroys_add(plugin);
+ }
error = rpc_method_send_reply(connection,
RPC_TYPE_INT32, ret,
--- src/rpc.c.orig 2009-01-02 09:22:29.000000000 -0500
+++ src/rpc.c 2011-03-28 17:52:16.000000000 -0400
@@ -2097,6 +2097,22 @@
return ret;
}
+bool rpc_method_in_invoke(rpc_connection_t *connection)
+{
+ D(bug("rpc_method_in_invoke\n"));
+ if (connection == NULL)
+ return false;
+ // Our stack should alternate between handle/dispatch and
+ // invokes. Some calls are only safe to handle called from an event
+ // loop. In this case, we should have values invoke_depth = 0;
+ // handle_depth = 1; dispatch_depth = 1
+ D(bug("invoke_depth = %d; dispatch_depth = %d; handle_depth = %d\n",
+ connection->invoke_depth,
+ connection->dispatch_depth,
+ connection->handle_depth));
+ return connection->invoke_depth > 0;
+}
+
/* ====================================================================== */
/* === Test Program === */
--- src/rpc.h.orig 2009-01-02 09:22:29.000000000 -0500
+++ src/rpc.h 2011-03-28 17:52:16.000000000 -0400
@@ -119,6 +119,7 @@
extern int rpc_method_wait_for_reply(rpc_connection_t *connection, ...) attribute_hidden;
extern int rpc_method_get_args(rpc_connection_t *connection, ...) attribute_hidden;
extern int rpc_method_send_reply(rpc_connection_t *connection, ...) attribute_hidden;
+extern bool rpc_method_in_invoke(rpc_connection_t *connection) attribute_hidden;
#ifdef __cplusplus
}

View File

@ -1,11 +0,0 @@
--- src/npw-common.h.orig 2009-01-02 15:22:29.000000000 +0100
+++ src/npw-common.h 2009-11-10 09:58:34.000000000 +0100
@@ -115,7 +115,7 @@ npw_plugin_instance_is_valid(void *ptr)
static inline NPW_PluginInstance *
_npw_get_plugin_instance (NPP instance)
{
- return (NPW_PluginInstance *)instance->_NPW_INSTANCE_PRIVATE_DATA;
+ return instance ? (NPW_PluginInstance *)instance->_NPW_INSTANCE_PRIVATE_DATA : NULL;
}
static inline NPW_PluginInstance *

View File

@ -1,13 +1,33 @@
--- ./src/npw-config.c.orig Sun Mar 4 23:01:22 2007
+++ ./src/npw-config.c Wed Apr 4 20:20:59 2007
@@ -119,8 +119,8 @@
--- src/npw-config.c.orig 2011-04-23 14:47:21.000000000 -0400
+++ src/npw-config.c 2011-04-25 17:46:44.000000000 -0400
@@ -186,8 +186,9 @@
#if defined(__FreeBSD__)
{
static const char *freebsd_dirs[] = {
- "/usr/X11R6/" LIB "/browser_plugins",
- "/usr/X11R6/" LIB "/firefox/plugins",
+ "/usr/local/" LIB "/browser_plugins",
+ "/usr/local/" LIB "/firefox/plugins",
+ "%%LOCALBASE%%/" LIB "/browser_plugins",
+ "%%LOCALBASE%%/" LIB "/firefox/plugins",
+ "%%LOCALBASE%%/" LIB "/seamonkey/plugins",
};
dirs = freebsd_dirs;
}
@@ -283,11 +284,13 @@
"/usr/lib32/nsbrowser/plugins", // XXX how unfortunate
"/usr/lib64/nsbrowser/plugins",
#if defined(__FreeBSD__)
- "/usr/X11R6/lib/browser_plugins",
- "/usr/X11R6/lib/firefox/plugins",
- "/usr/X11R6/lib/linux-mozilla/plugins",
- "/usr/local/lib/npapi/linux-flashplugin",
- "/usr/X11R6/Adobe/Acrobat7.0/ENU/Browser/intellinux",
+ "%%LOCALBASE%%/lib/browser_plugins",
+ "%%LOCALBASE%%/lib/firefox/plugins",
+ "%%LOCALBASE%%/lib/seamonkey/plugins",
+ "%%LOCALBASE%%/lib/npapi/linux-flashplugin",
+ "%%LOCALBASE%%/lib/npapi/linux-f10-flashplugin",
+ "%%LOCALBASE%%/Adobe/Acrobat7.0/ENU/Browser/intellinux",
+ "%%LOCALBASE%%/Adobe/Reader8/ENU/Adobe/Reader8/Browser/intellinux",
#endif
#if defined(__DragonFly__)
"/usr/pkg/lib/netscape/plugins",

View File

@ -1,10 +0,0 @@
--- ./src/npw-wrapper.c.orig Sun Mar 4 23:01:22 2007
+++ ./src/npw-wrapper.c Wed Apr 4 20:20:59 2007
@@ -28,6 +28,7 @@
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
+#include <signal.h>
#include <sys/wait.h>
#include <glib.h>

View File

@ -1,11 +0,0 @@
--- src/rpc.c.orig 2009-01-02 15:22:29.000000000 +0100
+++ src/rpc.c 2010-06-29 14:24:39.000000000 +0200
@@ -68,7 +68,7 @@
// Define the maximum amount of time (in seconds) to wait for a message
#ifndef RPC_MESSAGE_TIMEOUT
-#define RPC_MESSAGE_TIMEOUT 30
+#define RPC_MESSAGE_TIMEOUT 10
#endif
// Define the maximum amount of time (in seconds) to wait for plugin connection

View File

@ -3,4 +3,4 @@ The nspluginwrapper is an Open Source compatibility plugin for Netscape 4
not built for. For example, you can use the Adobe Flash plugin on Linux/x86_64,
NetBSD and FreeBSD platforms.
WWW: http://gwenole.beauchesne.info/projects/nspluginwrapper/
WWW: https://github.com/davidben/nspluginwrapper

View File

@ -4,7 +4,6 @@ bin/nspluginwrapper
%%LIBDIR%%/%%HOST_ARCH%%/freebsd/npplayer
%%LIBDIR%%/%%HOST_ARCH%%/freebsd/npwrapper.so
%%LIBDIR%%/i386/linux/libnoxshm.so
%%LIBDIR%%/i386/linux/libxpcom.so
%%LIBDIR%%/i386/linux/npviewer
%%LIBDIR%%/i386/linux/npviewer.bin
%%LIBDIR%%/noarch/npviewer.sh