source: MondoRescue/branches/3.3/mindi-busybox/util-linux/volume_id/volume_id_internal.h@ 3865

Last change on this file since 3865 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

  • Property svn:eol-style set to native
File size: 7.6 KB
Line 
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
24PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
25
26#define dbg(...) ((void)0)
27/* #define dbg(...) bb_error_msg(__VA_ARGS__) */
28
29/* volume_id.h */
30
31#define VOLUME_ID_VERSION 48
32
33#define VOLUME_ID_LABEL_SIZE 64
34#define VOLUME_ID_UUID_SIZE 36
35#define VOLUME_ID_FORMAT_SIZE 32
36#define VOLUME_ID_PARTITIONS_MAX 256
37
38enum volume_id_usage {
39 VOLUME_ID_UNUSED,
40 VOLUME_ID_UNPROBED,
41 VOLUME_ID_OTHER,
42 VOLUME_ID_FILESYSTEM,
43 VOLUME_ID_PARTITIONTABLE,
44 VOLUME_ID_RAID,
45 VOLUME_ID_DISKLABEL,
46 VOLUME_ID_CRYPTO,
47};
48
49#ifdef UNUSED_PARTITION_CODE
50struct volume_id_partition {
51// const char *type;
52// const char *usage;
53// smallint usage_id;
54// uint8_t pt_type_raw;
55// uint64_t pt_off;
56// uint64_t pt_len;
57};
58#endif
59
60struct volume_id {
61 int fd;
62// int fd_close:1;
63 int error;
64 size_t sbbuf_len;
65 size_t seekbuf_len;
66 uint8_t *sbbuf;
67 uint8_t *seekbuf;
68 uint64_t seekbuf_off;
69#ifdef UNUSED_PARTITION_CODE
70 struct volume_id_partition *partitions;
71 size_t partition_count;
72#endif
73// uint8_t label_raw[VOLUME_ID_LABEL_SIZE];
74// size_t label_raw_len;
75 char label[VOLUME_ID_LABEL_SIZE+1];
76// uint8_t uuid_raw[VOLUME_ID_UUID_SIZE];
77// size_t uuid_raw_len;
78 /* uuid is stored in ASCII (not binary) form here: */
79 char uuid[VOLUME_ID_UUID_SIZE+1];
80// char type_version[VOLUME_ID_FORMAT_SIZE];
81// smallint usage_id;
82// const char *usage;
83#if ENABLE_FEATURE_BLKID_TYPE
84 const char *type;
85#endif
86};
87
88struct volume_id* FAST_FUNC volume_id_open_node(int fd);
89int FAST_FUNC volume_id_probe_all(struct volume_id *id, /*uint64_t off,*/ uint64_t size);
90void FAST_FUNC free_volume_id(struct volume_id *id);
91
92/* util.h */
93
94/* size of superblock buffer, reiserfs block is at 64k */
95#define SB_BUFFER_SIZE 0x11000
96/* size of seek buffer, FAT cluster is 32k max */
97#define SEEK_BUFFER_SIZE 0x10000
98
99#if BB_LITTLE_ENDIAN
100# define le16_to_cpu(x) (uint16_t)(x)
101# define le32_to_cpu(x) (uint32_t)(x)
102# define le64_to_cpu(x) (uint64_t)(x)
103# define be16_to_cpu(x) (uint16_t)(bswap_16(x))
104# define be32_to_cpu(x) (uint32_t)(bswap_32(x))
105# define cpu_to_le16(x) (uint16_t)(x)
106# define cpu_to_le32(x) (uint32_t)(x)
107# define cpu_to_be32(x) (uint32_t)(bswap_32(x))
108#else
109# define le16_to_cpu(x) (uint16_t)(bswap_16(x))
110# define le32_to_cpu(x) (uint32_t)(bswap_32(x))
111# define le64_to_cpu(x) (uint64_t)(bb_bswap_64(x))
112# define be16_to_cpu(x) (uint16_t)(x)
113# define be32_to_cpu(x) (uint32_t)(x)
114# define cpu_to_le16(x) (uint16_t)(bswap_16(x))
115# define cpu_to_le32(x) (uint32_t)(bswap_32(x))
116# define cpu_to_be32(x) (uint32_t)(x)
117#endif
118
119/* volume_id_set_uuid(id,buf,fmt) assumes size of uuid buf
120 * by shifting: 4 << fmt, except for fmt == UUID_DCE_STRING.
121 * The constants below should match sizes.
122 */
123enum uuid_format {
124 UUID_DOS = 0, /* 4 bytes */
125 UUID_NTFS = 1, /* 8 bytes */
126 UUID_DCE = 2, /* 16 bytes */
127 UUID_DCE_STRING = 3, /* 36 bytes (VOLUME_ID_UUID_SIZE) */
128};
129
130enum endian {
131 LE = 0,
132 BE = 1
133};
134
135void volume_id_set_unicode16(char *str, size_t len, const uint8_t *buf, enum endian endianess, size_t count);
136//void volume_id_set_usage(struct volume_id *id, enum volume_id_usage usage_id);
137//void volume_id_set_usage_part(struct volume_id_partition *part, enum volume_id_usage usage_id);
138//void volume_id_set_label_raw(struct volume_id *id, const uint8_t *buf, size_t count);
139void volume_id_set_label_string(struct volume_id *id, const uint8_t *buf, size_t count);
140void volume_id_set_label_unicode16(struct volume_id *id, const uint8_t *buf, enum endian endianess, size_t count);
141void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_format format);
142void *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len);
143void volume_id_free_buffer(struct volume_id *id);
144
145
146/* Probe routines */
147
148/* RAID */
149
150//int FAST_FUNC volume_id_probe_highpoint_37x_raid(struct volume_id *id /*,uint64_t off*/);
151//int FAST_FUNC volume_id_probe_highpoint_45x_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
152
153//int FAST_FUNC volume_id_probe_intel_software_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
154
155int FAST_FUNC volume_id_probe_linux_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
156
157//int FAST_FUNC volume_id_probe_lsi_mega_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
158
159//int FAST_FUNC volume_id_probe_nvidia_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
160
161//int FAST_FUNC volume_id_probe_promise_fasttrack_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
162
163//int FAST_FUNC volume_id_probe_silicon_medley_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
164
165//int FAST_FUNC volume_id_probe_via_raid(struct volume_id *id /*,uint64_t off*/, uint64_t size);
166
167//int FAST_FUNC volume_id_probe_lvm1(struct volume_id *id /*,uint64_t off*/);
168//int FAST_FUNC volume_id_probe_lvm2(struct volume_id *id /*,uint64_t off*/);
169
170/* FS */
171
172int FAST_FUNC volume_id_probe_bcache(struct volume_id *id /*,uint64_t off*/);
173
174int FAST_FUNC volume_id_probe_btrfs(struct volume_id *id /*,uint64_t off*/);
175
176int FAST_FUNC volume_id_probe_cramfs(struct volume_id *id /*,uint64_t off*/);
177
178int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/);
179
180int FAST_FUNC volume_id_probe_vfat(struct volume_id *id /*,uint64_t off*/);
181
182int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/);
183
184//int FAST_FUNC volume_id_probe_hpfs(struct volume_id *id /*,uint64_t off*/);
185
186int FAST_FUNC volume_id_probe_iso9660(struct volume_id *id /*,uint64_t off*/);
187
188int FAST_FUNC volume_id_probe_jfs(struct volume_id *id /*,uint64_t off*/);
189
190int FAST_FUNC volume_id_probe_linux_swap(struct volume_id *id /*,uint64_t off*/);
191
192int FAST_FUNC volume_id_probe_luks(struct volume_id *id /*,uint64_t off*/);
193
194//int FAST_FUNC volume_id_probe_mac_partition_map(struct volume_id *id /*,uint64_t off*/);
195
196//int FAST_FUNC volume_id_probe_minix(struct volume_id *id /*,uint64_t off*/);
197
198//int FAST_FUNC volume_id_probe_msdos_part_table(struct volume_id *id /*,uint64_t off*/);
199
200int FAST_FUNC volume_id_probe_f2fs(struct volume_id *id /*,uint64_t off*/);
201
202int FAST_FUNC volume_id_probe_nilfs(struct volume_id *id /*,uint64_t off*/);
203
204int FAST_FUNC volume_id_probe_ntfs(struct volume_id *id /*,uint64_t off*/);
205
206int FAST_FUNC volume_id_probe_exfat(struct volume_id *id /*,uint64_t off*/);
207
208int FAST_FUNC volume_id_probe_ocfs2(struct volume_id *id /*,uint64_t off*/);
209
210int FAST_FUNC volume_id_probe_reiserfs(struct volume_id *id /*,uint64_t off*/);
211
212int FAST_FUNC volume_id_probe_romfs(struct volume_id *id /*,uint64_t off*/);
213
214int FAST_FUNC volume_id_probe_squashfs(struct volume_id *id /*,uint64_t off*/);
215
216int FAST_FUNC volume_id_probe_sysv(struct volume_id *id /*,uint64_t off*/);
217
218int FAST_FUNC volume_id_probe_udf(struct volume_id *id /*,uint64_t off*/);
219
220//int FAST_FUNC volume_id_probe_ufs(struct volume_id *id /*,uint64_t off*/);
221
222int FAST_FUNC volume_id_probe_xfs(struct volume_id *id /*,uint64_t off*/);
223
224POP_SAVED_FUNCTION_VISIBILITY
Note: See TracBrowser for help on using the repository browser.