]> git.ipfire.org Git - thirdparty/util-linux.git/blame - libfdisk/src/libfdisk.h
fdisk: (dos) use libfdisk to ask for partition type
[thirdparty/util-linux.git] / libfdisk / src / libfdisk.h
CommitLineData
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
25extern "C" {
26#endif
27
ab6ea0e8
KZ
28#include <stdarg.h>
29#include <stdint.h>
30
a5fe1b3f 31struct fdisk_context;
0c5d095e 32struct fdisk_label;
a5fe1b3f 33struct fdisk_parttype;
7845ca8d 34struct fdisk_ask;
0c870c1c 35struct tt;
a5fe1b3f 36
8adbcf0c
KZ
37/*
38 * Supported partition table types (labels)
39 */
40enum 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 49enum {
7845ca8d 50 FDISK_PARTSTAT_NONE = 0,
47b8e7c0
KZ
51 FDISK_PARTSTAT_USED /* partition used */
52};
53
4114da08
KZ
54enum {
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 */
69extern void fdisk_init_debug(int mask);
70
f4be9e2b 71/* context.h */
4e0e8253 72extern struct fdisk_context *fdisk_new_context(void);
01b20713
KZ
73extern struct fdisk_context *fdisk_new_nested_context(
74 struct fdisk_context *parent, const char *name);
f4be9e2b
KZ
75extern void fdisk_free_context(struct fdisk_context *cxt);
76
7845ca8d
KZ
77extern 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
81extern int fdisk_context_assign_device(struct fdisk_context *cxt,
82 const char *fname, int readonly);
83
0c5d095e
KZ
84extern struct fdisk_label *fdisk_context_get_label(struct fdisk_context *cxt,
85 const char *name);
86
53b422ab
KZ
87extern int fdisk_context_switch_label(struct fdisk_context *cxt,
88 const char *name);
89
cb7ce873 90extern int fdisk_context_set_unit(struct fdisk_context *cxt, const char *str);
b4bfbadd
KZ
91
92#define PLURAL 0
93#define SINGULAR 1
cb7ce873 94extern const char *fdisk_context_get_unit(struct fdisk_context *cxt, int n);
b4bfbadd 95
cb7ce873
KZ
96extern unsigned int fdisk_context_get_units_per_sector(struct fdisk_context *cxt);
97
a5c1b0fa
KZ
98extern int fdisk_context_enable_details(struct fdisk_context *cxt, int enable);
99
a5fe1b3f
KZ
100/* parttype.c */
101extern struct fdisk_parttype *fdisk_get_parttype_from_code(struct fdisk_context *cxt,
102 unsigned int code);
103extern struct fdisk_parttype *fdisk_get_parttype_from_string(struct fdisk_context *cxt,
104 const char *str);
105extern struct fdisk_parttype *fdisk_parse_parttype(struct fdisk_context *cxt, const char *str);
106
107extern struct fdisk_parttype *fdisk_new_unknown_parttype(unsigned int type, const char *typestr);
108extern void fdisk_free_parttype(struct fdisk_parttype *type);
109extern size_t fdisk_get_nparttypes(struct fdisk_context *cxt);
110
950edd1a
KZ
111extern int fdisk_is_parttype_string(struct fdisk_context *cxt);
112
8adbcf0c 113/* label.c */
0b52b94c
KZ
114extern int fdisk_require_geometry(struct fdisk_context *cxt);
115extern int fdisk_missing_geometry(struct fdisk_context *cxt);
116
8adbcf0c
KZ
117extern int fdisk_dev_has_disklabel(struct fdisk_context *cxt);
118
119extern 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
122extern int fdisk_write_disklabel(struct fdisk_context *cxt);
123extern int fdisk_verify_disklabel(struct fdisk_context *cxt);
171372d3 124extern int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name);
3c5fb475 125extern int fdisk_list_disklabel(struct fdisk_context *cxt);
8adbcf0c 126
21fe3dde 127extern int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id);
35b1f0a4 128extern int fdisk_set_disklabel_id(struct fdisk_context *cxt);
21fe3dde 129
7845ca8d 130extern int fdisk_add_partition(struct fdisk_context *cxt, struct fdisk_parttype *t);
9ffeb235 131extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partnum);
8adbcf0c 132
9ffeb235
KZ
133extern struct fdisk_parttype *fdisk_get_partition_type(struct fdisk_context *cxt, size_t partnum);
134extern int fdisk_set_partition_type(struct fdisk_context *cxt, size_t partnum,
171372d3
KZ
135 struct fdisk_parttype *t);
136
2e3b40d3
KZ
137extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed);
138extern int fdisk_label_is_changed(struct fdisk_label *lb);
139
9ffeb235 140extern int fdisk_partition_get_status(struct fdisk_context *cxt, size_t partnum, int *status);
225592d4 141extern int fdisk_partition_is_used(struct fdisk_context *cxt, size_t partnum);
fb1caca7 142extern int fdisk_partition_toggle_flag(struct fdisk_context *cxt, size_t partnum, unsigned long flag);
2e3b40d3 143
c578f9af
KZ
144/* alignment.c */
145extern int fdisk_reset_alignment(struct fdisk_context *cxt);
1653f0b0
KZ
146extern int fdisk_reset_device_properties(struct fdisk_context *cxt);
147
148extern int fdisk_save_user_geometry(struct fdisk_context *cxt,
149 unsigned int cylinders,
150 unsigned int heads,
151 unsigned int sectors);
152
153extern 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 */
159extern int fdisk_dos_enable_compatible(struct fdisk_label *lb, int enable);
160extern int fdisk_dos_is_compatible(struct fdisk_label *lb);
161
4170ae9c
KZ
162/* sun.h */
163extern int fdisk_sun_set_alt_cyl(struct fdisk_context *cxt);
164extern int fdisk_sun_set_xcyl(struct fdisk_context *cxt);
165extern int fdisk_sun_set_ilfact(struct fdisk_context *cxt);
166extern int fdisk_sun_set_rspeed(struct fdisk_context *cxt);
167extern 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
173extern int sgi_change_sysid(struct fdisk_context *cxt, int i, int sys);
174extern unsigned int sgi_get_start_sector(struct fdisk_context *cxt, int i );
175extern unsigned int sgi_get_num_sectors(struct fdisk_context *cxt, int i );
176extern void sgi_set_bootpartition(struct fdisk_context *cxt, int i );
177extern void sgi_set_swappartition(struct fdisk_context *cxt, int i );
178extern int sgi_get_bootpartition(struct fdisk_context *cxt);
179extern int sgi_get_swappartition(struct fdisk_context *cxt);
180extern int sgi_set_bootfile(struct fdisk_context *cxt);
181extern int sgi_create_info(struct fdisk_context *cxt);
182
34b06299
KZ
183/* gpt */
184extern int fdisk_gpt_partition_set_uuid(struct fdisk_context *cxt, size_t i);
1054699c 185extern 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
190extern struct fdisk_ask *fdisk_new_ask(void);
191extern void fdisk_reset_ask(struct fdisk_ask *ask);
192extern void fdisk_free_ask(struct fdisk_ask *ask);
193extern const char *fdisk_ask_get_query(struct fdisk_ask *ask);
194extern int fdisk_ask_set_query(struct fdisk_ask *ask, const char *str);
7845ca8d 195extern int fdisk_ask_get_type(struct fdisk_ask *ask);
4114da08
KZ
196extern int fdisk_ask_set_type(struct fdisk_ask *ask, int type);
197extern int fdisk_do_ask(struct fdisk_context *cxt, struct fdisk_ask *ask);
198
7845ca8d 199extern const char *fdisk_ask_number_get_range(struct fdisk_ask *ask);
4114da08 200extern int fdisk_ask_number_set_range(struct fdisk_ask *ask, const char *range);
7845ca8d 201extern uint64_t fdisk_ask_number_get_default(struct fdisk_ask *ask);
4114da08 202extern int fdisk_ask_number_set_default(struct fdisk_ask *ask, uint64_t dflt);
7845ca8d 203extern uint64_t fdisk_ask_number_get_low(struct fdisk_ask *ask);
4114da08 204extern int fdisk_ask_number_set_low(struct fdisk_ask *ask, uint64_t low);
7845ca8d 205extern uint64_t fdisk_ask_number_get_high(struct fdisk_ask *ask);
4114da08
KZ
206extern int fdisk_ask_number_set_high(struct fdisk_ask *ask, uint64_t high);
207extern uint64_t fdisk_ask_number_get_base(struct fdisk_ask *ask);
208extern int fdisk_ask_number_set_base(struct fdisk_ask *ask, uint64_t base);
209extern uint64_t fdisk_ask_number_get_unit(struct fdisk_ask *ask);
210extern int fdisk_ask_number_set_unit(struct fdisk_ask *ask, uint64_t unit);
211extern uint64_t fdisk_ask_number_get_result(struct fdisk_ask *ask);
7845ca8d 212extern int fdisk_ask_number_set_result(struct fdisk_ask *ask, uint64_t result);
4114da08
KZ
213extern int fdisk_ask_number_set_relative(struct fdisk_ask *ask, int relative);
214extern int fdisk_ask_number_is_relative(struct fdisk_ask *ask);
7845ca8d 215
24fc19a1
KZ
216
217extern 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
224extern int fdisk_ask_string(struct fdisk_context *cxt,
225 const char *query,
226 char **result);
227
228extern char *fdisk_ask_string_get_result(struct fdisk_ask *ask);
229extern int fdisk_ask_string_set_result(struct fdisk_ask *ask, char *result);
230
ccf48af5
KZ
231extern int fdisk_ask_yesno(struct fdisk_context *cxt, const char *query, int *result);
232extern uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask);
233extern int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result);
234
ab6ea0e8
KZ
235extern int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...);
236extern int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...);
237extern int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...);
238
239extern int fdisk_ask_print_get_errno(struct fdisk_ask *ask);
240extern int fdisk_ask_print_set_errno(struct fdisk_ask *ask, int errnum);
241extern const char *fdisk_ask_print_get_mesg(struct fdisk_ask *ask);
242extern 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 */