]> git.proxmox.com Git - grub2.git/blob - include/grub/fshelp.h
2009-04-05 Vladimir Serbinenko <phcoder@gmail.com>
[grub2.git] / include / grub / fshelp.h
1 /* fshelp.h -- Filesystem helper functions */
2 /*
3 * GRUB -- GRand Unified Bootloader
4 * Copyright (C) 2004,2005,2006,2007,2008 Free Software Foundation, Inc.
5 *
6 * GRUB is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * GRUB is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef GRUB_FSHELP_HEADER
21 #define GRUB_FSHELP_HEADER 1
22
23 #include <grub/types.h>
24 #include <grub/symbol.h>
25 #include <grub/err.h>
26
27 typedef struct grub_fshelp_node *grub_fshelp_node_t;
28
29 #define GRUB_FSHELP_CASE_INSENSITIVE 0x100
30 #define GRUB_FSHELP_TYPE_MASK 0xff
31 #define GRUB_FSHELP_FLAGS_MASK 0x100
32
33 enum grub_fshelp_filetype
34 {
35 GRUB_FSHELP_UNKNOWN,
36 GRUB_FSHELP_REG,
37 GRUB_FSHELP_DIR,
38 GRUB_FSHELP_SYMLINK
39 };
40
41 /* Lookup the node PATH. The node ROOTNODE describes the root of the
42 directory tree. The node found is returned in FOUNDNODE, which is
43 either a ROOTNODE or a new malloc'ed node. ITERATE_DIR is used to
44 iterate over all directory entries in the current node.
45 READ_SYMLINK is used to read the symlink if a node is a symlink.
46 EXPECTTYPE is the type node that is expected by the called, an
47 error is generated if the node is not of the expected type. Make
48 sure you use the NESTED_FUNC_ATTR macro for HOOK, this is required
49 because GCC has a nasty bug when using regparm=3. */
50 grub_err_t
51 EXPORT_FUNC(grub_fshelp_find_file) (const char *path,
52 grub_fshelp_node_t rootnode,
53 grub_fshelp_node_t *foundnode,
54 int (*iterate_dir) (grub_fshelp_node_t dir,
55 int NESTED_FUNC_ATTR
56 (*hook) (const char *filename,
57 enum grub_fshelp_filetype filetype,
58 grub_fshelp_node_t node)),
59 char *(*read_symlink) (grub_fshelp_node_t node),
60 enum grub_fshelp_filetype expect);
61
62
63 /* Read LEN bytes from the file NODE on disk DISK into the buffer BUF,
64 beginning with the block POS. READ_HOOK should be set before
65 reading a block from the file. GET_BLOCK is used to translate file
66 blocks to disk blocks. The file is FILESIZE bytes big and the
67 blocks have a size of LOG2BLOCKSIZE (in log2). */
68 grub_ssize_t
69 EXPORT_FUNC(grub_fshelp_read_file) (grub_disk_t disk, grub_fshelp_node_t node,
70 void NESTED_FUNC_ATTR (*read_hook) (grub_disk_addr_t sector,
71 unsigned offset,
72 unsigned length),
73 grub_off_t pos, grub_size_t len, char *buf,
74 grub_disk_addr_t (*get_block) (grub_fshelp_node_t node,
75 grub_disk_addr_t block),
76 grub_off_t filesize, int log2blocksize);
77
78 unsigned int
79 EXPORT_FUNC(grub_fshelp_log2blksize) (unsigned int blksize,
80 unsigned int *pow);
81
82 #endif /* ! GRUB_FSHELP_HEADER */