diff options
Diffstat (limited to 'contrib/netbsd-tests/fs/puffs/h_dtfs/dtfs.h')
-rw-r--r-- | contrib/netbsd-tests/fs/puffs/h_dtfs/dtfs.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/contrib/netbsd-tests/fs/puffs/h_dtfs/dtfs.h b/contrib/netbsd-tests/fs/puffs/h_dtfs/dtfs.h new file mode 100644 index 0000000..de4d958 --- /dev/null +++ b/contrib/netbsd-tests/fs/puffs/h_dtfs/dtfs.h @@ -0,0 +1,127 @@ +/* $NetBSD: dtfs.h,v 1.2 2010/07/14 13:09:52 pooka Exp $ */ + +/* + * Copyright (c) 2006 Antti Kantee. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef DTFS_H_ +#define DTFS_H_ + +#include <sys/types.h> + +#include <puffs.h> + +PUFFSOP_PROTOS(dtfs); +int dtfs_domount(struct puffs_usermount *, const char *); + +#define DTFS_BLOCKSHIFT (12) +#define DTFS_BLOCKSIZE (1<<DTFS_BLOCKSHIFT) + +#define ROUNDUP(a,b) ((a) & ((b)-1)) +#define BLOCKNUM(a,b) (((a) & ~((1<<(b))-1)) >> (b)) + +struct dtfs_fid; +struct dtfs_mount { + ino_t dtm_nextfileid; /* running number for file id */ + + size_t dtm_fsizes; /* sum of file sizes in bytes */ + fsfilcnt_t dtm_nfiles; /* number of files */ + + LIST_HEAD(, dtfs_poll) dtm_pollent; + int dtm_needwakeup; + vm_prot_t dtm_allowprot; +}; + +struct dtfs_file { + union { + struct { + uint8_t **blocks; + size_t numblocks; + size_t datalen; + } reg; + struct { + struct puffs_node *dotdot; + LIST_HEAD(, dtfs_dirent) dirents; + } dir; + struct { + char *target; + } link; + } u; +#define df_blocks u.reg.blocks +#define df_numblocks u.reg.numblocks +#define df_datalen u.reg.datalen +#define df_dotdot u.dir.dotdot +#define df_dirents u.dir.dirents +#define df_linktarget u.link.target +}; + +struct dtfs_dirent { + struct puffs_node *dfd_node; + struct puffs_node *dfd_parent; + char *dfd_name; + size_t dfd_namelen; + + LIST_ENTRY(dtfs_dirent) dfd_entries; +}; + +struct dtfs_fid { + struct puffs_node *dfid_addr; + + /* best^Wsome-effort extra sanity check */ + ino_t dfid_fileid; + u_long dfid_gen; +}; +#define DTFS_FIDSIZE (sizeof(struct dtfs_fid)) + +struct dtfs_poll { + struct puffs_cc *dp_pcc; + LIST_ENTRY(dtfs_poll) dp_entries; +}; + +struct puffs_node * dtfs_genfile(struct puffs_node *, + const struct puffs_cn *, enum vtype); +struct dtfs_file * dtfs_newdir(void); +struct dtfs_file * dtfs_newfile(void); +struct dtfs_dirent * dtfs_dirgetnth(struct dtfs_file *, int); +struct dtfs_dirent * dtfs_dirgetbyname(struct dtfs_file *, + const char *, size_t); + +void dtfs_nukenode(struct puffs_node *, struct puffs_node *, + const char *, size_t); +void dtfs_freenode(struct puffs_node *); +void dtfs_setsize(struct puffs_node *, off_t); + +void dtfs_adddent(struct puffs_node *, struct dtfs_dirent *); +void dtfs_removedent(struct puffs_node *, struct dtfs_dirent *); + +void dtfs_baseattrs(struct vattr *, enum vtype, ino_t); +void dtfs_updatetimes(struct puffs_node *, int, int, int); + +bool dtfs_isunder(struct puffs_node *, struct puffs_node *); + + +#define DTFS_CTOF(a) ((struct dtfs_file *)(((struct puffs_node *)a)->pn_data)) +#define DTFS_PTOF(a) ((struct dtfs_file *)(a->pn_data)) + +#endif /* DTFS_H_ */ |