Home | History | Annotate | Download | only in squashfs-tools
      1 #ifndef XATTR_H
      2 #define XATTR_H
      3 /*
      4  * Create a squashfs filesystem.  This is a highly compressed read only
      5  * filesystem.
      6  *
      7  * Copyright (c) 2010, 2012, 2013, 2014
      8  * Phillip Lougher <phillip (at) squashfs.org.uk>
      9  *
     10  * This program is free software; you can redistribute it and/or
     11  * modify it under the terms of the GNU General Public License
     12  * as published by the Free Software Foundation; either version 2,
     13  * or (at your option) any later version.
     14  *
     15  * This program is distributed in the hope that it will be useful,
     16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18  * GNU General Public License for more details.
     19  *
     20  * You should have received a copy of the GNU General Public License
     21  * along with this program; if not, write to the Free Software
     22  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     23  *
     24  * xattr.h
     25  */
     26 
     27 #define XATTR_VALUE_OOL		SQUASHFS_XATTR_VALUE_OOL
     28 #define XATTR_PREFIX_MASK	SQUASHFS_XATTR_PREFIX_MASK
     29 
     30 #define XATTR_VALUE_OOL_SIZE	sizeof(long long)
     31 
     32 /* maximum size of xattr value data that will be inlined */
     33 #define XATTR_INLINE_MAX 	128
     34 
     35 /* the target size of an inode's xattr name:value list.  If it
     36  * exceeds this, then xattr value data will be successively out of lined
     37  * until it meets the target */
     38 #define XATTR_TARGET_MAX	65536
     39 
     40 #define IS_XATTR(a)		(a != SQUASHFS_INVALID_XATTR)
     41 
     42 struct xattr_list {
     43 	char			*name;
     44 	char			*full_name;
     45 	int			size;
     46 	int			vsize;
     47 	void			*value;
     48 	int			type;
     49 	long long		ool_value;
     50 	unsigned short		vchecksum;
     51 	struct xattr_list	*vnext;
     52 };
     53 
     54 struct dupl_id {
     55 	struct xattr_list	*xattr_list;
     56 	int			xattrs;
     57 	int			xattr_id;
     58 	struct dupl_id		*next;
     59 };
     60 
     61 struct prefix {
     62 	char			*prefix;
     63 	int			type;
     64 };
     65 
     66 extern int generate_xattrs(int, struct xattr_list *);
     67 
     68 #ifdef XATTR_SUPPORT
     69 extern int get_xattrs(int, struct squashfs_super_block *);
     70 extern int read_xattrs(void *);
     71 extern long long write_xattrs();
     72 extern void save_xattrs();
     73 extern void restore_xattrs();
     74 extern unsigned int xattr_bytes, total_xattr_bytes;
     75 extern void write_xattr(char *, unsigned int);
     76 extern int read_xattrs_from_disk(int, struct squashfs_super_block *);
     77 extern struct xattr_list *get_xattr(int, unsigned int *, int);
     78 extern void free_xattr(struct xattr_list *, int);
     79 #else
     80 static inline int get_xattrs(int fd, struct squashfs_super_block *sBlk)
     81 {
     82 	if(sBlk->xattr_id_table_start != SQUASHFS_INVALID_BLK) {
     83 		fprintf(stderr, "Xattrs in filesystem! These are not "
     84 			"supported on this version of Squashfs\n");
     85 		return 0;
     86 	} else
     87 		return SQUASHFS_INVALID_BLK;
     88 }
     89 
     90 
     91 static inline int read_xattrs(void *dir_ent)
     92 {
     93 	return SQUASHFS_INVALID_XATTR;
     94 }
     95 
     96 
     97 static inline long long write_xattrs()
     98 {
     99 	return SQUASHFS_INVALID_BLK;
    100 }
    101 
    102 
    103 static inline void save_xattrs()
    104 {
    105 }
    106 
    107 
    108 static inline void restore_xattrs()
    109 {
    110 }
    111 
    112 
    113 static inline void write_xattr(char *pathname, unsigned int xattr)
    114 {
    115 }
    116 
    117 
    118 static inline int read_xattrs_from_disk(int fd, struct squashfs_super_block *sBlk)
    119 {
    120 	if(sBlk->xattr_id_table_start != SQUASHFS_INVALID_BLK) {
    121 		fprintf(stderr, "Xattrs in filesystem! These are not "
    122 			"supported on this version of Squashfs\n");
    123 		return 0;
    124 	} else
    125 		return SQUASHFS_INVALID_BLK;
    126 }
    127 
    128 
    129 static inline struct xattr_list *get_xattr(int i, unsigned int *count, int j)
    130 {
    131 	return NULL;
    132 }
    133 #endif
    134 
    135 #ifdef XATTR_SUPPORT
    136 #ifdef XATTR_DEFAULT
    137 #define NOXOPT_STR
    138 #define XOPT_STR " (default)"
    139 #define XATTR_DEF 0
    140 #else
    141 #define NOXOPT_STR " (default)"
    142 #define XOPT_STR
    143 #define XATTR_DEF 1
    144 #endif
    145 #else
    146 #define NOXOPT_STR " (default)"
    147 #define XOPT_STR " (unsupported)"
    148 #define XATTR_DEF 1
    149 #endif
    150 #endif
    151