The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/hfsplus/hfsplus_raw.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  *  linux/include/linux/hfsplus_raw.h
    3  *
    4  * Copyright (C) 1999
    5  * Brad Boyer (flar@pants.nu)
    6  * (C) 2003 Ardis Technologies <roman@ardistech.com>
    7  *
    8  * Format of structures on disk
    9  * Information taken from Apple Technote #1150 (HFS Plus Volume Format)
   10  *
   11  */
   12 
   13 #ifndef _LINUX_HFSPLUS_RAW_H
   14 #define _LINUX_HFSPLUS_RAW_H
   15 
   16 #include <linux/types.h>
   17 
   18 #define __packed __attribute__ ((packed))
   19 
   20 /* Some constants */
   21 #define HFSPLUS_SECTOR_SIZE        512
   22 #define HFSPLUS_VOLHEAD_SECTOR       2
   23 #define HFSPLUS_VOLHEAD_SIG     0x482b
   24 #define HFSPLUS_SUPER_MAGIC     0x482b
   25 #define HFSPLUS_CURRENT_VERSION      4
   26 
   27 #define HFSP_WRAP_MAGIC         0x4244
   28 #define HFSP_WRAP_ATTRIB_SLOCK  0x8000
   29 #define HFSP_WRAP_ATTRIB_SPARED 0x0200
   30 
   31 #define HFSP_WRAPOFF_SIG          0x00
   32 #define HFSP_WRAPOFF_ATTRIB       0x0A
   33 #define HFSP_WRAPOFF_ABLKSIZE     0x14
   34 #define HFSP_WRAPOFF_ABLKSTART    0x1C
   35 #define HFSP_WRAPOFF_EMBEDSIG     0x7C
   36 #define HFSP_WRAPOFF_EMBEDEXT     0x7E
   37 
   38 #define HFSP_HIDDENDIR_NAME     "\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80HFS+ Private Data"
   39 
   40 #define HFSP_HARDLINK_TYPE      0x686c6e6b      /* 'hlnk' */
   41 #define HFSP_HFSPLUS_CREATOR    0x6866732b      /* 'hfs+' */
   42 
   43 #define HFSP_MOUNT_VERSION      0x482b4c78      /* 'H+Lx' */
   44 
   45 /* Structures used on disk */
   46 
   47 typedef u32 hfsplus_cnid;
   48 typedef u16 hfsplus_unichr;
   49 
   50 /* A "string" as used in filenames, etc. */
   51 typedef struct {
   52         u16 length;
   53         hfsplus_unichr unicode[255];
   54 } __packed hfsplus_unistr;
   55 
   56 #define HFSPLUS_MAX_STRLEN 255
   57 
   58 /* POSIX permissions */
   59 typedef struct {
   60         u32 owner;
   61         u32 group;
   62         u32 mode;
   63         u32 dev;
   64 } __packed hfsplus_perm;
   65 
   66 /* A single contiguous area of a file */
   67 typedef struct {
   68         u32 start_block;
   69         u32 block_count;
   70 } __packed hfsplus_extent;
   71 typedef hfsplus_extent hfsplus_extent_rec[8];
   72 
   73 /* Information for a "Fork" in a file */
   74 typedef struct {
   75         u64 total_size;
   76         u32 clump_size;
   77         u32 total_blocks;
   78         hfsplus_extent_rec extents;
   79 } __packed hfsplus_fork_raw;
   80 
   81 /* HFS+ Volume Header */
   82 typedef struct hfsplus_vh {
   83         u16 signature;
   84         u16 version;
   85         u32 attributes;
   86         u32 last_mount_vers;
   87         u32 reserved;
   88 
   89         u32 create_date;
   90         u32 modify_date;
   91         u32 backup_date;
   92         u32 checked_date;
   93 
   94         u32 file_count;
   95         u32 folder_count;
   96 
   97         u32 blocksize;
   98         u32 total_blocks;
   99         u32 free_blocks;
  100 
  101         u32 next_alloc;
  102         u32 rsrc_clump_sz;
  103         u32 data_clump_sz;
  104         hfsplus_cnid next_cnid;
  105 
  106         u32 write_count;
  107         u64 encodings_bmp;
  108 
  109         u8 finder_info[32];
  110 
  111         hfsplus_fork_raw alloc_file;
  112         hfsplus_fork_raw ext_file;
  113         hfsplus_fork_raw cat_file;
  114         hfsplus_fork_raw attr_file;
  115         hfsplus_fork_raw start_file;
  116 } __packed hfsplus_vh;
  117 
  118 /* HFS+ volume attributes */
  119 #define HFSPLUS_VOL_UNMNT     (1 << 8)
  120 #define HFSPLUS_VOL_SPARE_BLK (1 << 9)
  121 #define HFSPLUS_VOL_NOCACHE   (1 << 10)
  122 #define HFSPLUS_VOL_INCNSTNT  (1 << 11)
  123 #define HFSPLUS_VOL_SOFTLOCK  (1 << 15)
  124 
  125 /* HFS+ BTree node descriptor */
  126 typedef struct {
  127         u32 next;
  128         u32 prev;
  129         s8 kind;
  130         u8 height;
  131         u16 num_rec;
  132         u16 reserved;
  133 } __packed hfsplus_btree_node_desc;
  134 
  135 /* HFS+ BTree node types */
  136 #define HFSPLUS_NODE_NDX  0x00
  137 #define HFSPLUS_NODE_HEAD 0x01
  138 #define HFSPLUS_NODE_MAP  0x02
  139 #define HFSPLUS_NODE_LEAF 0xFF
  140 
  141 /* HFS+ BTree header */
  142 typedef struct {
  143         u16 depth;
  144         u32 root;
  145         u32 leaf_count;
  146         u32 leaf_head;
  147         u32 leaf_tail;
  148         u16 node_size;
  149         u16 max_key_len;
  150         u32 node_count;
  151         u32 free_nodes;
  152         u16 reserved1;
  153         u32 clump_size;
  154         u8 btree_type;
  155         u8 reserved2;
  156         u32 attributes;
  157         u32 reserved3[16];
  158 } __packed hfsplus_btree_head;
  159 
  160 /* BTree attributes */
  161 #define HFSPLUS_TREE_BIGKEYS         2
  162 #define HFSPLUS_TREE_VAR_NDXKEY_SIZE 4
  163 
  164 /* HFS+ BTree misc info */
  165 #define HFSPLUS_TREE_HEAD 0
  166 #define HFSPLUS_NODE_MXSZ 32768
  167 
  168 /* Some special File ID numbers (stolen from hfs.h) */
  169 #define HFSPLUS_POR_CNID                1       /* Parent Of the Root */
  170 #define HFSPLUS_ROOT_CNID               2       /* ROOT directory */
  171 #define HFSPLUS_EXT_CNID                3       /* EXTents B-tree */
  172 #define HFSPLUS_CAT_CNID                4       /* CATalog B-tree */
  173 #define HFSPLUS_BAD_CNID                5       /* BAD blocks file */
  174 #define HFSPLUS_ALLOC_CNID              6       /* ALLOCation file */
  175 #define HFSPLUS_START_CNID              7       /* STARTup file */
  176 #define HFSPLUS_ATTR_CNID               8       /* ATTRibutes file */
  177 #define HFSPLUS_EXCH_CNID               15      /* ExchangeFiles temp id */
  178 #define HFSPLUS_FIRSTUSER_CNID          16      /* first available user id */
  179 
  180 /* HFS+ catalog entry key */
  181 typedef struct {
  182         u16 key_len;
  183         hfsplus_cnid parent;
  184         hfsplus_unistr name;
  185 } __packed hfsplus_cat_key;
  186 
  187 
  188 /* Structs from hfs.h */
  189 typedef struct {
  190         u16 v;
  191         u16 h;
  192 } __packed hfsp_point;
  193 
  194 typedef struct {
  195         u16 top;
  196         u16 left;
  197         u16 bottom;
  198         u16 right;
  199 } __packed hfsp_rect;
  200 
  201 
  202 /* HFS directory info (stolen from hfs.h */
  203 typedef struct {
  204         hfsp_rect frRect;
  205         u16 frFlags;
  206         hfsp_point frLocation;
  207         u16 frView;
  208 } __packed DInfo;
  209 
  210 typedef struct {
  211         hfsp_point frScroll;
  212         u32 frOpenChain;
  213         u16 frUnused;
  214         u16 frComment;
  215         u32 frPutAway;
  216 } __packed DXInfo;
  217 
  218 /* HFS+ folder data (part of an hfsplus_cat_entry) */
  219 typedef struct {
  220         s16 type;
  221         u16 flags;
  222         u32 valence;
  223         hfsplus_cnid id;
  224         u32 create_date;
  225         u32 content_mod_date;
  226         u32 attribute_mod_date;
  227         u32 access_date;
  228         u32 backup_date;
  229         hfsplus_perm permissions;
  230         DInfo user_info;
  231         DXInfo finder_info;
  232         u32 text_encoding;
  233         u32 reserved;
  234 } __packed hfsplus_cat_folder;
  235 
  236 /* HFS file info (stolen from hfs.h) */
  237 typedef struct {
  238         u32 fdType;
  239         u32 fdCreator;
  240         u16 fdFlags;
  241         hfsp_point fdLocation;
  242         u16 fdFldr;
  243 } __packed FInfo;
  244 
  245 typedef struct {
  246         u16 fdIconID;
  247         u8 fdUnused[8];
  248         u16 fdComment;
  249         u32 fdPutAway;
  250 } __packed FXInfo;
  251 
  252 /* HFS+ file data (part of a cat_entry) */
  253 typedef struct {
  254         s16 type;
  255         u16 flags;
  256         u32 reserved1;
  257         hfsplus_cnid id;
  258         u32 create_date;
  259         u32 content_mod_date;
  260         u32 attribute_mod_date;
  261         u32 access_date;
  262         u32 backup_date;
  263         hfsplus_perm permissions;
  264         FInfo user_info;
  265         FXInfo finder_info;
  266         u32 text_encoding;
  267         u32 reserved2;
  268 
  269         hfsplus_fork_raw data_fork;
  270         hfsplus_fork_raw rsrc_fork;
  271 } __packed hfsplus_cat_file;
  272 
  273 /* File attribute bits */
  274 #define kHFSFileLockedBit       0x0000
  275 #define kHFSFileLockedMask      0x0001
  276 #define kHFSThreadExistsBit     0x0001
  277 #define kHFSThreadExistsMask    0x0002
  278 
  279 /* HFS+ catalog thread (part of a cat_entry) */
  280 typedef struct {
  281         s16 type;
  282         s16 reserved;
  283         hfsplus_cnid parentID;
  284         hfsplus_unistr nodeName;
  285 } __packed hfsplus_cat_thread;
  286 
  287 #define HFSPLUS_MIN_THREAD_SZ 10
  288 
  289 /* A data record in the catalog tree */
  290 typedef union {
  291         s16 type;
  292         hfsplus_cat_folder folder;
  293         hfsplus_cat_file file;
  294         hfsplus_cat_thread thread;
  295 } __packed hfsplus_cat_entry;
  296 
  297 /* HFS+ catalog entry type */
  298 #define HFSPLUS_FOLDER         0x0001
  299 #define HFSPLUS_FILE           0x0002
  300 #define HFSPLUS_FOLDER_THREAD  0x0003
  301 #define HFSPLUS_FILE_THREAD    0x0004
  302 
  303 /* HFS+ extents tree key */
  304 typedef struct {
  305         u16 key_len;
  306         u8 fork_type;
  307         u8 pad;
  308         hfsplus_cnid cnid;
  309         u32 start_block;
  310 } __packed hfsplus_ext_key;
  311 
  312 #define HFSPLUS_EXT_KEYLEN 12
  313 
  314 /* HFS+ generic BTree key */
  315 typedef union {
  316         u16 key_len;
  317         hfsplus_cat_key cat;
  318         hfsplus_ext_key ext;
  319 } __packed hfsplus_btree_key;
  320 
  321 #endif

Cache object: ab016827e685199ee9d27ff9315c4230


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.