Coverage report: /home/ellis/comp/core/lib/io/disk/btrfs.lisp
Kind | Covered | All | % |
expression | 9 | 66 | 13.6 |
branch | 1 | 6 | 16.7 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; btrfs.lisp --- BTRFS API
3
;; High-level BTRFS backend for IO/DISK
6
(in-package :io/disk/btrfs)
8
(defun load-btrfs-libs ()
12
(define-condition btrfs-error (io-error) ())
14
(deferror btrfs-simple-error (simple-error btrfs-error) () (:auto t))
16
(defclass btrfs-disk (disk) ())
18
(defclass btrfs-partition (disk-partition) ())
20
(defclass btrfs-subvolume (disk-subvolume disk) ())
22
(defun subvolume-valid-p (subvol)
24
(string (zerop (btrfs-util-subvolume-is-valid subvol)))
25
(pathname (zerop (btrfs-util-subvolume-is-valid (namestring subvol))))
26
(disk (zerop (btrfs-util-subvolume-is-valid (namestring (path subvol)))))))
28
(defclass btrfs-snapshot (disk-snapshot disk) ())
31
(((self btrfs-subvolume) &key)
32
(btrfs-util-fs-sync (namestring (path self))))
33
(((self btrfs-disk) &key)
34
(btrfs-util-fs-sync (namestring (path self)))))
36
(defun btrfs-subvolumes (path)
37
(when (subvolume-valid-p path)
38
(sb-alien:with-alien ((iter (* btrfs-util-subvolume-iterator)))
41
(btrfs-util-subvolume-iter-create path 0 0 (sb-alien:addr iter))
42
(with-alien ((path c-string)
44
(loop while (zerop (btrfs-util-subvolume-iter-next
45
iter (addr path) (addr id)))
46
collect (cons path id))))
47
(btrfs-util-subvolume-iter-destroy iter)))))
49
(defun btrfs-default-subvolume (path)
50
(with-alien ((id (unsigned 64)))
51
(let ((res (btrfs-util-subvolume-get-default path (addr id))))
54
(btrfs-simple-error (btrfs-util-strerror res))))))