⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libhfsp.h

📁 OpenBIOS是一个开源的BIOS实现
💻 H
字号:
/* * libhfs - library for reading and writing Macintosh HFS volumes * Copyright (C) 2000 Klaus Halfmann (khalfmann@libra.de) * Original work by 1996-1998 Robert Leslie (rob@mars.org) * * This file defines constants,structs etc needed for this library. * Everything found here is usually not related to Apple defintions. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: libhfsp.h,v 1.17 2000/10/20 06:16:52 hasi Exp $ */# include "apple.h"# include "hfs.h"# include "hfsp.h"extern int errno;/* Last error is eventually found here */extern const char *hfsp_error; # define HFSP_ERROR(code, str)  \    do { hfsp_error = (str), errno = (code); goto fail; } while (0)# ifdef DEBUG#  define ASSERT(cond)	do { if (! (cond)) abort(); } while (0)# else#  define ASSERT(cond)	/* nothing */# endif# define SIZE(type, n)		((size_t) (sizeof(type) * (n)))# define ALLOC(type, n)		((type *) malloc(SIZE(type, n)))# define ALLOCX(type, n)	((n) ? ALLOC(type, n) : (type *) 0)# define FREE(ptr)		((ptr) ? (void) free((void *) ptr) : (void) 0)# define REALLOC(ptr, type, n)  \    ((type *) ((ptr) ? realloc(ptr, SIZE(type, n)) : malloc(SIZE(type, n))))# define REALLOCX(ptr, type, n)  \    ((n) ? REALLOC(ptr, type, n) : (FREE(ptr), (type *) 0))# define BMTST(bm, num)  \    (((const byte *) (bm))[(num) >> 3]  &  (0x80 >> ((num) & 0x07)))# define BMSET(bm, num)  \          (((byte *) (bm))[(num) >> 3] |=  (0x80 >> ((num) & 0x07)))# define BMCLR(bm, num)  \          (((byte *) (bm))[(num) >> 3] &= ~(0x80 >> ((num) & 0x07)))# define STRINGIZE(x)		#x# define STR(x)			STRINGIZE(x)/* used by internal routines to specify the open modes */# define HFSP_MODE_RDONLY        0# define HFSP_MODE_RDWR          1# define HFSP_MODE_ANY           2/* Signatures registered with Apple to identify this driver */    /* Identifies the userland implementation */# define HPLS_SIGNATURE 0x482B4C58	// 'H+LX'     /* Identifies the kernel module by Brad Boyer (flar@pants.nu) */# define HPLS_SIGRES1	0x482B4C78	// 'H+Lx'    /* not jet in use ... */# define HPLS_SIGRES2	0x482B6C78	// 'H+lx'    /* Signature used by Apple */# define HPAPPLE_SIGNATURE  0x382e3130	// '8.10'/* Version used for this implementation of HFS+. This is not related * to the VERSION file found at the top-level of this package, * but designates the version of the low level code */#define HPLS_VERSION	1   /* must fit in a short *//* Othe Signatures may follow for informational purpos */    /* prototype for key comparing functions. */typedef int (*hfsp_key_compare) (void* key1, void* key2);/* prototype for key reading (necessary for byte swapping) */typedef void* (*hfsp_key_read) (void* p, void* key);struct volume; /* foreward declaration for btree needed *//* Structures for a node cache. The cache is an array * with linear search. (So making it to big may make * things slower). It is searched in a round robin  * fashion. */typedef struct {    UInt32		priority;		// as lower this number as higher the priority.	// decremetned on any sucessfull usage	// incremented else, intial value height*DEPTHFACTOR    UInt16		index;	// of node in fork	// 0 means empty, since first node is node header	// contents of node in original byte order    UInt16		flags;	// like DIRTY etc.} node_entry;typedef struct{    UInt32		index;	    // duplicate of above    btree_node_desc	desc;	    // header of node    char		node[0];    // actual node_size	// contents of node in original byte order} node_buf;typedef struct {    int		size;	     // number of nodes in the cache    int		currindex;   // round robin index    int		nodebufsize; // size of complete node_buf, including node    node_entry	*entries;	    char	*buffers;   // actually *node_buf} node_cache;typedef struct {     struct volume*	vol;	/* pointer to volume this tree is part of */    hfsp_fork_raw*	fork;	/* pointer to fork this tree is part of */    UInt32		cnid;	/* (pseudo) file id for the fork */    hfsp_key_compare	kcomp;		/* function used for key compare in _this_ btree */    hfsp_key_read	kread;	/* fucntion used to read a key int _this_ btree */    btree_head		head;       UInt16		blkpernode;	 /* Number of volume blocks per node (usually 1-4) */    node_cache		cache;     /* Warning all functions of btrees and records may modify       the following values ! */    // UInt16		node_index; /* index of node in fork */    // btree_node_desc	node;	/* current node under examination */    // char*		buf;	/* buf with size of a node */} btree;/* Function on btrees are defined in btree.h *//* A Wrapper around the raw hfs+ volume header for additional information * needed by this library. */typedef struct volume{    int		os_fd;		/* OS dependend reference to device */    UInt16	blksize_bits;   /* blocksize of device = 1 << blksize_bits */    UInt16	filler;    UInt32	blksize;	/* always 1 << blksize_bits */    UInt32	startblock;		/* Offset from physical to logical blocks, 	   eventually intodruced by HFS wrapper */	    UInt32  	maxblocks;	/* maximum number of blocks in device */    // UInt32	currblock;	/* value of current block, to cache blocks */    hfsp_vh	vol;		/* raw volume data */    // void*	blockbuf;	/* (single) buffer for fetching one block */     /* Buffer has double size of blksize to allow cross block reading */        btree*	extents;	/* is NULL by default and intialized when needed */    btree	catalog;	/* This is always neeeded */} volume; /* Functions on volumes are defined in volume.h */typedef struct {    // may not be used as found here     btree*		tree;	// tree where this record is contained in.    UInt16		node_index; /* index of record in btree */    UInt16		keyind;	/* index of current key in btree */    hfsp_cat_key	key;	/* current key */    UInt32		child;	/* child node belonging to this key */} index_record;typedef struct {       btree*		tree;	// tree where this record is contained in.    UInt16		node_index; /* index of record in btree */    UInt16		keyind;	/* index of current key in btree */    hfsp_extent_key	key;	/* current key */    hfsp_extent_rec	extent; /* The payload carried around */} extent_record;typedef struct {    btree*		tree;	// tree where this record is contained in.    UInt16		node_index; /* index of record in btree */    UInt16		keyind;	/* index of current key in btree */    hfsp_cat_key	key;	/* current key */    hfsp_cat_entry	record;	/* current record */} record;/* Functions on records are defined in record.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -