Contents of /trunk/mkinitrd-magellan/busybox/util-linux/volume_id/volume_id_internal.h
Parent Directory | Revision Log
Revision 816 -
(show annotations)
(download)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 7223 byte(s)
Fri Apr 24 18:33:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 7223 byte(s)
-updated to busybox-1.13.4
1 | /* |
2 | * volume_id - reads filesystem label and uuid |
3 | * |
4 | * Copyright (C) 2005 Kay Sievers <kay.sievers@vrfy.org> |
5 | * |
6 | * This library is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2.1 of the License, or (at your option) any later version. |
10 | * |
11 | * This library 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 GNU |
14 | * Lesser General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Lesser General Public |
17 | * License along with this library; if not, write to the Free Software |
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | */ |
20 | |
21 | #include "libbb.h" |
22 | #include "volume_id.h" |
23 | |
24 | #if __GNUC_PREREQ(4,1) |
25 | # pragma GCC visibility push(hidden) |
26 | #endif |
27 | |
28 | #define dbg(...) ((void)0) |
29 | /* #define dbg(...) bb_error_msg(__VA_ARGS__) */ |
30 | |
31 | |
32 | /* volume_id.h */ |
33 | |
34 | #define VOLUME_ID_VERSION 48 |
35 | |
36 | #define VOLUME_ID_LABEL_SIZE 64 |
37 | #define VOLUME_ID_UUID_SIZE 36 |
38 | #define VOLUME_ID_FORMAT_SIZE 32 |
39 | #define VOLUME_ID_PARTITIONS_MAX 256 |
40 | |
41 | enum volume_id_usage { |
42 | VOLUME_ID_UNUSED, |
43 | VOLUME_ID_UNPROBED, |
44 | VOLUME_ID_OTHER, |
45 | VOLUME_ID_FILESYSTEM, |
46 | VOLUME_ID_PARTITIONTABLE, |
47 | VOLUME_ID_RAID, |
48 | VOLUME_ID_DISKLABEL, |
49 | VOLUME_ID_CRYPTO, |
50 | }; |
51 | |
52 | #ifdef UNUSED_PARTITION_CODE |
53 | struct volume_id_partition { |
54 | // const char *type; |
55 | // const char *usage; |
56 | // smallint usage_id; |
57 | // uint8_t pt_type_raw; |
58 | // uint64_t pt_off; |
59 | // uint64_t pt_len; |
60 | }; |
61 | #endif |
62 | |
63 | struct volume_id { |
64 | // uint8_t label_raw[VOLUME_ID_LABEL_SIZE]; |
65 | // size_t label_raw_len; |
66 | char label[VOLUME_ID_LABEL_SIZE+1]; |
67 | // uint8_t uuid_raw[VOLUME_ID_UUID_SIZE]; |
68 | // size_t uuid_raw_len; |
69 | /* uuid is stored in ASCII (not binary) form here: */ |
70 | char uuid[VOLUME_ID_UUID_SIZE+1]; |
71 | // char type_version[VOLUME_ID_FORMAT_SIZE]; |
72 | // smallint usage_id; |
73 | // const char *usage; |
74 | // const char *type; |
75 | |
76 | #ifdef UNUSED_PARTITION_CODE |
77 | struct volume_id_partition *partitions; |
78 | size_t partition_count; |
79 | #endif |
80 | |
81 | int fd; |
82 | uint8_t *sbbuf; |
83 | uint8_t *seekbuf; |
84 | size_t sbbuf_len; |
85 | uint64_t seekbuf_off; |
86 | size_t seekbuf_len; |
87 | // int fd_close:1; |
88 | }; |
89 | |
90 | struct volume_id *volume_id_open_node(int fd); |
91 | int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size); |
92 | void free_volume_id(struct volume_id *id); |
93 | |
94 | /* util.h */ |
95 | |
96 | /* size of superblock buffer, reiserfs block is at 64k */ |
97 | #define SB_BUFFER_SIZE 0x11000 |
98 | /* size of seek buffer, FAT cluster is 32k max */ |
99 | #define SEEK_BUFFER_SIZE 0x10000 |
100 | |
101 | #define bswap16(x) (uint16_t) ( \ |
102 | (((uint16_t)(x) & 0x00ffu) << 8) | \ |
103 | (((uint16_t)(x) & 0xff00u) >> 8)) |
104 | |
105 | #define bswap32(x) (uint32_t) ( \ |
106 | (((uint32_t)(x) & 0xff000000u) >> 24) | \ |
107 | (((uint32_t)(x) & 0x00ff0000u) >> 8) | \ |
108 | (((uint32_t)(x) & 0x0000ff00u) << 8) | \ |
109 | (((uint32_t)(x) & 0x000000ffu) << 24)) |
110 | |
111 | #define bswap64(x) (uint64_t) ( \ |
112 | (((uint64_t)(x) & 0xff00000000000000ull) >> 56) | \ |
113 | (((uint64_t)(x) & 0x00ff000000000000ull) >> 40) | \ |
114 | (((uint64_t)(x) & 0x0000ff0000000000ull) >> 24) | \ |
115 | (((uint64_t)(x) & 0x000000ff00000000ull) >> 8) | \ |
116 | (((uint64_t)(x) & 0x00000000ff000000ull) << 8) | \ |
117 | (((uint64_t)(x) & 0x0000000000ff0000ull) << 24) | \ |
118 | (((uint64_t)(x) & 0x000000000000ff00ull) << 40) | \ |
119 | (((uint64_t)(x) & 0x00000000000000ffull) << 56)) |
120 | |
121 | #if BB_LITTLE_ENDIAN |
122 | #define le16_to_cpu(x) (x) |
123 | #define le32_to_cpu(x) (x) |
124 | #define le64_to_cpu(x) (x) |
125 | #define be16_to_cpu(x) bswap16(x) |
126 | #define be32_to_cpu(x) bswap32(x) |
127 | #define cpu_to_le16(x) (x) |
128 | #define cpu_to_le32(x) (x) |
129 | #define cpu_to_be32(x) bswap32(x) |
130 | #else |
131 | #define le16_to_cpu(x) bswap16(x) |
132 | #define le32_to_cpu(x) bswap32(x) |
133 | #define le64_to_cpu(x) bswap64(x) |
134 | #define be16_to_cpu(x) (x) |
135 | #define be32_to_cpu(x) (x) |
136 | #define cpu_to_le16(x) bswap16(x) |
137 | #define cpu_to_le32(x) bswap32(x) |
138 | #define cpu_to_be32(x) (x) |
139 | #endif |
140 | |
141 | enum uuid_format { |
142 | UUID_DCE_STRING, |
143 | UUID_DCE, |
144 | UUID_DOS, |
145 | UUID_NTFS, |
146 | UUID_HFS, |
147 | }; |
148 | |
149 | enum endian { |
150 | LE = 0, |
151 | BE = 1 |
152 | }; |
153 | |
154 | void volume_id_set_unicode16(char *str, size_t len, const uint8_t *buf, enum endian endianess, size_t count); |
155 | //void volume_id_set_usage(struct volume_id *id, enum volume_id_usage usage_id); |
156 | //void volume_id_set_usage_part(struct volume_id_partition *part, enum volume_id_usage usage_id); |
157 | //void volume_id_set_label_raw(struct volume_id *id, const uint8_t *buf, size_t count); |
158 | void volume_id_set_label_string(struct volume_id *id, const uint8_t *buf, size_t count); |
159 | void volume_id_set_label_unicode16(struct volume_id *id, const uint8_t *buf, enum endian endianess, size_t count); |
160 | void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_format format); |
161 | void *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len); |
162 | void volume_id_free_buffer(struct volume_id *id); |
163 | |
164 | |
165 | /* Probe routines */ |
166 | |
167 | /* RAID */ |
168 | |
169 | //int volume_id_probe_highpoint_37x_raid(struct volume_id *id, uint64_t off); |
170 | //int volume_id_probe_highpoint_45x_raid(struct volume_id *id, uint64_t off, uint64_t size); |
171 | |
172 | //int volume_id_probe_intel_software_raid(struct volume_id *id, uint64_t off, uint64_t size); |
173 | |
174 | int volume_id_probe_linux_raid(struct volume_id *id, uint64_t off, uint64_t size); |
175 | |
176 | //int volume_id_probe_lsi_mega_raid(struct volume_id *id, uint64_t off, uint64_t size); |
177 | |
178 | //int volume_id_probe_nvidia_raid(struct volume_id *id, uint64_t off, uint64_t size); |
179 | |
180 | //int volume_id_probe_promise_fasttrack_raid(struct volume_id *id, uint64_t off, uint64_t size); |
181 | |
182 | //int volume_id_probe_silicon_medley_raid(struct volume_id *id, uint64_t off, uint64_t size); |
183 | |
184 | //int volume_id_probe_via_raid(struct volume_id *id, uint64_t off, uint64_t size); |
185 | |
186 | //int volume_id_probe_lvm1(struct volume_id *id, uint64_t off); |
187 | //int volume_id_probe_lvm2(struct volume_id *id, uint64_t off); |
188 | |
189 | /* FS */ |
190 | |
191 | int volume_id_probe_cramfs(struct volume_id *id, uint64_t off); |
192 | |
193 | int volume_id_probe_ext(struct volume_id *id, uint64_t off); |
194 | |
195 | int volume_id_probe_vfat(struct volume_id *id, uint64_t off); |
196 | |
197 | int volume_id_probe_hfs_hfsplus(struct volume_id *id, uint64_t off); |
198 | |
199 | //int volume_id_probe_hpfs(struct volume_id *id, uint64_t off); |
200 | |
201 | int volume_id_probe_iso9660(struct volume_id *id, uint64_t off); |
202 | |
203 | int volume_id_probe_jfs(struct volume_id *id, uint64_t off); |
204 | |
205 | int volume_id_probe_linux_swap(struct volume_id *id, uint64_t off); |
206 | |
207 | int volume_id_probe_luks(struct volume_id *id, uint64_t off); |
208 | |
209 | //int volume_id_probe_mac_partition_map(struct volume_id *id, uint64_t off); |
210 | |
211 | //int volume_id_probe_minix(struct volume_id *id, uint64_t off); |
212 | |
213 | //int volume_id_probe_msdos_part_table(struct volume_id *id, uint64_t off); |
214 | |
215 | int volume_id_probe_ntfs(struct volume_id *id, uint64_t off); |
216 | |
217 | int volume_id_probe_ocfs2(struct volume_id *id, uint64_t off); |
218 | |
219 | int volume_id_probe_reiserfs(struct volume_id *id, uint64_t off); |
220 | |
221 | int volume_id_probe_romfs(struct volume_id *id, uint64_t off); |
222 | |
223 | int volume_id_probe_sysv(struct volume_id *id, uint64_t off); |
224 | |
225 | int volume_id_probe_udf(struct volume_id *id, uint64_t off); |
226 | |
227 | //int volume_id_probe_ufs(struct volume_id *id, uint64_t off); |
228 | |
229 | int volume_id_probe_xfs(struct volume_id *id, uint64_t off); |
230 | |
231 | #if __GNUC_PREREQ(4,1) |
232 | # pragma GCC visibility pop |
233 | #endif |