static gboolean plugin_loader_load (GstPluginLoader * loader,
const gchar * filename, off_t file_size, time_t file_mtime);
+/* functions used in GstRegistry scanning */
const GstPluginLoaderFuncs _priv_gst_plugin_loader_funcs = {
plugin_loader_new, plugin_loader_free, plugin_loader_load
};
typedef struct _PendingPluginEntry
{
+ /* sequence number */
guint32 tag;
gchar *filename;
off_t file_size;
guint tx_buf_write;
guint tx_buf_read;
+ /* next sequence number (for PendingPluginEntry) */
guint32 next_tag;
guint8 *rx_buf;
l->got_plugin_details = TRUE;
/* Now remove this crashy plugin from the head of the list */
l->pending_plugins = g_list_delete_link (cur, cur);
+ g_free (entry->filename);
+ g_slice_free (PendingPluginEntry, entry);
if (l->pending_plugins == NULL)
l->pending_plugins_tail = NULL;
if (!gst_plugin_loader_spawn (l))
plugin->basename = g_path_get_basename (plugin->filename);
plugin->desc.name = g_intern_string (plugin->basename);
- plugin->desc.description = g_strdup_printf ("Plugin for blacklisted file");
- plugin->desc.version = g_intern_string ("0.0.0");
- plugin->desc.license = g_intern_string ("BLACKLIST");
+ plugin->desc.description = "Plugin for blacklisted file";
+ plugin->desc.version = "0.0.0";
+ plugin->desc.license = "BLACKLIST";
plugin->desc.source = plugin->desc.license;
plugin->desc.package = plugin->desc.license;
plugin->desc.origin = plugin->desc.license;
static gboolean
gst_plugin_loader_try_helper (GstPluginLoader * loader, gchar * location)
{
+#ifdef __APPLE__
+#if defined(__x86_64__)
+ char *argv[] = { (char *) "/usr/bin/arch", (char *) "-x86_64",
+ location, (char *) "-l", NULL
+ };
+#elif defined(__i386__)
+ char *argv[] = { (char *) "/usr/bin/arch", (char *) "-i386",
+ location, (char *) "-l", NULL
+ };
+#elif defined(__ppc__)
+ char *argv[] = { (char *) "/usr/bin/arch", (char *) "-ppc",
+ location, (char *) "-l", NULL
+ };
+#elif defined(__ppc64__)
+ char *argv[] = { (char *) "/usr/bin/arch", (char *) "-ppc64",
+ location, (char *) "-l", NULL
+ };
+#endif
+#else /* ! __APPLE__ */
char *argv[] = { location, (char *) "-l", NULL };
+#endif
+
+#ifdef __APPLE__
+ GST_LOG ("Trying to spawn gst-plugin-scanner helper at %s with arch %s",
+ location, argv[1]);
+#else
GST_LOG ("Trying to spawn gst-plugin-scanner helper at %s", location);
+#endif
+
if (!g_spawn_async_with_pipes (NULL, argv, NULL,
G_SPAWN_DO_NOT_REAP_CHILD /* | G_SPAWN_STDERR_TO_DEV_NULL */ ,
NULL, NULL, &loader->child_pid, &loader->fd_w.fd, &loader->fd_r.fd,
case PACKET_EXIT:
gst_poll_fd_ctl_read (l->fdset, &l->fd_r, FALSE);
if (l->is_child) {
- /* Respond, then we keep looping until the parent closes the fd */
+ /* Respond */
put_packet (l, PACKET_EXIT, 0, NULL, 0);
- } else {
- l->rx_done = TRUE; /* All done reading from child */
}
+ l->rx_done = TRUE;
return TRUE;
case PACKET_LOAD_PLUGIN:{
if (!l->is_child)