From 2d521d84042640574bf08ef0d531215923882224 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 27 Jun 2013 14:27:03 +0200 Subject: [PATCH] google-talk-plugin: Enable screen sharing --- .../google-talk-plugin/default.nix | 8 ++--- .../google-talk-plugin/preload.c | 32 +++++++++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/default.nix b/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/default.nix index 8cc62aa02db..0110dad9dc8 100644 --- a/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/default.nix +++ b/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/default.nix @@ -79,13 +79,13 @@ stdenv.mkDerivation rec { $plugins/libnpgtpo3dautoplugin.so mkdir -p $out/libexec/google/talkplugin - cp opt/google/talkplugin/GoogleTalkPlugin $out/libexec/google/talkplugin/ - + cp -prd opt/google/talkplugin/{GoogleTalkPlugin,locale,windowpicker.glade} $out/libexec/google/talkplugin/ + mkdir -p $out/libexec/google/talkplugin/lib cp opt/google/talkplugin/lib/libCg* $out/libexec/google/talkplugin/lib/ patchelf --set-rpath "$out/libexec/google/talkplugin/lib" \ - $out/libexec/google/talkplugin/lib/libCgGL.so + $out/libexec/google/talkplugin/lib/libCgGL.so patchelf \ --set-interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ @@ -102,7 +102,7 @@ stdenv.mkDerivation rec { dontStrip = true; dontPatchELF = true; - + passthru.mozillaPlugin = "/lib/mozilla/plugins"; meta = { diff --git a/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/preload.c b/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/preload.c index 9c543fed758..a643e39c31a 100644 --- a/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/preload.c +++ b/pkgs/applications/networking/browsers/mozilla-plugins/google-talk-plugin/preload.c @@ -12,8 +12,8 @@ #include #include -char origDir [] = "/opt/google/talkplugin/GoogleTalkPlugin"; -char realDir [] = OUT "/libexec/google/talkplugin/GoogleTalkPlugin"; +char origDir [] = "/opt/google/talkplugin"; +char realDir [] = OUT "/libexec/google/talkplugin"; const char * rewrite(const char * path, char * buf) { @@ -29,3 +29,31 @@ int execvp(const char * path, char * const argv[]) char buf[PATH_MAX]; return _execvp(rewrite(path, buf), argv); } + +int open(const char *path, int flags, ...) +{ + char buf[PATH_MAX]; + int (*_open) (const char *, int, mode_t) = dlsym(RTLD_NEXT, "open"); + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + } + return _open(rewrite(path, buf), flags, mode); +} + +int open64(const char *path, int flags, ...) +{ + char buf[PATH_MAX]; + int (*_open64) (const char *, int, mode_t) = dlsym(RTLD_NEXT, "open64"); + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + } + return _open64(rewrite(path, buf), flags, mode); +}