]>
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 { | |
7e937b77 KZ |
41 | FDISK_DISKLABEL_DOS = (1 << 1), |
42 | FDISK_DISKLABEL_SUN = (1 << 2), | |
43 | FDISK_DISKLABEL_SGI = (1 << 3), | |
22ddf547 | 44 | FDISK_DISKLABEL_BSD = (1 << 4), |
7e937b77 | 45 | FDISK_DISKLABEL_GPT = (1 << 5) |
8adbcf0c KZ |
46 | }; |
47 | ||
47b8e7c0 | 48 | enum { |
7845ca8d | 49 | FDISK_PARTSTAT_NONE = 0, |
47b8e7c0 KZ |
50 | FDISK_PARTSTAT_USED /* partition used */ |
51 | }; | |
52 | ||
4114da08 KZ |
53 | enum { |
54 | FDISK_ASKTYPE_NONE = 0, | |
55 | FDISK_ASKTYPE_NUMBER, | |
56 | FDISK_ASKTYPE_OFFSET, | |
ab6ea0e8 KZ |
57 | FDISK_ASKTYPE_WARN, |
58 | FDISK_ASKTYPE_WARNX, | |
ccf48af5 | 59 | FDISK_ASKTYPE_INFO, |
0c870c1c | 60 | FDISK_ASKTYPE_YESNO, |
34b06299 KZ |
61 | FDISK_ASKTYPE_TABLE, |
62 | FDISK_ASKTYPE_STRING | |
4114da08 KZ |
63 | }; |
64 | ||
dd00d1b2 KZ |
65 | /* extra flags for info massages (see fdisk_sinfo() */ |
66 | enum { | |
67 | FDISK_INFO_COLON = 1, /* colorize "foo bar:" prefix in the message */ | |
68 | FDISK_INFO_SUCCESS, /* info after successful action */ | |
69 | }; | |
fb1caca7 | 70 | |
d56a7c23 KZ |
71 | /* init.c */ |
72 | extern void fdisk_init_debug(int mask); | |
73 | ||
f4be9e2b | 74 | /* context.h */ |
4e0e8253 | 75 | extern struct fdisk_context *fdisk_new_context(void); |
01b20713 KZ |
76 | extern struct fdisk_context *fdisk_new_nested_context( |
77 | struct fdisk_context *parent, const char *name); | |
f4be9e2b KZ |
78 | extern void fdisk_free_context(struct fdisk_context *cxt); |
79 | ||
7845ca8d KZ |
80 | extern int fdisk_context_set_ask(struct fdisk_context *cxt, |
81 | int (*ask_cb)(struct fdisk_context *, struct fdisk_ask *, void *), | |
82 | void *data); | |
83 | ||
4e0e8253 KZ |
84 | extern int fdisk_context_assign_device(struct fdisk_context *cxt, |
85 | const char *fname, int readonly); | |
a57639e1 | 86 | extern int fdisk_context_deassign_device(struct fdisk_context *cxt); |
4e0e8253 | 87 | |
0c5d095e KZ |
88 | extern struct fdisk_label *fdisk_context_get_label(struct fdisk_context *cxt, |
89 | const char *name); | |
90 | ||
53b422ab KZ |
91 | extern int fdisk_context_switch_label(struct fdisk_context *cxt, |
92 | const char *name); | |
93 | ||
cb7ce873 | 94 | extern int fdisk_context_set_unit(struct fdisk_context *cxt, const char *str); |
b4bfbadd KZ |
95 | |
96 | #define PLURAL 0 | |
97 | #define SINGULAR 1 | |
cb7ce873 | 98 | extern const char *fdisk_context_get_unit(struct fdisk_context *cxt, int n); |
b4bfbadd | 99 | |
cb7ce873 KZ |
100 | extern unsigned int fdisk_context_get_units_per_sector(struct fdisk_context *cxt); |
101 | ||
a5c1b0fa KZ |
102 | extern int fdisk_context_enable_details(struct fdisk_context *cxt, int enable); |
103 | ||
a5fe1b3f KZ |
104 | /* parttype.c */ |
105 | extern struct fdisk_parttype *fdisk_get_parttype_from_code(struct fdisk_context *cxt, | |
106 | unsigned int code); | |
107 | extern struct fdisk_parttype *fdisk_get_parttype_from_string(struct fdisk_context *cxt, | |
108 | const char *str); | |
109 | extern struct fdisk_parttype *fdisk_parse_parttype(struct fdisk_context *cxt, const char *str); | |
110 | ||
111 | extern struct fdisk_parttype *fdisk_new_unknown_parttype(unsigned int type, const char *typestr); | |
112 | extern void fdisk_free_parttype(struct fdisk_parttype *type); | |
113 | extern size_t fdisk_get_nparttypes(struct fdisk_context *cxt); | |
114 | ||
950edd1a KZ |
115 | extern int fdisk_is_parttype_string(struct fdisk_context *cxt); |
116 | ||
8adbcf0c | 117 | /* label.c */ |
0b52b94c KZ |
118 | extern int fdisk_require_geometry(struct fdisk_context *cxt); |
119 | extern int fdisk_missing_geometry(struct fdisk_context *cxt); | |
120 | ||
8adbcf0c KZ |
121 | extern int fdisk_dev_has_disklabel(struct fdisk_context *cxt); |
122 | ||
123 | extern int fdisk_dev_is_disklabel(struct fdisk_context *cxt, enum fdisk_labeltype l); | |
124 | #define fdisk_is_disklabel(c, x) fdisk_dev_is_disklabel(c, FDISK_DISKLABEL_ ## x) | |
125 | ||
126 | extern int fdisk_write_disklabel(struct fdisk_context *cxt); | |
127 | extern int fdisk_verify_disklabel(struct fdisk_context *cxt); | |
171372d3 | 128 | extern int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name); |
3c5fb475 | 129 | extern int fdisk_list_disklabel(struct fdisk_context *cxt); |
8adbcf0c | 130 | |
21fe3dde | 131 | extern int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id); |
35b1f0a4 | 132 | extern int fdisk_set_disklabel_id(struct fdisk_context *cxt); |
21fe3dde | 133 | |
7845ca8d | 134 | extern int fdisk_add_partition(struct fdisk_context *cxt, struct fdisk_parttype *t); |
9ffeb235 | 135 | extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partnum); |
8adbcf0c | 136 | |
9ffeb235 KZ |
137 | extern struct fdisk_parttype *fdisk_get_partition_type(struct fdisk_context *cxt, size_t partnum); |
138 | extern int fdisk_set_partition_type(struct fdisk_context *cxt, size_t partnum, | |
171372d3 KZ |
139 | struct fdisk_parttype *t); |
140 | ||
2e3b40d3 KZ |
141 | extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed); |
142 | extern int fdisk_label_is_changed(struct fdisk_label *lb); | |
143 | ||
9ffeb235 | 144 | extern int fdisk_partition_get_status(struct fdisk_context *cxt, size_t partnum, int *status); |
225592d4 | 145 | extern int fdisk_partition_is_used(struct fdisk_context *cxt, size_t partnum); |
fb1caca7 | 146 | extern int fdisk_partition_toggle_flag(struct fdisk_context *cxt, size_t partnum, unsigned long flag); |
2e3b40d3 | 147 | |
c578f9af KZ |
148 | /* alignment.c */ |
149 | extern int fdisk_reset_alignment(struct fdisk_context *cxt); | |
1653f0b0 KZ |
150 | extern int fdisk_reset_device_properties(struct fdisk_context *cxt); |
151 | ||
152 | extern int fdisk_save_user_geometry(struct fdisk_context *cxt, | |
153 | unsigned int cylinders, | |
154 | unsigned int heads, | |
155 | unsigned int sectors); | |
156 | ||
157 | extern int fdisk_save_user_sector_size(struct fdisk_context *cxt, | |
158 | unsigned int phy, | |
159 | unsigned int log); | |
6bcd192c KZ |
160 | |
161 | extern int fdisk_has_user_device_properties(struct fdisk_context *cxt); | |
162 | ||
a57639e1 | 163 | extern int fdisk_reread_partition_table(struct fdisk_context *cxt); |
852ce62b KZ |
164 | |
165 | /* dos.c */ | |
166 | extern int fdisk_dos_enable_compatible(struct fdisk_label *lb, int enable); | |
167 | extern int fdisk_dos_is_compatible(struct fdisk_label *lb); | |
168 | ||
4170ae9c KZ |
169 | /* sun.h */ |
170 | extern int fdisk_sun_set_alt_cyl(struct fdisk_context *cxt); | |
171 | extern int fdisk_sun_set_xcyl(struct fdisk_context *cxt); | |
172 | extern int fdisk_sun_set_ilfact(struct fdisk_context *cxt); | |
173 | extern int fdisk_sun_set_rspeed(struct fdisk_context *cxt); | |
174 | extern int fdisk_sun_set_pcylcount(struct fdisk_context *cxt); | |
175 | ||
d5b2b8db KZ |
176 | /* bsd.c */ |
177 | extern int fdisk_bsd_edit_disklabel(struct fdisk_context *cxt); | |
178 | extern int fdisk_bsd_write_bootstrap(struct fdisk_context *cxt); | |
179 | extern int fdisk_bsd_link_partition(struct fdisk_context *cxt); | |
180 | ||
067686d8 KZ |
181 | /* sgi.h */ |
182 | #define SGI_FLAG_BOOT 1 | |
183 | #define SGI_FLAG_SWAP 2 | |
ac84272d KZ |
184 | extern int fdisk_sgi_set_bootfile(struct fdisk_context *cxt); |
185 | extern int fdisk_sgi_create_info(struct fdisk_context *cxt); | |
067686d8 | 186 | |
34b06299 KZ |
187 | /* gpt */ |
188 | extern int fdisk_gpt_partition_set_uuid(struct fdisk_context *cxt, size_t i); | |
1054699c | 189 | extern int fdisk_gpt_partition_set_name(struct fdisk_context *cxt, size_t i); |
34b06299 | 190 | |
50992267 KZ |
191 | /* dos.c */ |
192 | extern struct dos_partition *fdisk_dos_get_partition( | |
193 | struct fdisk_context *cxt, | |
194 | size_t i); | |
195 | ||
196 | extern int fdisk_dos_fix_order(struct fdisk_context *cxt); | |
197 | extern int fdisk_dos_move_begin(struct fdisk_context *cxt, int i); | |
198 | extern int fdisk_dos_list_extended(struct fdisk_context *cxt); | |
199 | ||
200 | #define DOS_FLAG_ACTIVE 1 | |
201 | ||
7845ca8d | 202 | /* ask.c */ |
ab6ea0e8 KZ |
203 | #define fdisk_is_ask(a, x) (fdisk_ask_get_type(a) == FDISK_ASKTYPE_ ## x) |
204 | ||
4114da08 KZ |
205 | extern struct fdisk_ask *fdisk_new_ask(void); |
206 | extern void fdisk_reset_ask(struct fdisk_ask *ask); | |
207 | extern void fdisk_free_ask(struct fdisk_ask *ask); | |
208 | extern const char *fdisk_ask_get_query(struct fdisk_ask *ask); | |
209 | extern int fdisk_ask_set_query(struct fdisk_ask *ask, const char *str); | |
7845ca8d | 210 | extern int fdisk_ask_get_type(struct fdisk_ask *ask); |
4114da08 | 211 | extern int fdisk_ask_set_type(struct fdisk_ask *ask, int type); |
dd00d1b2 KZ |
212 | extern int fdisk_ask_set_flags(struct fdisk_ask *ask, unsigned int flags); |
213 | extern unsigned int fdisk_ask_get_flags(struct fdisk_ask *ask); | |
214 | ||
4114da08 KZ |
215 | extern int fdisk_do_ask(struct fdisk_context *cxt, struct fdisk_ask *ask); |
216 | ||
7845ca8d | 217 | extern const char *fdisk_ask_number_get_range(struct fdisk_ask *ask); |
4114da08 | 218 | extern int fdisk_ask_number_set_range(struct fdisk_ask *ask, const char *range); |
7845ca8d | 219 | extern uint64_t fdisk_ask_number_get_default(struct fdisk_ask *ask); |
4114da08 | 220 | extern int fdisk_ask_number_set_default(struct fdisk_ask *ask, uint64_t dflt); |
7845ca8d | 221 | extern uint64_t fdisk_ask_number_get_low(struct fdisk_ask *ask); |
4114da08 | 222 | extern int fdisk_ask_number_set_low(struct fdisk_ask *ask, uint64_t low); |
7845ca8d | 223 | extern uint64_t fdisk_ask_number_get_high(struct fdisk_ask *ask); |
4114da08 KZ |
224 | extern int fdisk_ask_number_set_high(struct fdisk_ask *ask, uint64_t high); |
225 | extern uint64_t fdisk_ask_number_get_base(struct fdisk_ask *ask); | |
226 | extern int fdisk_ask_number_set_base(struct fdisk_ask *ask, uint64_t base); | |
227 | extern uint64_t fdisk_ask_number_get_unit(struct fdisk_ask *ask); | |
228 | extern int fdisk_ask_number_set_unit(struct fdisk_ask *ask, uint64_t unit); | |
229 | extern uint64_t fdisk_ask_number_get_result(struct fdisk_ask *ask); | |
7845ca8d | 230 | extern int fdisk_ask_number_set_result(struct fdisk_ask *ask, uint64_t result); |
4114da08 KZ |
231 | extern int fdisk_ask_number_set_relative(struct fdisk_ask *ask, int relative); |
232 | extern int fdisk_ask_number_is_relative(struct fdisk_ask *ask); | |
181aab40 | 233 | extern int fdisk_ask_number_inchars(struct fdisk_ask *ask); |
24fc19a1 KZ |
234 | |
235 | extern int fdisk_ask_number(struct fdisk_context *cxt, | |
236 | uintmax_t low, | |
237 | uintmax_t dflt, | |
238 | uintmax_t high, | |
239 | const char *query, | |
240 | uintmax_t *result); | |
241 | ||
34b06299 KZ |
242 | extern int fdisk_ask_string(struct fdisk_context *cxt, |
243 | const char *query, | |
244 | char **result); | |
245 | ||
246 | extern char *fdisk_ask_string_get_result(struct fdisk_ask *ask); | |
247 | extern int fdisk_ask_string_set_result(struct fdisk_ask *ask, char *result); | |
248 | ||
ccf48af5 KZ |
249 | extern int fdisk_ask_yesno(struct fdisk_context *cxt, const char *query, int *result); |
250 | extern uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask); | |
251 | extern int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result); | |
252 | ||
ab6ea0e8 | 253 | extern int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...); |
dd00d1b2 KZ |
254 | extern int fdisk_colon(struct fdisk_context *cxt, const char *fmt, ...); |
255 | extern int fdisk_sinfo(struct fdisk_context *cxt, unsigned int flags, const char *fmt, ...); | |
256 | ||
ab6ea0e8 KZ |
257 | extern int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...); |
258 | extern int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...); | |
259 | ||
260 | extern int fdisk_ask_print_get_errno(struct fdisk_ask *ask); | |
261 | extern int fdisk_ask_print_set_errno(struct fdisk_ask *ask, int errnum); | |
262 | extern const char *fdisk_ask_print_get_mesg(struct fdisk_ask *ask); | |
263 | extern int fdisk_ask_print_set_mesg(struct fdisk_ask *ask, const char *mesg); | |
ab6ea0e8 | 264 | |
d56a7c23 KZ |
265 | #ifdef __cplusplus |
266 | } | |
267 | #endif | |
268 | ||
269 | #endif /* _LIBFDISK_FDISK_H */ |