diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2005-09-22 23:10:48 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2005-09-22 23:10:48 +0000 | 
| commit | 12862715c961bf6dabce2ed4e58da58e5dfe8c6b (patch) | |
| tree | 338a768117c0738d963024169dff4c22435428dd /src | |
| parent | c15d73bdb64196dee440476b5c3c031ee52c2373 (diff) | |
Fix errno overwrite problems
Diffstat (limited to 'src')
| -rw-r--r-- | src/hci.c | 13 | ||||
| -rw-r--r-- | src/sdp.c | 3 | 
2 files changed, 11 insertions, 5 deletions
@@ -647,21 +647,25 @@ int hci_for_each_dev(int flag, int (*func)(int dd, int dev_id, long arg), long a  	struct hci_dev_list_req *dl;  	struct hci_dev_req *dr;  	int dev_id = -1; -	int i, sk, err; +	int i, sk, err = 0;  	sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);  	if (sk < 0)  		return -1;  	dl = malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl)); -	if (!dl) +	if (!dl) { +		err = errno;  		goto done; +	}  	dl->dev_num = HCI_MAX_DEV;  	dr = dl->dev_req; -	if (ioctl(sk, HCIGETDEVLIST, (void *) dl) < 0) +	if (ioctl(sk, HCIGETDEVLIST, (void *) dl) < 0) { +		err = errno;  		goto free; +	}  	for (i = 0; i < dl->dev_num; i++, dr++) {  		if (hci_test_bit(flag, &dr->dev_opt)) @@ -672,13 +676,12 @@ int hci_for_each_dev(int flag, int (*func)(int dd, int dev_id, long arg), long a  	}  	if (dev_id < 0) -		errno = ENODEV; +		err = ENODEV;  free:  	free(dl);  done: -	err = errno;  	close(sk);  	errno = err; @@ -3160,6 +3160,7 @@ static inline int sdp_is_local(const bdaddr_t *device)  sdp_session_t *sdp_connect(const bdaddr_t *src, const bdaddr_t *dst, uint32_t flags)  { +	int err;  	sdp_session_t *session = malloc(sizeof(sdp_session_t));  	if (!session)  		return session; @@ -3204,8 +3205,10 @@ sdp_session_t *sdp_connect(const bdaddr_t *src, const bdaddr_t *dst, uint32_t fl  		}  	}  fail: +	err = errno;  	if (session->sock >= 0)  		close(session->sock);  	free(session); +	errno = err;  	return 0;  }  | 
