Date: Thursday, November 18, 2010 @ 16:08:51
  Author: andrea
Revision: 99856

upgpkg: bluez 4.79-2
fix Apple keyboards (FS#21696)

Added:
  bluez/trunk/fix-apple-keyboard.patch
Modified:
  bluez/trunk/PKGBUILD

--------------------------+
 PKGBUILD                 |   12 +++++-
 fix-apple-keyboard.patch |   79 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2010-11-18 20:54:25 UTC (rev 99855)
+++ PKGBUILD    2010-11-18 21:08:51 UTC (rev 99856)
@@ -4,7 +4,7 @@
 
 pkgname=bluez
 pkgver=4.79
-pkgrel=1
+pkgrel=2
 pkgdesc="Libraries and tools for the Bluetooth protocol stack"
 url="http://www.bluez.org/";
 arch=('i686' 'x86_64')
@@ -26,13 +26,19 @@
         etc/conf.d/bluetooth)
 
source=("http://www.kernel.org/pub/linux/bluetooth/${pkgname}-${pkgver}.tar.bz2";
         'bluetooth.conf.d'
-        'rc.bluetooth')
+        'rc.bluetooth'
+        'fix-apple-keyboard.patch')
 md5sums=('2f96efd23e15acaeebf5f0085b19582d'
          '8f60a5eb9d84b9c64c478d63e1c24b10'
-         'ca4c39eb4bb201bd2eacad01492cd735')
+         'ca4c39eb4bb201bd2eacad01492cd735'
+         'a1b9182ff8454e752dedc1159053df32')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
+
+  # Already fixed upstream
+  patch -Np1 -i ${srcdir}/fix-apple-keyboard.patch
+
   ./configure --prefix=/usr \
     --sysconfdir=/etc \
     --localstatedir=/var \

Added: fix-apple-keyboard.patch
===================================================================
--- fix-apple-keyboard.patch                            (rev 0)
+++ fix-apple-keyboard.patch    2010-11-18 21:08:51 UTC (rev 99856)
@@ -0,0 +1,79 @@
+diff --git a/plugins/hciops.c b/plugins/hciops.c
+index 9d25558..8feb392 100644
+--- a/plugins/hciops.c
++++ b/plugins/hciops.c
+@@ -338,31 +338,37 @@ static int hciops_encrypt_link(int index, bdaddr_t *dst, 
bt_hci_result_t cb,
+       uint32_t link_mode;
+       uint16_t handle;
+ 
++      dd = hci_open_dev(index);
++      if (dd < 0)
++              return -errno;
++
+       cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
+       cr->type = ACL_LINK;
+       bacpy(&cr->bdaddr, dst);
+ 
+-      err = ioctl(SK(index), HCIGETCONNINFO, cr);
++      err = ioctl(dd, HCIGETCONNINFO, cr);
+       link_mode = cr->conn_info->link_mode;
+       handle = cr->conn_info->handle;
+       g_free(cr);
+ 
+-      if (err < 0)
+-              return -errno;
++      if (err < 0) {
++              err = -errno;
++              goto fail;
++      }
+ 
+-      if (link_mode & HCI_LM_ENCRYPT)
+-              return -EALREADY;
++      if (link_mode & HCI_LM_ENCRYPT) {
++              err = -EALREADY;
++              goto fail;
++      }
+ 
+       memset(&cp, 0, sizeof(cp));
+       cp.handle = htobs(handle);
+ 
+-      if (hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_AUTH_REQUESTED,
+-                              AUTH_REQUESTED_CP_SIZE, &cp) < 0)
+-              return -errno;
+-
+-      dd = dup(SK(index));
+-      if (dd < 0)
+-              return -errno;
++      if (hci_send_cmd(dd, OGF_LINK_CTL, OCF_AUTH_REQUESTED,
++                              AUTH_REQUESTED_CP_SIZE, &cp) < 0) {
++              err = -errno;
++              goto fail;
++      }
+ 
+       cmd = g_new0(struct hci_cmd_data, 1);
+       cmd->handle = handle;
+@@ -379,11 +385,10 @@ static int hciops_encrypt_link(int index, bdaddr_t *dst, 
bt_hci_result_t cb,
+       if (setsockopt(dd, SOL_HCI, HCI_FILTER, &nf, sizeof(nf)) < 0) {
+               err = -errno;
+               g_free(cmd);
+-              close(dd);
+-              return -err;
++              goto fail;
+       }
+ 
+-      io = g_io_channel_unix_new(dup(SK(index)));
++      io = g_io_channel_unix_new(dd);
+       g_io_channel_set_close_on_unref(io, FALSE);
+       g_io_add_watch_full(io, G_PRIORITY_DEFAULT,
+                       G_IO_HUP | G_IO_ERR | G_IO_NVAL | G_IO_IN,
+@@ -391,6 +396,10 @@ static int hciops_encrypt_link(int index, bdaddr_t *dst, 
bt_hci_result_t cb,
+       g_io_channel_unref(io);
+ 
+       return 0;
++
++fail:
++      close(dd);
++      return err;
+ }
+ 
+ /* End async HCI command handling */

Reply via email to