From 51cf782b65ab5f022e725faf9c78907fd8fade46 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 10 Sep 2005 10:25:38 +0000 Subject: Add support for the Filesystem in Userspace (FUSE) --- fuse/Makefile.am | 14 ++++++++ fuse/main.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 fuse/Makefile.am create mode 100644 fuse/main.c (limited to 'fuse') diff --git a/fuse/Makefile.am b/fuse/Makefile.am new file mode 100644 index 00000000..ba504834 --- /dev/null +++ b/fuse/Makefile.am @@ -0,0 +1,14 @@ +# +# $Id$ +# + +if FUSE +noinst_PROGRAMS = btfs + +btfs_SOURCES = main.c +btfs_LDADD = @FUSE_LIBS@ @OPENOBEX_LIBS@ @BLUEZ_LIBS@ + +AM_CFLAGS = @BLUEZ_CFLAGS@ @OPENOBEX_CFLAGS@ @FUSE_CFLAGS@ +endif + +MAINTAINERCLEANFILES = Makefile.in diff --git a/fuse/main.c b/fuse/main.c new file mode 100644 index 00000000..7cd57123 --- /dev/null +++ b/fuse/main.c @@ -0,0 +1,102 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2004-2005 Marcel Holtmann + * + * + * 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 +#endif + +#include +#include +#include +#include + +#include + +static int btfs_getattr(const char *path, struct stat *stbuf) +{ + int err = 0; + + memset(stbuf, 0, sizeof(struct stat)); + + if (!strcmp(path, "/")) { + stbuf->st_mode = S_IFDIR | 0755; + stbuf->st_nlink = 2; + } else if (!strcmp(path, "/test")) { + stbuf->st_mode = S_IFREG | 0444; + stbuf->st_nlink = 1; + stbuf->st_size = strlen("/test"); + } else + err = -ENOENT; + + return err; +} + +static int btfs_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler) +{ + if (strcmp(path, "/")) + return -ENOENT; + + filler(h, ".", 0); + filler(h, "..", 0); + filler(h, "test", 0); + + return 0; +} + +static int btfs_open(const char *path, int flags) +{ + if (strcmp(path, "/test")) + return -ENOENT; + + if ((flags & 3) != O_RDONLY) + return -EACCES; + + return 0; +} + +static int btfs_read(const char *path, char *buf, size_t size, off_t offset) +{ + if (strcmp(path, "/test")) + return -ENOENT; + + memcpy(buf, "Test" + offset, size); + + return size; +} + +static struct fuse_operations btfs_ops = { + .getattr = btfs_getattr, + .getdir = btfs_getdir, + .open = btfs_open, + .read = btfs_read, +}; + +int main(int argc, char *argv[]) +{ + return fuse_main(argc, argv, &btfs_ops); +} -- cgit