a56e41fc754604a73152d139ec014397713902ea
[platform/upstream/btrfs-progs.git] / libbtrfsutil / python / btrfsutilpy.h
1 /*
2  * Copyright (C) 2018 Facebook
3  *
4  * This file is part of libbtrfsutil.
5  *
6  * libbtrfsutil is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * libbtrfsutil 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
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with libbtrfsutil.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef BTRFSUTILPY_H
21 #define BTRFSUTILPY_H
22
23 #define PY_SSIZE_T_CLEAN
24
25 #include <stdbool.h>
26 #include <stddef.h>
27 #include <Python.h>
28 #include "structmember.h"
29
30 #include <btrfsutil.h>
31
32 typedef struct {
33         PyObject_HEAD
34         struct btrfs_util_qgroup_inherit *inherit;
35 } QgroupInherit;
36
37 extern PyTypeObject BtrfsUtilError_type;
38 extern PyStructSequence_Desc SubvolumeInfo_desc;
39 extern PyTypeObject SubvolumeInfo_type;
40 extern PyTypeObject QgroupInherit_type;
41
42 /*
43  * Helpers for path arguments based on posixmodule.c in CPython.
44  */
45 struct path_arg {
46         bool allow_fd;
47         char *path;
48         int fd;
49         Py_ssize_t length;
50         PyObject *object;
51         PyObject *cleanup;
52 };
53 int path_converter(PyObject *o, void *p);
54 void path_cleanup(struct path_arg *path);
55
56 void SetFromBtrfsUtilError(enum btrfs_util_error err);
57 void SetFromBtrfsUtilErrorWithPath(enum btrfs_util_error err,
58                                    struct path_arg *path);
59 void SetFromBtrfsUtilErrorWithPaths(enum btrfs_util_error err,
60                                     struct path_arg *path1,
61                                     struct path_arg *path2);
62
63 PyObject *filesystem_sync(PyObject *self, PyObject *args, PyObject *kwds);
64 PyObject *start_sync(PyObject *self, PyObject *args, PyObject *kwds);
65 PyObject *wait_sync(PyObject *self, PyObject *args, PyObject *kwds);
66 PyObject *is_subvolume(PyObject *self, PyObject *args, PyObject *kwds);
67 PyObject *subvolume_id(PyObject *self, PyObject *args, PyObject *kwds);
68 PyObject *subvolume_path(PyObject *self, PyObject *args, PyObject *kwds);
69 PyObject *subvolume_info(PyObject *self, PyObject *args, PyObject *kwds);
70 PyObject *get_subvolume_read_only(PyObject *self, PyObject *args, PyObject *kwds);
71 PyObject *set_subvolume_read_only(PyObject *self, PyObject *args, PyObject *kwds);
72 PyObject *get_default_subvolume(PyObject *self, PyObject *args, PyObject *kwds);
73 PyObject *set_default_subvolume(PyObject *self, PyObject *args, PyObject *kwds);
74 PyObject *create_subvolume(PyObject *self, PyObject *args, PyObject *kwds);
75
76 void add_module_constants(PyObject *m);
77
78 #endif /* BTRFSUTILPY_H */