xref: /netbsd-src/sys/fs/ntfs/ntfs_subr.h (revision 0bac62655e97d9a3b86dd2669185f4ffb896a53c)
1*0bac6265Shannken /*	$NetBSD: ntfs_subr.h,v 1.9 2014/11/13 16:51:53 hannken Exp $	*/
29accf4dfSjdolecek 
39accf4dfSjdolecek /*-
49accf4dfSjdolecek  * Copyright (c) 1998, 1999 Semen Ustimenko
59accf4dfSjdolecek  * All rights reserved.
69accf4dfSjdolecek  *
79accf4dfSjdolecek  * Redistribution and use in source and binary forms, with or without
89accf4dfSjdolecek  * modification, are permitted provided that the following conditions
99accf4dfSjdolecek  * are met:
109accf4dfSjdolecek  * 1. Redistributions of source code must retain the above copyright
119accf4dfSjdolecek  *    notice, this list of conditions and the following disclaimer.
129accf4dfSjdolecek  * 2. Redistributions in binary form must reproduce the above copyright
139accf4dfSjdolecek  *    notice, this list of conditions and the following disclaimer in the
149accf4dfSjdolecek  *    documentation and/or other materials provided with the distribution.
159accf4dfSjdolecek  *
169accf4dfSjdolecek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
179accf4dfSjdolecek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
189accf4dfSjdolecek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
199accf4dfSjdolecek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
209accf4dfSjdolecek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
219accf4dfSjdolecek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
229accf4dfSjdolecek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
239accf4dfSjdolecek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
249accf4dfSjdolecek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
259accf4dfSjdolecek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
269accf4dfSjdolecek  * SUCH DAMAGE.
279accf4dfSjdolecek  *
289accf4dfSjdolecek  *	Id: ntfs_subr.h,v 1.4 1999/05/12 09:43:02 semenu Exp
299accf4dfSjdolecek  */
304bffed72Schristos #if !defined(_KERNEL)
314bffed72Schristos #error not supposed to be exposed to userland.
324bffed72Schristos #endif
339accf4dfSjdolecek 
349accf4dfSjdolecek #define	VA_LOADED		0x0001
359accf4dfSjdolecek #define	VA_PRELOADED		0x0002
369accf4dfSjdolecek 
379accf4dfSjdolecek struct ntvattr {
389accf4dfSjdolecek 	LIST_ENTRY(ntvattr) 	va_list;
399accf4dfSjdolecek 
409accf4dfSjdolecek 	u_int32_t		va_vflag;
419accf4dfSjdolecek 	struct vnode	       *va_vp;
429accf4dfSjdolecek 	struct ntnode 	       *va_ip;
439accf4dfSjdolecek 
449accf4dfSjdolecek 	u_int32_t		va_flag;
459accf4dfSjdolecek 	u_int32_t		va_type;
469accf4dfSjdolecek 	u_int8_t		va_namelen;
479accf4dfSjdolecek 	char			va_name[NTFS_MAXATTRNAME];
489accf4dfSjdolecek 
499accf4dfSjdolecek 	u_int32_t		va_compression;
509accf4dfSjdolecek 	u_int32_t		va_compressalg;
51aa112c89Schristos 	u_int64_t		va_datalen;
52aa112c89Schristos 	u_int64_t		va_allocated;
539accf4dfSjdolecek 	cn_t	 		va_vcnstart;
549accf4dfSjdolecek 	cn_t	 		va_vcnend;
559accf4dfSjdolecek 	u_int16_t		va_index;
569accf4dfSjdolecek 	union {
579accf4dfSjdolecek 		struct {
589accf4dfSjdolecek 			cn_t *		cn;
599accf4dfSjdolecek 			cn_t *		cl;
609accf4dfSjdolecek 			u_long		cnt;
619accf4dfSjdolecek 		} vrun;
6253524e44Schristos 		void *		datap;
639accf4dfSjdolecek 		struct attr_name *name;
649accf4dfSjdolecek 		struct attr_indexroot *iroot;
659accf4dfSjdolecek 		struct attr_indexalloc *ialloc;
669accf4dfSjdolecek 	} va_d;
679accf4dfSjdolecek };
689accf4dfSjdolecek #define	va_vruncn	va_d.vrun.cn
699accf4dfSjdolecek #define va_vruncl	va_d.vrun.cl
709accf4dfSjdolecek #define va_vruncnt	va_d.vrun.cnt
719accf4dfSjdolecek #define va_datap	va_d.datap
729accf4dfSjdolecek #define va_a_name	va_d.name
739accf4dfSjdolecek #define va_a_iroot	va_d.iroot
749accf4dfSjdolecek #define va_a_ialloc	va_d.ialloc
759accf4dfSjdolecek 
7653524e44Schristos int ntfs_procfixups(struct ntfsmount *, u_int32_t, void *, size_t);
7708fcacf4Sxtraeme int ntfs_parserun(cn_t *, cn_t *, u_int8_t *, u_long, u_long *);
7808fcacf4Sxtraeme int ntfs_runtocn(cn_t *, struct ntfsmount *, u_int8_t *, u_long, cn_t);
7908fcacf4Sxtraeme int ntfs_readntvattr_plain(struct ntfsmount *, struct ntnode *,
8008fcacf4Sxtraeme 	struct ntvattr *, off_t, size_t, void *,size_t *, struct uio *);
8108fcacf4Sxtraeme int ntfs_readattr_plain(struct ntfsmount *, struct ntnode *, u_int32_t,
8208fcacf4Sxtraeme 	const char *, off_t, size_t, void *,size_t *, struct uio *);
8308fcacf4Sxtraeme int ntfs_readattr(struct ntfsmount *, struct ntnode *, u_int32_t,
8408fcacf4Sxtraeme 	const char *, off_t, size_t, void *, struct uio *);
8508fcacf4Sxtraeme struct timespec	ntfs_nttimetounix(u_int64_t);
8608fcacf4Sxtraeme int ntfs_ntreaddir(struct ntfsmount *, struct fnode *, u_int32_t,
8708fcacf4Sxtraeme 	struct attr_indexentry **);
8808fcacf4Sxtraeme int ntfs_runtovrun(cn_t **, cn_t **, u_long *, u_int8_t *);
8908fcacf4Sxtraeme int ntfs_attrtontvattr(struct ntfsmount *, struct ntvattr **, struct attr *);
9008fcacf4Sxtraeme void ntfs_freentvattr(struct ntvattr *);
9153524e44Schristos int ntfs_loadntvattrs(struct ntfsmount *, struct vnode *, void *,
9208fcacf4Sxtraeme 	struct ntvattr **);
9308fcacf4Sxtraeme struct ntvattr * ntfs_findntvattr(struct ntfsmount *, struct ntnode *,
9408fcacf4Sxtraeme 	u_int32_t, cn_t);
9508fcacf4Sxtraeme int ntfs_ntlookupfile(struct ntfsmount *, struct vnode *,
9608fcacf4Sxtraeme 	struct componentname *, struct vnode **);
9708fcacf4Sxtraeme int ntfs_isnamepermitted(struct ntfsmount *, struct attr_indexentry *);
9808fcacf4Sxtraeme int ntfs_ntvattrrele(struct ntvattr *);
9908fcacf4Sxtraeme int ntfs_ntvattrget(struct ntfsmount *, struct ntnode *, u_int32_t,
10008fcacf4Sxtraeme 	const char *, cn_t , struct ntvattr **);
10108fcacf4Sxtraeme int ntfs_ntlookup(struct ntfsmount *, ino_t, struct ntnode **);
10208fcacf4Sxtraeme int ntfs_ntget(struct ntnode *);
10308fcacf4Sxtraeme void ntfs_ntref(struct ntnode *);
10408fcacf4Sxtraeme void ntfs_ntrele(struct ntnode *);
10508fcacf4Sxtraeme void ntfs_ntput(struct ntnode *);
10608fcacf4Sxtraeme int ntfs_loadntnode(struct ntfsmount *, struct ntnode *);
10708fcacf4Sxtraeme int ntfs_writentvattr_plain(struct ntfsmount *, struct ntnode *,
10808fcacf4Sxtraeme 	struct ntvattr *, off_t, size_t, void *, size_t *, struct uio *);
10908fcacf4Sxtraeme int ntfs_writeattr_plain(struct ntfsmount *, struct ntnode *, u_int32_t,
11008fcacf4Sxtraeme 	char *, off_t, size_t, void *, size_t *, struct uio *);
11108fcacf4Sxtraeme void ntfs_toupper_init(void);
11208fcacf4Sxtraeme int ntfs_toupper_use(struct mount *, struct ntfsmount *);
11308fcacf4Sxtraeme void ntfs_toupper_unuse(void);
1149accf4dfSjdolecek 
1159accf4dfSjdolecek /* ntfs_conv.c stuff */
1169accf4dfSjdolecek ntfs_wget_func_t ntfs_utf8_wget;
1179accf4dfSjdolecek ntfs_wput_func_t ntfs_utf8_wput;
1189accf4dfSjdolecek ntfs_wcmp_func_t ntfs_utf8_wcmp;
119