summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2004-04-03 05:11:38 +0000
committerMarcel Holtmann <marcel@holtmann.org>2004-04-03 05:11:38 +0000
commit764abe23a0d4ede999f1f34ee0e310c0eeaaff79 (patch)
treedb0e191b5f1a993664a826f8192554674c1a5f0d /src
parent6a82272dbce1c29fd3742ddd15e841933e605681 (diff)
Update copyright information
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth.c76
-rw-r--r--src/hci.c155
-rw-r--r--src/sdp.c61
3 files changed, 159 insertions, 133 deletions
diff --git a/src/bluetooth.c b/src/bluetooth.c
index a57809d7..61a632a5 100644
--- a/src/bluetooth.c
+++ b/src/bluetooth.c
@@ -1,31 +1,37 @@
-/*
- BlueZ - Bluetooth protocol stack for Linux
- Copyright (C) 2000-2001 Qualcomm Incorporated
-
- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation;
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
- SOFTWARE IS DISCLAIMED.
-*/
-
/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2000-2001 Qualcomm Incorporated
+ * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
+ * Copyright (C) 2002-2004 Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+ * SOFTWARE IS DISCLAIMED.
+ *
+ *
* $Id$
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -37,10 +43,10 @@
void baswap(bdaddr_t *dst, const bdaddr_t *src)
{
- register unsigned char *d = (unsigned char *)dst;
- register const unsigned char *s = (const unsigned char *)src;
+ register unsigned char *d = (unsigned char *) dst;
+ register const unsigned char *s = (const unsigned char *) src;
register int i;
- for(i=0; i<6; i++)
+ for (i = 0; i < 6; i++)
d[i] = s[5-i];
}
@@ -51,7 +57,7 @@ char *batostr(const bdaddr_t *ba)
return NULL;
sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
- ba->b[0], ba->b[1], ba->b[2],
+ ba->b[0], ba->b[1], ba->b[2],
ba->b[3], ba->b[4], ba->b[5]);
return str;
}
@@ -65,9 +71,9 @@ bdaddr_t *strtoba(const char *str)
if (!ba)
return NULL;
- for(i=0; i<6; i++){
+ for(i = 0; i < 6; i++) {
ba[i] = (uint8_t) strtol(ptr, NULL, 16);
- if( i!=5 && !(ptr=strchr(ptr,':')) )
+ if (i != 5 && !(ptr = strchr(ptr,':')))
ptr = ":00:00:00:00:00";
ptr++;
}
@@ -78,9 +84,9 @@ int ba2str(const bdaddr_t *ba, char *str)
{
uint8_t b[6];
- baswap((bdaddr_t *)b, ba);
+ baswap((bdaddr_t *) b, ba);
return sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
- b[0], b[1], b[2], b[3], b[4], b[5]);
+ b[0], b[1], b[2], b[3], b[4], b[5]);
}
int str2ba(const char *str, bdaddr_t *ba)
@@ -89,13 +95,13 @@ int str2ba(const char *str, bdaddr_t *ba)
const char *ptr = str;
int i;
- for (i=0; i < 6; i++) {
+ for (i = 0; i < 6; i++) {
b[i] = (uint8_t) strtol(ptr, NULL, 16);
- if (i!=5 && !(ptr=strchr(ptr, ':')))
+ if (i != 5 && !(ptr = strchr(ptr, ':')))
ptr = ":00:00:00:00:00";
ptr++;
}
- baswap(ba, (bdaddr_t *)b);
+ baswap(ba, (bdaddr_t *) b);
return 0;
}
diff --git a/src/hci.c b/src/hci.c
index 1530f395..e2184cbb 100644
--- a/src/hci.c
+++ b/src/hci.c
@@ -1,30 +1,37 @@
-/*
- BlueZ - Bluetooth protocol stack for Linux
- Copyright (C) 2000-2001 Qualcomm Incorporated
-
- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation;
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
- SOFTWARE IS DISCLAIMED.
-*/
-
/*
- * $Id$
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2000-2001 Qualcomm Incorporated
+ * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
+ * Copyright (C) 2002-2004 Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+ * SOFTWARE IS DISCLAIMED.
+ *
+ *
+ * $Id$
*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -64,7 +71,7 @@ static char *hci_bit2str(hci_map *m, unsigned int val)
if ((unsigned int) m->val & val)
ptr += sprintf(ptr, "%s ", m->str);
m++;
- }
+ }
return str;
}
@@ -79,14 +86,14 @@ static int hci_str2bit(hci_map *map, char *str, unsigned int *val)
*val = set = 0;
- while ((t=strsep(&ptr, ","))) {
- for (m=map; m->str; m++) {
- if (!strcasecmp(m->str,t)) {
+ while ((t = strsep(&ptr, ","))) {
+ for (m = map; m->str; m++) {
+ if (!strcasecmp(m->str, t)) {
*val |= (unsigned int) m->val;
set = 1;
}
}
- }
+ }
free(str);
return set;
@@ -107,7 +114,7 @@ static char *hci_uint2str(hci_map *m, unsigned int val)
break;
}
m++;
- }
+ }
return str;
}
@@ -122,14 +129,14 @@ static int hci_str2uint(hci_map *map, char *str, unsigned int *val)
str = ptr = strdup(str);
- while ((t=strsep(&ptr, ","))) {
- for (m=map; m->str; m++) {
+ while ((t = strsep(&ptr, ","))) {
+ for (m = map; m->str; m++) {
if (!strcasecmp(m->str,t)) {
*val = (unsigned int) m->val; set = 1;
break;
}
}
- }
+ }
free(str);
return set;
@@ -156,7 +163,7 @@ char *hci_dtypetostr(int type)
}
/* HCI dev flags mapping */
-hci_map dev_flags_map[] = {
+static hci_map dev_flags_map[] = {
{ "UP", HCI_UP },
{ "INIT", HCI_INIT },
{ "RUNNING", HCI_RUNNING },
@@ -168,6 +175,7 @@ hci_map dev_flags_map[] = {
{ "ENCRYPT", HCI_ENCRYPT },
{ NULL }
};
+
char *hci_dflagstostr(uint32_t flags)
{
char *str = malloc(50);
@@ -191,7 +199,7 @@ char *hci_dflagstostr(uint32_t flags)
}
/* HCI packet type mapping */
-hci_map pkt_type_map[] = {
+static hci_map pkt_type_map[] = {
{ "DM1", HCI_DM1 },
{ "DM3", HCI_DM3 },
{ "DM5", HCI_DM5 },
@@ -203,17 +211,19 @@ hci_map pkt_type_map[] = {
{ "HV3", HCI_HV3 },
{ NULL }
};
+
char *hci_ptypetostr(unsigned int ptype)
{
return hci_bit2str(pkt_type_map, ptype);
}
+
int hci_strtoptype(char *str, unsigned int *val)
{
return hci_str2bit(pkt_type_map, str, val);
}
/* Link policy mapping */
-hci_map link_policy_map[] = {
+static hci_map link_policy_map[] = {
{ "NONE", 0 },
{ "RSWITCH", HCI_LP_RSWITCH },
{ "HOLD", HCI_LP_HOLD },
@@ -221,17 +231,19 @@ hci_map link_policy_map[] = {
{ "PARK", HCI_LP_PARK },
{ NULL }
};
+
char *hci_lptostr(unsigned int lp)
{
return hci_bit2str(link_policy_map, lp);
}
+
int hci_strtolp(char *str, unsigned int *val)
{
return hci_str2bit(link_policy_map, str, val);
}
/* Link mode mapping */
-hci_map link_mode_map[] = {
+static hci_map link_mode_map[] = {
{ "NONE", 0 },
{ "ACCEPT", HCI_LM_ACCEPT },
{ "MASTER", HCI_LM_MASTER },
@@ -240,6 +252,7 @@ hci_map link_mode_map[] = {
{ "TRUSTED", HCI_LM_TRUSTED},
{ NULL }
};
+
char *hci_lmtostr(unsigned int lm)
{
char *s, *str = malloc(50);
@@ -260,23 +273,26 @@ char *hci_lmtostr(unsigned int lm)
free(s);
return str;
}
+
int hci_strtolm(char *str, unsigned int *val)
{
return hci_str2bit(link_mode_map, str, val);
}
/* Version mapping */
-hci_map ver_map[] = {
+static hci_map ver_map[] = {
{ "1.0b", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ NULL }
};
+
char *hci_vertostr(unsigned int ver)
{
char *str = hci_uint2str(ver_map, ver);
return *str ? str : "n/a";
}
+
int hci_strtover(char *str, unsigned int *ver)
{
return hci_str2uint(ver_map, str, ver);
@@ -287,13 +303,14 @@ char *lmp_vertostr(unsigned int ver)
char *str = hci_uint2str(ver_map, ver);
return *str ? str : "n/a";
}
+
int lmp_strtover(char *str, unsigned int *ver)
{
return hci_str2uint(ver_map, str, ver);
}
/* LMP features mapping */
-hci_map lmp_features_map[8][9] = {
+static hci_map lmp_features_map[8][9] = {
{ /* byte 0 */
{ "<3-slot packets>", LMP_3SLOT },
{ "<5-slot packets>", LMP_5SLOT },
@@ -341,7 +358,7 @@ hci_map lmp_features_map[8][9] = {
},
{ /* byte 5 */
{ "<AFH cap. master>", LMP_AFH_CAP_MST },
- { "<AFH class. master>",LMP_AFH_CLS_MST },
+ { "<AFH class. master>",LMP_AFH_CLS_MST },
{ NULL }
},
{ /* byte 6 */
@@ -366,7 +383,7 @@ char *lmp_featurestostr(uint8_t *features, char *pref, int width)
if (pref)
ptr += sprintf(ptr, "%s", pref);
- for(i=0, w=0; i<8; i++) {
+ for (i = 0, w = 0; i < 8; i++) {
hci_map *m;
m = lmp_features_map[i];
@@ -386,7 +403,7 @@ char *lmp_featurestostr(uint8_t *features, char *pref, int width)
/* HCI functions that do not require open device */
-int hci_for_each_dev(int flag, int(*func)(int s, int dev_id, long arg), long arg)
+int hci_for_each_dev(int flag, int (*func)(int s, int dev_id, long arg), long arg)
{
struct hci_dev_list_req *dl;
struct hci_dev_req *dr;
@@ -402,13 +419,13 @@ int hci_for_each_dev(int flag, int(*func)(int s, int dev_id, long arg), long arg
close(s);
return -1;
}
-
+
dl->dev_num = HCI_MAX_DEV;
dr = dl->dev_req;
if (ioctl(s, HCIGETDEVLIST, (void *)dl))
goto done;
-
+
for (i=0; i < dl->dev_num; i++, dr++) {
if (hci_test_bit(flag, &dr->dev_opt))
if (!func || func(s, dr->dev_id, arg)) {
@@ -417,7 +434,7 @@ int hci_for_each_dev(int flag, int(*func)(int s, int dev_id, long arg), long arg
}
}
-done:
+done:
close(s);
free(dl);
return dev_id;
@@ -426,17 +443,17 @@ done:
static int __other_bdaddr(int s, int dev_id, long arg)
{
struct hci_dev_info di = {dev_id: dev_id};
- if (ioctl(s, HCIGETDEVINFO, (void*) &di))
+ if (ioctl(s, HCIGETDEVINFO, (void *) &di))
return 0;
- return bacmp((bdaddr_t *)arg, &di.bdaddr);
+ return bacmp((bdaddr_t *) arg, &di.bdaddr);
}
static int __same_bdaddr(int s, int dev_id, long arg)
{
struct hci_dev_info di = {dev_id: dev_id};
- if (ioctl(s, HCIGETDEVINFO, (void*) &di))
+ if (ioctl(s, HCIGETDEVINFO, (void *) &di))
return 0;
- return !bacmp((bdaddr_t *)arg, &di.bdaddr);
+ return !bacmp((bdaddr_t *) arg, &di.bdaddr);
}
int hci_get_route(bdaddr_t *bdaddr)
@@ -502,7 +519,7 @@ int hci_inquiry(int dev_id, int len, int nrsp, const uint8_t *lap, inquiry_info
int s, err;
if (nrsp <= 0)
- nrsp = 200; // enough ?
+ nrsp = 200; /* enough ? */
if (dev_id < 0 && (dev_id = hci_get_route(NULL)) < 0) {
errno = ENODEV;
@@ -563,11 +580,11 @@ int hci_open_dev(int dev_id)
dd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
if (dd < 0)
return dd;
-
+
/* Bind socket to the HCI device */
a.hci_family = AF_BLUETOOTH;
a.hci_dev = dev_id;
- if (bind(dd, (struct sockaddr *)&a, sizeof(a)) < 0)
+ if (bind(dd, (struct sockaddr *) &a, sizeof(a)) < 0)
goto failed;
return dd;
@@ -645,7 +662,7 @@ int hci_send_req(int dd, struct hci_request *r, int to)
while (try--) {
evt_cmd_complete *cc;
evt_cmd_status *cs;
-
+
if (to) {
struct pollfd p;
int n;
@@ -661,7 +678,7 @@ int hci_send_req(int dd, struct hci_request *r, int to)
errno = ETIMEDOUT;
goto failed;
}
-
+
to -= 10;
if (to < 0) to = 0;
@@ -673,17 +690,17 @@ int hci_send_req(int dd, struct hci_request *r, int to)
goto failed;
}
- hdr = (void *)(buf + 1);
+ hdr = (void *) (buf + 1);
ptr = buf + (1 + HCI_EVENT_HDR_SIZE);
len -= (1 + HCI_EVENT_HDR_SIZE);
switch (hdr->evt) {
case EVT_CMD_STATUS:
- cs = (void *)ptr;
-
+ cs = (void *) ptr;
+
if (cs->opcode != opcode)
continue;
-
+
if (cs->status) {
errno = EIO;
goto failed;
@@ -691,11 +708,11 @@ int hci_send_req(int dd, struct hci_request *r, int to)
break;
case EVT_CMD_COMPLETE:
- cc = (void *)ptr;
+ cc = (void *) ptr;
if (cc->opcode != opcode)
continue;
-
+
ptr += EVT_CMD_COMPLETE_SIZE;
len -= EVT_CMD_COMPLETE_SIZE;
@@ -706,7 +723,7 @@ int hci_send_req(int dd, struct hci_request *r, int to)
default:
if (hdr->evt != r->event)
break;
-
+
r->rlen = MIN(len, r->rlen);
memcpy(r->rparam, ptr, r->rlen);
goto done;
@@ -994,21 +1011,21 @@ int hci_read_class_of_dev(int dd, uint8_t *cls, int to)
{
read_class_of_dev_rp rp;
struct hci_request rq;
-
+
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_HOST_CTL;
rq.ocf = OCF_READ_CLASS_OF_DEV;
rq.rparam = &rp;
rq.rlen = READ_CLASS_OF_DEV_RP_SIZE;
-
+
if (hci_send_req(dd, &rq, to) < 0)
return -1;
-
+
if (rp.status) {
errno = EIO;
return -1;
}
-
+
memcpy(cls, rp.dev_class, 3);
return 0;
}
@@ -1070,7 +1087,7 @@ int hci_read_current_iac_lap(int dd, uint8_t *num_iac, uint8_t *lap, int to)
{
read_current_iac_lap_rp rp;
struct hci_request rq;
-
+
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_HOST_CTL;
rq.ocf = OCF_READ_CURRENT_IAC_LAP;
@@ -1094,11 +1111,11 @@ int hci_write_current_iac_lap(int dd, uint8_t num_iac, uint8_t *lap, int to)
{
write_current_iac_lap_cp cp;
struct hci_request rq;
-
+
memset(&cp, 0, sizeof(cp));
cp.num_current_iac = num_iac;
memcpy(&cp.lap, lap, num_iac * 3);
-
+
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_HOST_CTL;
rq.ocf = OCF_WRITE_CURRENT_IAC_LAP;
diff --git a/src/sdp.c b/src/sdp.c
index cbc68193..6740e9d6 100644
--- a/src/sdp.c
+++ b/src/sdp.c
@@ -1,35 +1,38 @@
-/*
- BlueZ - Bluetooth protocol stack for Linux
- Copyright (C) 2000-2001 Qualcomm Incorporated
-
- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
-
- Based on an original SDP implementation by Nokia Corporation.
- Copyright (C) 2001,2002 Nokia Corporation.
- Original author Guruprasad Krishnamurthy <guruprasad.krishnamurthy@nokia.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation;
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
- SOFTWARE IS DISCLAIMED.
-*/
-
/*
- * $Id$
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2001-2002 Nokia Corporation
+ * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
+ * Copyright (C) 2002-2004 Marcel Holtmann <marcel@holtmann.org>
+ * Copyright (C) 2002-2003 Stephen Crane <steve.crane@rococosoft.com>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+ * SOFTWARE IS DISCLAIMED.
+ *
+ *
+ * $Id$
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <errno.h>
#include <unistd.h>