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 */