diff options
| -rw-r--r-- | Makefile.am | 3 | ||||
| -rw-r--r-- | common/Makefile.am | 9 | ||||
| -rw-r--r-- | common/textfile.c | 100 | ||||
| -rw-r--r-- | common/textfile.h | 29 | ||||
| -rw-r--r-- | configure.in | 2 | 
5 files changed, 141 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am index 251d8da1..49650733 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,8 @@  #  $Id$  # -SUBDIRS = hcid tools rfcomm sdpd dund pand hidd cups alsa test scripts pcmcia extra +SUBDIRS = common tools rfcomm hcid sdpd dund pand hidd \ +	cups alsa test scripts pcmcia extra  MAINTAINERCLEANFILES = Makefile.in \  	aclocal.m4 configure config.h.in config.sub config.guess \ diff --git a/common/Makefile.am b/common/Makefile.am new file mode 100644 index 00000000..ffcddf6e --- /dev/null +++ b/common/Makefile.am @@ -0,0 +1,9 @@ +#   +#  $Id$ +# + +noinst_LIBRARIES = libtextfile.a + +libtextfile_a_SOURCES = textfile.h textfile.c + +MAINTAINERCLEANFILES = Makefile.in diff --git a/common/textfile.c b/common/textfile.c new file mode 100644 index 00000000..6f84cfa9 --- /dev/null +++ b/common/textfile.c @@ -0,0 +1,100 @@ +/* + * + *  BlueZ - Bluetooth protocol stack for Linux + * + *  Copyright (C) 2004-2005  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 <errno.h> +#include <fcntl.h> +#include <unistd.h> +#include <malloc.h> +#include <string.h> +#include <sys/file.h> +#include <sys/stat.h> +#include <sys/mman.h> + +char *textfile_get(const char *pathname, const char *key) +{ +	struct stat st; +	char *map, *off, *end, *str = NULL; +	off_t size; size_t len; +	int fd; + +	fd = open(pathname, O_RDONLY); +	if (fd < 0) +		return NULL; + +	if (flock(fd, LOCK_SH) < 0) +		goto close; + +	if (fstat(fd, &st) < 0) +		goto unlock; + +	size = st.st_size; + +	map = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0); +	if (map == MAP_FAILED) +		goto close; + +	off = strstr(map, key); +	if (!off) +		goto unmap; + +	if (off > map) { +		while (*(off - 1) != '\r' && *(off - 1) != '\n') { +			off = strstr(map, key); +			if (!off) +				goto unmap; +		} +	} + +	end = strpbrk(off, "\r\n"); +	if (!end) +		goto unmap; + +	len = strlen(key); +	str = malloc(end - off - len); +	memset(str, 0, end - off - len); +	if (!str) +		goto unmap; + +	strncpy(str, off + len + 1, end - off - len - 1); + +unmap: +	munmap(map, size); + +unlock: +	flock(fd, LOCK_UN); + +close: +	close(fd); + +	return str; +} diff --git a/common/textfile.h b/common/textfile.h new file mode 100644 index 00000000..56a0bc10 --- /dev/null +++ b/common/textfile.h @@ -0,0 +1,29 @@ +/* + * + *  BlueZ - Bluetooth protocol stack for Linux + * + *  Copyright (C) 2004-2005  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$ + */ + +char *textfile_get(const char *pathname, const char *key); diff --git a/configure.in b/configure.in index 15febfe9..830c4527 100644 --- a/configure.in +++ b/configure.in @@ -34,4 +34,4 @@ AC_PATH_DBUS  AC_ARG_BLUEZ -AC_OUTPUT(Makefile hcid/Makefile tools/Makefile rfcomm/Makefile sdpd/Makefile dund/Makefile pand/Makefile hidd/Makefile cups/Makefile alsa/Makefile test/Makefile scripts/Makefile pcmcia/Makefile extra/Makefile) +AC_OUTPUT(Makefile common/Makefile tools/Makefile rfcomm/Makefile hcid/Makefile sdpd/Makefile dund/Makefile pand/Makefile hidd/Makefile cups/Makefile alsa/Makefile test/Makefile scripts/Makefile pcmcia/Makefile extra/Makefile)  | 
