]>
Commit | Line | Data |
---|---|---|
d56a7c23 KZ |
1 | /* |
2 | * libfdisk.h - libfdisk API | |
3 | * | |
4 | * Copyright (C) 2012 Karel Zak <kzak@redhat.com> | |
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 General Public License along | |
17 | * with this program; if not, write to the Free Software Foundation, Inc., | |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 | */ | |
20 | ||
21 | #ifndef _LIBFDISK_FDISK_H | |
22 | #define _LIBFDISK_FDISK_H | |
23 | ||
24 | #ifdef __cplusplus | |
25 | extern "C" { | |
26 | #endif | |
27 | ||
ab6ea0e8 KZ |
28 | #include <stdarg.h> |
29 | #include <stdint.h> | |
30 | ||
a5fe1b3f | 31 | struct fdisk_context; |
0c5d095e | 32 | struct fdisk_label; |
a5fe1b3f | 33 | struct fdisk_parttype; |
7845ca8d | 34 | struct fdisk_ask; |
0c870c1c | 35 | struct tt; |
a5fe1b3f | 36 | |
8adbcf0c KZ |
37 | /* |
38 | * Supported partition table types (labels) | |
39 | */ | |
40 | enum fdisk_labeltype { | |
41 | FDISK_DISKLABEL_DOS = 1, | |
42 | FDISK_DISKLABEL_SUN = 2, | |
43 | FDISK_DISKLABEL_SGI = 4, | |
d23c661c | 44 | FDISK_DISKLABEL_OSF = 8, |
d23c661c | 45 | FDISK_DISKLABEL_GPT = 32, |
8adbcf0c KZ |
46 | FDISK_DISKLABEL_ANY = -1 |
47 | }; | |
48 | ||
47b8e7c0 | 49 | enum { |
7845ca8d | 50 | FDISK_PARTSTAT_NONE = 0, |
47b8e7c0 KZ |
51 | FDISK_PARTSTAT_USED /* partition used */ |
52 | }; | |
53 | ||
4114da08 KZ |
54 | enum { |
55 | FDISK_ASKTYPE_NONE = 0, | |
56 | FDISK_ASKTYPE_NUMBER, | |
57 | FDISK_ASKTYPE_OFFSET, | |
ab6ea0e8 KZ |
58 | FDISK_ASKTYPE_WARN, |
59 | FDISK_ASKTYPE_WARNX, | |
ccf48af5 | 60 | FDISK_ASKTYPE_INFO, |
0c870c1c | 61 | FDISK_ASKTYPE_YESNO, |
34b06299 KZ |
62 | FDISK_ASKTYPE_TABLE, |
63 | FDISK_ASKTYPE_STRING | |
4114da08 KZ |
64 | }; |
65 | ||
fb1caca7 KZ |
66 | |
67 | ||
d56a7c23 KZ |
68 | /* init.c */ |
69 | extern void fdisk_init_debug(int mask); | |
70 | ||
f4be9e2b | 71 | /* context.h */ |
4e0e8253 | 72 | extern struct fdisk_context *fdisk_new_context(void); |
01b20713 KZ |
73 | extern struct fdisk_context *fdisk_new_nested_context( |
74 | struct fdisk_context *parent, const char *name); | |
f4be9e2b KZ |
75 | extern void fdisk_free_context(struct fdisk_context *cxt); |
76 | ||
7845ca8d KZ |
77 | extern int fdisk_context_set_ask(struct fdisk_context *cxt, |
78 | int (*ask_cb)(struct fdisk_context *, struct fdisk_ask *, void *), | |
79 | void *data); | |
80 | ||
4e0e8253 KZ |
81 | extern int fdisk_context_assign_device(struct fdisk_context *cxt, |
82 | const char *fname, int readonly); | |
83 | ||
0c5d095e KZ |
84 | extern struct fdisk_label *fdisk_context_get_label(struct fdisk_context *cxt, |
85 | const char *name); | |
86 | ||
53b422ab KZ |
87 | extern int fdisk_context_switch_label(struct fdisk_context *cxt, |
88 | const char *name); | |
89 | ||
cb7ce873 | 90 | extern int fdisk_context_set_unit(struct fdisk_context *cxt, const char *str); |
b4bfbadd KZ |
91 | |
92 | #define PLURAL 0 | |
93 | #define SINGULAR 1 | |
cb7ce873 | 94 | extern const char *fdisk_context_get_unit(struct fdisk_context *cxt, int n); |
b4bfbadd | 95 | |
cb7ce873 KZ |
96 | extern unsigned int fdisk_context_get_units_per_sector(struct fdisk_context *cxt); |
97 | ||
a5c1b0fa KZ |
98 | extern int fdisk_context_enable_details(struct fdisk_context *cxt, int enable); |
99 | ||
a5fe1b3f KZ |
100 | /* parttype.c */ |
101 | extern struct fdisk_parttype *fdisk_get_parttype_from_code(struct fdisk_context *cxt, | |
102 | unsigned int code); | |
103 | extern struct fdisk_parttype *fdisk_get_parttype_from_string(struct fdisk_context *cxt, | |
104 | const char *str); | |
105 | extern struct fdisk_parttype *fdisk_parse_parttype(struct fdisk_context *cxt, const char *str); | |
106 | ||
107 | extern struct fdisk_parttype *fdisk_new_unknown_parttype(unsigned int type, const char *typestr); | |
108 | extern void fdisk_free_parttype(struct fdisk_parttype *type); | |
109 | extern size_t fdisk_get_nparttypes(struct fdisk_context *cxt); | |
110 | ||
950edd1a KZ |
111 | extern int fdisk_is_parttype_string(struct fdisk_context *cxt); |
112 | ||
8adbcf0c | 113 | /* label.c */ |
0b52b94c KZ |
114 | extern int fdisk_require_geometry(struct fdisk_context *cxt); |
115 | extern int fdisk_missing_geometry(struct fdisk_context *cxt); | |
116 | ||
8adbcf0c KZ |
117 | extern int fdisk_dev_has_disklabel(struct fdisk_context *cxt); |
118 | ||
119 | extern int fdisk_dev_is_disklabel(struct fdisk_context *cxt, enum fdisk_labeltype l); | |
120 | #define fdisk_is_disklabel(c, x) fdisk_dev_is_disklabel(c, FDISK_DISKLABEL_ ## x) | |
121 | ||
122 | extern int fdisk_write_disklabel(struct fdisk_context *cxt); | |
123 | extern int fdisk_verify_disklabel(struct fdisk_context *cxt); | |
171372d3 | 124 | extern int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name); |
3c5fb475 | 125 | extern int fdisk_list_disklabel(struct fdisk_context *cxt); |
8adbcf0c | 126 | |
21fe3dde | 127 | extern int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id); |
35b1f0a4 | 128 | extern int fdisk_set_disklabel_id(struct fdisk_context *cxt); |
21fe3dde | 129 | |
7845ca8d | 130 | extern int fdisk_add_partition(struct fdisk_context *cxt, struct fdisk_parttype *t); |
9ffeb235 | 131 | extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partnum); |
8adbcf0c | 132 | |
9ffeb235 KZ |
133 | extern struct fdisk_parttype *fdisk_get_partition_type(struct fdisk_context *cxt, size_t partnum); |
134 | extern int fdisk_set_partition_type(struct fdisk_context *cxt, size_t partnum, | |
171372d3 KZ |
135 | struct fdisk_parttype *t); |
136 | ||
2e3b40d3 KZ |
137 | extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed); |
138 | extern int fdisk_label_is_changed(struct fdisk_label *lb); | |
139 | ||
9ffeb235 | 140 | extern int fdisk_partition_get_status(struct fdisk_context *cxt, size_t partnum, int *status); |
225592d4 | 141 | extern int fdisk_partition_is_used(struct fdisk_context *cxt, size_t partnum); |
fb1caca7 | 142 | extern int fdisk_partition_toggle_flag(struct fdisk_context *cxt, size_t partnum, unsigned long flag); |
2e3b40d3 | 143 | |
c578f9af KZ |
144 | /* alignment.c */ |
145 | extern int fdisk_reset_alignment(struct fdisk_context *cxt); | |
1653f0b0 KZ |
146 | extern int fdisk_reset_device_properties(struct fdisk_context *cxt); |
147 | ||
148 | extern int fdisk_save_user_geometry(struct fdisk_context *cxt, | |
149 | unsigned int cylinders, | |
150 | unsigned int heads, | |
151 | unsigned int sectors); | |
152 | ||
153 | extern int fdisk_save_user_sector_size(struct fdisk_context *cxt, | |
154 | unsigned int phy, | |
155 | unsigned int log); | |
c578f9af | 156 | |
852ce62b KZ |
157 | |
158 | /* dos.c */ | |
159 | extern int fdisk_dos_enable_compatible(struct fdisk_label *lb, int enable); | |
160 | extern int fdisk_dos_is_compatible(struct fdisk_label *lb); | |
161 | ||
4170ae9c KZ |
162 | /* sun.h */ |
163 | extern int fdisk_sun_set_alt_cyl(struct fdisk_context *cxt); | |
164 | extern int fdisk_sun_set_xcyl(struct fdisk_context *cxt); | |
165 | extern int fdisk_sun_set_ilfact(struct fdisk_context *cxt); | |
166 | extern int fdisk_sun_set_rspeed(struct fdisk_context *cxt); | |
167 | extern int fdisk_sun_set_pcylcount(struct fdisk_context *cxt); | |
168 | ||
067686d8 KZ |
169 | /* sgi.h */ |
170 | #define SGI_FLAG_BOOT 1 | |
171 | #define SGI_FLAG_SWAP 2 | |
172 | ||
173 | extern int sgi_change_sysid(struct fdisk_context *cxt, int i, int sys); | |
174 | extern unsigned int sgi_get_start_sector(struct fdisk_context *cxt, int i ); | |
175 | extern unsigned int sgi_get_num_sectors(struct fdisk_context *cxt, int i ); | |
176 | extern void sgi_set_bootpartition(struct fdisk_context *cxt, int i ); | |
177 | extern void sgi_set_swappartition(struct fdisk_context *cxt, int i ); | |
178 | extern int sgi_get_bootpartition(struct fdisk_context *cxt); | |
179 | extern int sgi_get_swappartition(struct fdisk_context *cxt); | |
180 | extern int sgi_set_bootfile(struct fdisk_context *cxt); | |
181 | extern int sgi_create_info(struct fdisk_context *cxt); | |
182 | ||
34b06299 KZ |
183 | /* gpt */ |
184 | extern int fdisk_gpt_partition_set_uuid(struct fdisk_context *cxt, size_t i); | |
1054699c | 185 | extern int fdisk_gpt_partition_set_name(struct fdisk_context *cxt, size_t i); |
34b06299 | 186 | |
7845ca8d | 187 | /* ask.c */ |
ab6ea0e8 KZ |
188 | #define fdisk_is_ask(a, x) (fdisk_ask_get_type(a) == FDISK_ASKTYPE_ ## x) |
189 | ||
4114da08 KZ |
190 | extern struct fdisk_ask *fdisk_new_ask(void); |
191 | extern void fdisk_reset_ask(struct fdisk_ask *ask); | |
192 | extern void fdisk_free_ask(struct fdisk_ask *ask); | |
193 | extern const char *fdisk_ask_get_query(struct fdisk_ask *ask); | |
194 | extern int fdisk_ask_set_query(struct fdisk_ask *ask, const char *str); | |
7845ca8d | 195 | extern int fdisk_ask_get_type(struct fdisk_ask *ask); |
4114da08 KZ |
196 | extern int fdisk_ask_set_type(struct fdisk_ask *ask, int type); |
197 | extern int fdisk_do_ask(struct fdisk_context *cxt, struct fdisk_ask *ask); | |
198 | ||
7845ca8d | 199 | extern const char *fdisk_ask_number_get_range(struct fdisk_ask *ask); |
4114da08 | 200 | extern int fdisk_ask_number_set_range(struct fdisk_ask *ask, const char *range); |
7845ca8d | 201 | extern uint64_t fdisk_ask_number_get_default(struct fdisk_ask *ask); |
4114da08 | 202 | extern int fdisk_ask_number_set_default(struct fdisk_ask *ask, uint64_t dflt); |
7845ca8d | 203 | extern uint64_t fdisk_ask_number_get_low(struct fdisk_ask *ask); |
4114da08 | 204 | extern int fdisk_ask_number_set_low(struct fdisk_ask *ask, uint64_t low); |
7845ca8d | 205 | extern uint64_t fdisk_ask_number_get_high(struct fdisk_ask *ask); |
4114da08 KZ |
206 | extern int fdisk_ask_number_set_high(struct fdisk_ask *ask, uint64_t high); |
207 | extern uint64_t fdisk_ask_number_get_base(struct fdisk_ask *ask); | |
208 | extern int fdisk_ask_number_set_base(struct fdisk_ask *ask, uint64_t base); | |
209 | extern uint64_t fdisk_ask_number_get_unit(struct fdisk_ask *ask); | |
210 | extern int fdisk_ask_number_set_unit(struct fdisk_ask *ask, uint64_t unit); | |
211 | extern uint64_t fdisk_ask_number_get_result(struct fdisk_ask *ask); | |
7845ca8d | 212 | extern int fdisk_ask_number_set_result(struct fdisk_ask *ask, uint64_t result); |
4114da08 KZ |
213 | extern int fdisk_ask_number_set_relative(struct fdisk_ask *ask, int relative); |
214 | extern int fdisk_ask_number_is_relative(struct fdisk_ask *ask); | |
7845ca8d | 215 | |
24fc19a1 KZ |
216 | |
217 | extern int fdisk_ask_number(struct fdisk_context *cxt, | |
218 | uintmax_t low, | |
219 | uintmax_t dflt, | |
220 | uintmax_t high, | |
221 | const char *query, | |
222 | uintmax_t *result); | |
223 | ||
34b06299 KZ |
224 | extern int fdisk_ask_string(struct fdisk_context *cxt, |
225 | const char *query, | |
226 | char **result); | |
227 | ||
228 | extern char *fdisk_ask_string_get_result(struct fdisk_ask *ask); | |
229 | extern int fdisk_ask_string_set_result(struct fdisk_ask *ask, char *result); | |
230 | ||
ccf48af5 KZ |
231 | extern int fdisk_ask_yesno(struct fdisk_context *cxt, const char *query, int *result); |
232 | extern uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask); | |
233 | extern int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result); | |
234 | ||
ab6ea0e8 KZ |
235 | extern int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...); |
236 | extern int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...); | |
237 | extern int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...); | |
238 | ||
239 | extern int fdisk_ask_print_get_errno(struct fdisk_ask *ask); | |
240 | extern int fdisk_ask_print_set_errno(struct fdisk_ask *ask, int errnum); | |
241 | extern const char *fdisk_ask_print_get_mesg(struct fdisk_ask *ask); | |
242 | extern int fdisk_ask_print_set_mesg(struct fdisk_ask *ask, const char *mesg); | |
ab6ea0e8 | 243 | |
d56a7c23 KZ |
244 | #ifdef __cplusplus |
245 | } | |
246 | #endif | |
247 | ||
248 | #endif /* _LIBFDISK_FDISK_H */ |