xref: /xnu-8796.101.5/libsyscall/wrappers/fs_snapshot.c (revision aca3beaa3dfbd42498b42c5e5ce20a938e6554e5)
1 /*
2  * Copyright (c) 2016 Apple Inc. All rights reserved.
3  *
4  * @APPLE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. Please obtain a copy of the License at
10  * http://www.opensource.apple.com/apsl/ and read it before using this
11  * file.
12  *
13  * The Original Code and all software distributed under the License are
14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18  * Please see the License for the specific language governing rights and
19  * limitations under the License.
20  *
21  * @APPLE_LICENSE_HEADER_END@
22  */
23 
24 #include <sys/snapshot.h>
25 #include <sys/attr.h>
26 #include <unistd.h>
27 #include <errno.h>
28 #include <stdint.h>
29 #include <stdlib.h>
30 
31 extern int __fs_snapshot(uint32_t, int, const char *, const char *, void *,
32     uint32_t);
33 
34 int
fs_snapshot_create(int dirfd,const char * name,uint32_t flags)35 fs_snapshot_create(int dirfd, const char *name, uint32_t flags)
36 {
37 	return __fs_snapshot(SNAPSHOT_OP_CREATE, dirfd, name, NULL, NULL, flags);
38 }
39 
40 int
fs_snapshot_list(int dirfd,struct attrlist * alist,void * attrbuf,size_t bufsize,uint32_t flags)41 fs_snapshot_list(int dirfd, struct attrlist *alist, void *attrbuf, size_t bufsize,
42     uint32_t flags)
43 {
44 	if (flags != 0) {
45 		errno = EINVAL;
46 		return -1;
47 	}
48 
49 	return getattrlistbulk(dirfd, alist, attrbuf, bufsize,
50 	           FSOPT_LIST_SNAPSHOT);
51 }
52 
53 int
fs_snapshot_delete(int dirfd,const char * name,uint32_t flags)54 fs_snapshot_delete(int dirfd, const char *name, uint32_t flags)
55 {
56 	return __fs_snapshot(SNAPSHOT_OP_DELETE, dirfd, name, NULL, NULL, flags);
57 }
58 
59 int
fs_snapshot_rename(int dirfd,const char * old,const char * new,uint32_t flags)60 fs_snapshot_rename(int dirfd, const char *old, const char *new, uint32_t flags)
61 {
62 	return __fs_snapshot(SNAPSHOT_OP_RENAME, dirfd, old, new, NULL, flags);
63 }
64 
65 int
fs_snapshot_revert(int dirfd,const char * name,uint32_t flags)66 fs_snapshot_revert(int dirfd, const char *name, uint32_t flags)
67 {
68 	return __fs_snapshot(SNAPSHOT_OP_REVERT, dirfd, name, NULL, NULL, flags);
69 }
70 
71 int
fs_snapshot_root(int dirfd,const char * name,uint32_t flags)72 fs_snapshot_root(int dirfd, const char *name, uint32_t flags)
73 {
74 	return __fs_snapshot(SNAPSHOT_OP_ROOT, dirfd, name, NULL, NULL, flags);
75 }
76 
77 int
fs_snapshot_mount(int dirfd,const char * dir,const char * snapshot,uint32_t flags)78 fs_snapshot_mount(int dirfd, const char *dir, const char *snapshot,
79     uint32_t flags)
80 {
81 	return __fs_snapshot(SNAPSHOT_OP_MOUNT, dirfd, snapshot, dir,
82 	           NULL, flags);
83 }
84