📄 filesys.h
字号:
/* GRUB compatibility header * * taken from filo and grub. *//* * GRUB -- GRand Unified Bootloader * Copyright (C) 1999,2000,2001,2003 Free Software Foundation, Inc. * * 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. *//* This disables some portion of code */#define STAGE1_5 1#if defined CONFIG_X86/* * ffz = Find First Zero in word. Undefined if no zero exists, * so code should check against ~0UL first.. */static __inline__ unsigned intffz (unsigned int word){ __asm__ ("bsfl %1,%0" : "=r" (word) : "r" (~word)); return word;}static __inline__ unsigned intlog2 (unsigned int word){ __asm__ ("bsfl %1,%0" : "=r" (word) : "r" (word)); return word;}#elif defined (CONFIG_PPC)static __inline__ unsigned long __ilog2(unsigned long x){ unsigned long lz; asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x)); return 31 - lz;}static __inline__ unsigned longffz(unsigned long x){ if ((x = ~x) == 0) return 32; return __ilog2(x & -x);}#define log2(n) ffz(~(n))#elsestatic __inline__ unsigned int log2(unsigned int word){ /* assume 8 bits per byte. */ unsigned int i = 1 << (sizeof(word)*8 - 1); unsigned int pow = sizeof(word) * 8 - 1; if (! word) { /* invalid parameter */ return -1; } for(; i > word; i >>= 1, pow--) ; return pow; }#define ffz(n) log2(~(n))#endifstatic inline int substring (const char *s1, const char *s2){ while (*s1 == *s2) { /* The strings match exactly. */ if (! *(s1++)) return 0; s2 ++; } /* S1 is a substring of S2. */ if (*s1 == 0) return -1; /* S1 isn't a substring. */ return 1;}#define grub_memmove memmove#define grub_strcmp strcmp#define MAXINT 0x7fffffff/* This is only used by fsys_* to determine if it's hard disk. If it is, * they try to guess filesystem type by partition type. I guess it is * not necessory, so hardcoded to 0 (first floppy) --ts1 */#define current_drive 0#define current_slice 0#define current_partition 0extern unsigned long part_start;extern unsigned long part_length;extern int filepos;extern int filemax;extern int fsmax;/* Error codes (descriptions are in common.c) */typedef enum{ ERR_NONE = 0, ERR_BAD_FILENAME, ERR_BAD_FILETYPE, ERR_BAD_GZIP_DATA, ERR_BAD_GZIP_HEADER, ERR_BAD_PART_TABLE, ERR_BAD_VERSION, ERR_BELOW_1MB, ERR_BOOT_COMMAND, ERR_BOOT_FAILURE, ERR_BOOT_FEATURES, ERR_DEV_FORMAT, ERR_DEV_VALUES, ERR_EXEC_FORMAT, ERR_FILELENGTH, ERR_FILE_NOT_FOUND, ERR_FSYS_CORRUPT, ERR_FSYS_MOUNT, ERR_GEOM, ERR_NEED_LX_KERNEL, ERR_NEED_MB_KERNEL, ERR_NO_DISK, ERR_NO_PART, ERR_NUMBER_PARSING, ERR_OUTSIDE_PART, ERR_READ, ERR_SYMLINK_LOOP, ERR_UNRECOGNIZED, ERR_WONT_FIT, ERR_WRITE, ERR_BAD_ARGUMENT, ERR_UNALIGNED, ERR_PRIVILEGED, ERR_DEV_NEED_INIT, ERR_NO_DISK_SPACE, ERR_NUMBER_OVERFLOW, MAX_ERR_NUM} grub_error_t;extern grub_error_t errnum;#define grub_open file_open#define grub_read file_read#define grub_seek file_seek#define grub_close file_close/* instrumentation variables *//* (Not used in FILO) */extern void (*disk_read_hook) (int, int, int);extern void (*disk_read_func) (int, int, int);#define FSYS_BUFLEN 0x8000extern char FSYS_BUF[FSYS_BUFLEN];#define print_possibilities 0#define SECTOR_SIZE 512#define SECTOR_BITS 9#ifdef CONFIG_FSYS_FATint fat_mount (void);int fat_read (char *buf, int len);int fat_dir (char *dirname);#endif#ifdef CONFIG_FSYS_EXT2FSint ext2fs_mount (void);int ext2fs_read (char *buf, int len);int ext2fs_dir (char *dirname);#endif#ifdef CONFIG_FSYS_MINIXint minix_mount (void);int minix_read (char *buf, int len);int minix_dir (char *dirname);#endif#ifdef CONFIG_FSYS_REISERFSint reiserfs_mount (void);int reiserfs_read (char *buf, int len);int reiserfs_dir (char *dirname);int reiserfs_embed (int *start_sector, int needed_sectors);#endif#ifdef CONFIG_FSYS_JFSint jfs_mount (void);int jfs_read (char *buf, int len);int jfs_dir (char *dirname);int jfs_embed (int *start_sector, int needed_sectors);#endif#ifdef CONFIG_FSYS_XFSint xfs_mount (void);int xfs_read (char *buf, int len);int xfs_dir (char *dirname);#endif#ifdef CONFIG_FSYS_UFSint ufs_mount (void);int ufs_read (char *buf, int len);int ufs_dir (char *dirname);int ufs_embed (int *start_sector, int needed_sectors);#endif#ifdef CONFIG_FSYS_ISO9660int iso9660_mount (void);int iso9660_read (char *buf, int len);int iso9660_dir (char *dirname);#endif/* This is not a flag actually, but used as if it were a flag. */#define PC_SLICE_TYPE_HIDDEN_FLAG 0x10#define PC_SLICE_TYPE_NONE 0#define PC_SLICE_TYPE_FAT12 1#define PC_SLICE_TYPE_FAT16_LT32M 4#define PC_SLICE_TYPE_EXTENDED 5#define PC_SLICE_TYPE_FAT16_GT32M 6#define PC_SLICE_TYPE_FAT32 0xb#define PC_SLICE_TYPE_FAT32_LBA 0xc#define PC_SLICE_TYPE_FAT16_LBA 0xe#define PC_SLICE_TYPE_WIN95_EXTENDED 0xf#define PC_SLICE_TYPE_EZD 0x55#define PC_SLICE_TYPE_MINIX 0x80#define PC_SLICE_TYPE_LINUX_MINIX 0x81#define PC_SLICE_TYPE_EXT2FS 0x83#define PC_SLICE_TYPE_LINUX_EXTENDED 0x85#define PC_SLICE_TYPE_VSTAFS 0x9e#define PC_SLICE_TYPE_DELL_UTIL 0xde#define PC_SLICE_TYPE_LINUX_RAID 0xfd/* For convinience. *//* Check if TYPE is a FAT partition type. Clear the hidden flag before the check, to allow the user to mount a hidden partition in GRUB. */#define IS_PC_SLICE_TYPE_FAT(type) \ ({ int _type = (type) & ~PC_SLICE_TYPE_HIDDEN_FLAG; \ _type == PC_SLICE_TYPE_FAT12 \ || _type == PC_SLICE_TYPE_FAT16_LT32M \ || _type == PC_SLICE_TYPE_FAT16_GT32M \ || _type == PC_SLICE_TYPE_FAT16_LBA \ || _type == PC_SLICE_TYPE_FAT32 \ || _type == PC_SLICE_TYPE_FAT32_LBA \ || _type == PC_SLICE_TYPE_DELL_UTIL; })#define IS_PC_SLICE_TYPE_MINIX(type) \ (((type) == PC_SLICE_TYPE_MINIX) \ || ((type) == PC_SLICE_TYPE_LINUX_MINIX))#define IS_PC_SLICE_TYPE_BSD_WITH_FS(type,fs) 0/* possible values for the *BSD-style partition type */#define FS_UNUSED 0 /* unused */#define FS_SWAP 1 /* swap */#define FS_V6 2 /* Sixth Edition */#define FS_V7 3 /* Seventh Edition */#define FS_SYSV 4 /* System V */#define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */#define FS_V8 6 /* Eighth Edition, 4K blocks */#define FS_BSDFFS 7 /* 4.2BSD fast file system */#define FS_MSDOS 8 /* MSDOS file system */#define FS_BSDLFS 9 /* 4.4BSD log-structured file system */#define FS_OTHER 10 /* in use, but unknown/unsupported */#define FS_HPFS 11 /* OS/2 high-performance file system */#define FS_ISO9660 12 /* ISO 9660, normally CD-ROM */#define FS_BOOT 13 /* partition contains bootstrap */#define FS_ADOS 14 /* AmigaDOS fast file system */#define FS_HFS 15 /* Macintosh HFS */#define FS_FILECORE 16 /* Acorn Filecore Filing System */#define FS_EXT2FS 17 /* Linux Extended 2 file system */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -