📄 adfs_fs.h
字号:
#ifndef _ADFS_FS_H#define _ADFS_FS_H#include <linux/types.h>/* * Structures of data on the disk *//* * Disc Record at disc address 0xc00 */struct adfs_discrecord { unsigned char log2secsize; unsigned char secspertrack; unsigned char heads; unsigned char density; unsigned char idlen; unsigned char log2bpmb; unsigned char skew; unsigned char bootoption; unsigned char lowsector; unsigned char nzones; unsigned short zone_spare; unsigned long root; unsigned long disc_size; unsigned short disc_id; unsigned char disc_name[10]; unsigned long disc_type; unsigned long disc_size_high; unsigned char log2sharesize:4; unsigned char unused:4; unsigned char big_flag:1;};#define ADFS_DISCRECORD (0xc00)#define ADFS_DR_OFFSET (0x1c0)#define ADFS_DR_SIZE 60#define ADFS_SUPER_MAGIC 0xadf5#define ADFS_FREE_FRAG 0#define ADFS_BAD_FRAG 1#define ADFS_ROOT_FRAG 2/* * Directory header */struct adfs_dirheader { unsigned char startmasseq; unsigned char startname[4];};#define ADFS_NEWDIR_SIZE 2048#define ADFS_OLDDIR_SIZE 1024#define ADFS_NUM_DIR_ENTRIES 77/* * Directory entries */struct adfs_direntry { char dirobname[10];#define ADFS_NAME_LEN 10 __u8 dirload[4]; __u8 direxec[4]; __u8 dirlen[4]; __u8 dirinddiscadd[3]; __u8 newdiratts;#define ADFS_NDA_OWNER_READ (1 << 0)#define ADFS_NDA_OWNER_WRITE (1 << 1)#define ADFS_NDA_LOCKED (1 << 2)#define ADFS_NDA_DIRECTORY (1 << 3)#define ADFS_NDA_EXECUTE (1 << 4)#define ADFS_NDA_PUBLIC_READ (1 << 5)#define ADFS_NDA_PUBLIC_WRITE (1 << 6)};#define ADFS_MAX_NAME_LEN 255struct adfs_idir_entry { __u32 inode_no; /* Address */ __u32 file_id; /* file id */ __u32 name_len; /* name length */ __u32 size; /* size */ __u32 mtime; /* modification time */ __u32 filetype; /* RiscOS file type */ __u8 mode; /* internal mode */ char name[ADFS_MAX_NAME_LEN]; /* file name */};/* * Directory tail */union adfs_dirtail { struct { unsigned char dirlastmask; char dirname[10]; unsigned char dirparent[3]; char dirtitle[19]; unsigned char reserved[14]; unsigned char endmasseq; unsigned char endname[4]; unsigned char dircheckbyte; } old; struct { unsigned char dirlastmask; unsigned char reserved[2]; unsigned char dirparent[3]; char dirtitle[19]; char dirname[10]; unsigned char endmasseq; unsigned char endname[4]; unsigned char dircheckbyte; } new;};#ifdef __KERNEL__/* * Calculate the boot block checksum on an ADFS drive. Note that this will * appear to be correct if the sector contains all zeros, so also check that * the disk size is non-zero!!! */extern inline int adfs_checkbblk(unsigned char *ptr){ unsigned int result = 0; unsigned char *p = ptr + 511; do { result = (result & 0xff) + (result >> 8); result = result + *--p; } while (p != ptr); return (result & 0xff) != ptr[511];}/* dir.c */extern unsigned int adfs_val (unsigned char *p, int len);extern int adfs_dir_read_parent (struct inode *inode, struct buffer_head **bhp);extern int adfs_dir_read (struct inode *inode, struct buffer_head **bhp);extern int adfs_dir_check (struct inode *inode, struct buffer_head **bhp, int buffers, union adfs_dirtail *dtp);extern void adfs_dir_free (struct buffer_head **bhp, int buffers);extern int adfs_dir_get (struct super_block *sb, struct buffer_head **bhp, int buffers, int pos, unsigned long parent_object_id, struct adfs_idir_entry *ide);extern int adfs_dir_find_entry (struct super_block *sb, struct buffer_head **bhp, int buffers, unsigned int index, struct adfs_idir_entry *ide);/* inode.c */extern int adfs_inode_validate (struct inode *inode);extern unsigned long adfs_inode_generate (unsigned long parent_id, int diridx);extern unsigned long adfs_inode_objid (struct inode *inode);extern unsigned int adfs_parent_bmap (struct inode *inode, int block);extern int adfs_bmap (struct inode *inode, int block);extern void adfs_read_inode (struct inode *inode);/* map.c */extern int adfs_map_lookup (struct super_block *sb, int frag_id, int offset);/* namei.c */extern struct dentry *adfs_lookup (struct inode *dir, struct dentry *dentry);/* super.c */extern int init_adfs_fs (void);extern void adfs_error (struct super_block *, const char *, const char *, ...);/* * Inodes and file operations *//* dir.c */extern struct inode_operations adfs_dir_inode_operations;/* file.c */extern struct inode_operations adfs_file_inode_operations;#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -