diff options
| -rw-r--r-- | hcid/Makefile.am | 2 | ||||
| -rw-r--r-- | hcid/hcid.h | 2 | ||||
| -rw-r--r-- | hcid/lib.c | 180 | ||||
| -rw-r--r-- | hcid/lib.h | 88 | ||||
| -rw-r--r-- | hcid/main.c | 78 | ||||
| -rw-r--r-- | hcid/security.c | 1 | 
6 files changed, 65 insertions, 286 deletions
| diff --git a/hcid/Makefile.am b/hcid/Makefile.am index 7d1f330a..385e2e5b 100644 --- a/hcid/Makefile.am +++ b/hcid/Makefile.am @@ -31,7 +31,7 @@ dbus_hcid_cflags  =  endif  hcid_SOURCES = main.c security.c device.c logging.c storage.c \ -		sdp.c sdp.h lib.c lib.h hcid.h parser.h parser.y \ +		sdp.c sdp.h hcid.h parser.h parser.y \  		lexer.l kword.c kword.h $(dbus_hcid_sources) \  		$(top_builddir)/tools/oui.h $(top_builddir)/tools/oui.c diff --git a/hcid/hcid.h b/hcid/hcid.h index cf8ab91a..e8765eae 100644 --- a/hcid/hcid.h +++ b/hcid/hcid.h @@ -87,7 +87,7 @@ struct device_list {  };  struct hcid_opts { -	char   *host_name; +	char    host_name[40];  	int     auto_init;  	int     security;  	int     pairing; diff --git a/hcid/lib.c b/hcid/lib.c deleted file mode 100644 index e52e9b37..00000000 --- a/hcid/lib.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * - *  BlueZ - Bluetooth protocol stack for Linux - * - *  Copyright (C) 2000-2001  Qualcomm Incorporated - *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com> - *  Copyright (C) 2002-2006  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 as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdio.h> -#include <errno.h> -#include <unistd.h> -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <signal.h> -#include <sys/socket.h> - -#include <bluetooth/bluetooth.h> -#include <bluetooth/hci.h> -#include <bluetooth/hci_lib.h> - -#include "hcid.h" -#include "lib.h" - -volatile sig_atomic_t __io_canceled; - -/*  - * Device name expansion  - *   %d - device id - */ -char *expand_name(char *dst, int size, char *str, int dev_id) -{ -	register int sp, np, olen; -	char *opt, buf[10]; - -	if (!str && !dst) -		return NULL; - -	sp = np = 0; -	while (np < size - 1 && str[sp]) { -		switch (str[sp]) { -		case '%': -			opt = NULL; - -			switch (str[sp+1]) { -			case 'd': -				sprintf(buf, "%d", dev_id); -				opt = buf; -				break; - -			case 'h': -				opt = hcid.host_name; -				break; - -			case '%': -				dst[np++] = str[sp++]; -				/* fall through */ -			default: -				sp++; -				continue; -			} - -			if (opt) { -				/* substitute */ -				olen = strlen(opt); -				if (np + olen < size - 1) -					memcpy(dst + np, opt, olen); -				np += olen; -			} -			sp += 2; -			continue; - -		case '\\': -			sp++; -			/* fall through */ -		default: -			dst[np++] = str[sp++]; -			break; -		} -	} -	dst[np] = '\0'; -	return dst; -} - -/* Returns current host name */ -char *get_host_name(void) -{ -	char name[40]; - -	if (!gethostname(name, sizeof(name)-1)) { -		name[sizeof(name)-1] = 0; -		return strdup(name); -	} -	return strdup("noname"); -} - -/* Functions to manipulate program title */ -extern char **environ; -char	*title_start;	/* start of the proc title space */ -char	*title_end;	/* end of the proc title space */ -int	title_size; - -void init_title(int argc, char *argv[], char *envp[], const char *name) -{ -	int i; - -	/* -	 *  Move the environment so settitle can use the space at -	 *  the top of memory. -	 */ - -	for (i = 0; envp[i]; i++); - -	environ = (char **) malloc(sizeof (char *) * (i + 1)); - -	for (i = 0; envp[i]; i++) -		environ[i] = strdup(envp[i]); -	environ[i] = NULL; - -	/* -	 *  Save start and extent of argv for set_title. -	 */ - -	title_start = argv[0]; - -	/* -	 *  Determine how much space we can use for set_title.   -	 *  Use all contiguous argv and envp pointers starting at argv[0] -		 */ -	for (i  =0; i < argc; i++) -		if (!i || title_end == argv[i]) -			title_end = argv[i] + strlen(argv[i]) + 1; - -	for (i = 0; envp[i]; i++) -		if (title_end == envp[i]) -			title_end = envp[i] + strlen(envp[i]) + 1; - -	strcpy(title_start, name); -	title_start += strlen(name); -	title_size = title_end - title_start; -} - -void set_title(const char *fmt, ...) -{ -	char buf[255]; -	va_list ap; - -	memset(title_start, 0, title_size); - -	/* print the argument string */ -	va_start(ap, fmt); -	vsprintf(buf, fmt, ap); -	va_end(ap); - -	if (strlen(buf) > title_size - 1) -		buf[title_size - 1] = '\0'; - -	strcat(title_start, buf); -} diff --git a/hcid/lib.h b/hcid/lib.h deleted file mode 100644 index 74687fad..00000000 --- a/hcid/lib.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * - *  BlueZ - Bluetooth protocol stack for Linux - * - *  Copyright (C) 2000-2001  Qualcomm Incorporated - *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com> - *  Copyright (C) 2002-2006  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 as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA - * - */ - -#include <errno.h> - -char *expand_name(char *dst, int size, char *str, int dev_id); - -char *get_host_name(void); - -void init_title(int argc, char *argv[], char *env[], const char *name); -void set_title(const char *ftm, ...); - -/* IO cancelation */ -extern volatile sig_atomic_t __io_canceled; - -static inline void io_init(void) -{ -	__io_canceled = 0; -} - -static inline void io_cancel(void) -{ -	__io_canceled = 1; -} - -/* Read exactly len bytes (Signal safe)*/ -static inline int read_n(int fd, void *buf, int len) -{ -	register int w, t = 0; - -	while (!__io_canceled && len > 0) { -		if ((w = read(fd, buf, len)) < 0) { -			if (errno == EINTR || errno == EAGAIN) -				continue; -			return -1; -		} -		if (!w) -			return 0; -		len -= w; -		buf += w; -		t += w; -	} - -	return t; -} - -/* Write exactly len bytes (Signal safe)*/ -static inline int write_n(int fd, void *buf, int len) -{ -	register int w, t = 0; - -	while (!__io_canceled && len > 0) { -		if ((w = write(fd, buf, len)) < 0) { -			if (errno == EINTR || errno == EAGAIN) -				continue; -			return -1; -		} -		if (!w) -			return 0; -		len -= w; -		buf += w; -		t += w; -	} - -	return t; -} diff --git a/hcid/main.c b/hcid/main.c index d3ff01c5..dc477efb 100644 --- a/hcid/main.c +++ b/hcid/main.c @@ -45,7 +45,6 @@  #include "glib-ectomy.h"  #include "hcid.h" -#include "lib.h"  #include "sdp.h"  struct hcid_opts hcid; @@ -191,6 +190,64 @@ no_address:  	return device_opts->discovto;  } +/*  + * Device name expansion  + *   %d - device id + */ +static char *expand_name(char *dst, int size, char *str, int dev_id) +{ +	register int sp, np, olen; +	char *opt, buf[10]; + +	if (!str && !dst) +		return NULL; + +	sp = np = 0; +	while (np < size - 1 && str[sp]) { +		switch (str[sp]) { +		case '%': +			opt = NULL; + +			switch (str[sp+1]) { +			case 'd': +				sprintf(buf, "%d", dev_id); +				opt = buf; +				break; + +			case 'h': +				opt = hcid.host_name; +				break; + +			case '%': +				dst[np++] = str[sp++]; +				/* fall through */ +			default: +				sp++; +				continue; +			} + +			if (opt) { +				/* substitute */ +				olen = strlen(opt); +				if (np + olen < size - 1) +					memcpy(dst + np, opt, olen); +				np += olen; +			} +			sp += 2; +			continue; + +		case '\\': +			sp++; +			/* fall through */ +		default: +			dst[np++] = str[sp++]; +			break; +		} +	} +	dst[np] = '\0'; +	return dst; +} +  static void configure_device(int hdev)  {  	struct device_opts *device_opts; @@ -210,8 +267,6 @@ static void configure_device(int hdev)  			return;  	} -	set_title("hci%d config", hdev); -  	if ((s = hci_open_dev(hdev)) < 0) {  		error("Can't open device hci%d: %s (%d)",  						hdev, strerror(errno), errno); @@ -388,8 +443,6 @@ static void init_device(int hdev)  			return;  	} -	set_title("hci%d init", hdev); -  	if ((s = hci_open_dev(hdev)) < 0) {  		error("Can't open device hci%d: %s (%d)",  						hdev, strerror(errno), errno); @@ -595,10 +648,7 @@ static gboolean io_stack_event(GIOChannel *chan, GIOCondition cond, gpointer dat  	return TRUE;  } -extern int optind, opterr, optopt; -extern char *optarg; - -int main(int argc, char *argv[], char *env[]) +int main(int argc, char *argv[])  {  	struct sockaddr_hci addr;  	struct hci_filter flt; @@ -607,12 +657,15 @@ int main(int argc, char *argv[], char *env[])  	int opt, daemonize = 1, sdp = 0;  	/* Default HCId settings */ +	memset(&hcid, 0, sizeof(hcid));  	hcid.auto_init   = 1;  	hcid.config_file = HCID_CONFIG_FILE; -	hcid.host_name   = get_host_name();  	hcid.security    = HCID_SEC_AUTO;  	hcid.pairing     = HCID_PAIRING_MULTI; +	if (gethostname(hcid.host_name, sizeof(hcid.host_name) - 1) < 0) +		strcpy(hcid.host_name, "noname"); +  	strcpy((char *) hcid.pin_code, "BlueZ");  	hcid.pin_len = 5; @@ -645,9 +698,6 @@ int main(int argc, char *argv[], char *env[])  	umask(0077); -	init_title(argc, argv, env, "hcid: "); -	set_title("initializing"); -  	start_logging("hcid", "Bluetooth HCI daemon");  	memset(&sa, 0, sizeof(sa)); @@ -709,8 +759,6 @@ int main(int argc, char *argv[], char *env[])  	/* Initialize already connected devices */  	init_all_devices(hcid.sock); -	set_title("processing events"); -  	ctl_io = g_io_channel_unix_new(hcid.sock);  	g_io_add_watch(ctl_io, G_IO_IN, io_stack_event, NULL); diff --git a/hcid/security.c b/hcid/security.c index 199b93d3..6de61c67 100644 --- a/hcid/security.c +++ b/hcid/security.c @@ -48,7 +48,6 @@  #include "glib-ectomy.h"  #include "hcid.h" -#include "lib.h"  #include "textfile.h"  #include "list.h" | 
