From ed230379e7af9312206b591c900ef09cb2fd1302 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Sun, 8 Sep 2019 15:50:05 +0200 Subject: [PATCH] Expand statfs man page a little and include in build.bash --- Documentation/MANPAGE-STATFS.md | 64 +++++++++++++++++++++++++++++---- build.bash | 5 +-- contrib/statfs/statfs.go | 7 ++-- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/Documentation/MANPAGE-STATFS.md b/Documentation/MANPAGE-STATFS.md index 1d77802..c519f4b 100644 --- a/Documentation/MANPAGE-STATFS.md +++ b/Documentation/MANPAGE-STATFS.md @@ -5,26 +5,78 @@ NAME ==== -statfs - dump the statfs information for PATH to console in JSON format +statfs - dump the statfs(2) information for PATH to console in JSON format. SYNOPSIS ======== -#### Examine encrypted file/directory statfs PATH DESCRIPTION =========== -There are no options to this command. +The statfs(2) system call returns information about a mounted filesystem +in a `statfs_t` structure. This tool dumps this information in JSON format. +It is developed as part of gocryptfs and written in Go. + +The `statfs_t` structure is architecture-dependent. On amd64 it looks like this: + +``` +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid struct { + Val [2]int32 + } + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} +``` + +See the statfs(2) man page for the meaning of these fields, and note +that the field names here are acc. to the Go `golang.org/x/sys/unix` +naming convention, and slightly different than in C. EXAMPLES ======== -Examine a directory entry: +Get the statfs(2) information for /tmp: - statfs myfs/mCXnISiv7nEmyc0glGuhTQ +``` +$ statfs /tmp +{ + "Type": 16914836, + "Bsize": 4096, + "Blocks": 3067428, + "Bfree": 3067411, + "Bavail": 3067411, + "Files": 3067428, + "Ffree": 3067381, + "Fsid": { + "Val": [ + 0, + 0 + ] + }, + "Namelen": 255, + "Frsize": 4096, + "Flags": 38, + "Spare": [ + 0, + 0, + 0, + 0 + ] +} +``` SEE ALSO ======== -gocryptfs(1) gocryptfs-xray(1) +statfs(2) gocryptfs(1) diff --git a/build.bash b/build.bash index 5f801a2..7a5ac6f 100755 --- a/build.bash +++ b/build.bash @@ -87,10 +87,11 @@ if [[ -n ${LDFLAGS:-} ]] ; then GO_LDFLAGS="$GO_LDFLAGS \"-extldflags=$LDFLAGS\"" fi -# Actual "go build" call +# Actual "go build" call for gocryptfs go build "-ldflags=$GO_LDFLAGS" "-gcflags=$TRIM" "-asmflags=$TRIM" "$@" - +# Additional binaries (cd gocryptfs-xray; go build "-ldflags=$GO_LDFLAGS" "-gcflags=$TRIM" "-asmflags=$TRIM" "$@") +(cd contrib/statfs; go build "-ldflags=$GO_LDFLAGS" "-gcflags=$TRIM" "-asmflags=$TRIM" "$@") ./gocryptfs -version diff --git a/contrib/statfs/statfs.go b/contrib/statfs/statfs.go index 5dcbd07..163d95a 100644 --- a/contrib/statfs/statfs.go +++ b/contrib/statfs/statfs.go @@ -5,7 +5,8 @@ import ( "flag" "fmt" "os" - "syscall" + + "golang.org/x/sys/unix" ) const ( @@ -23,8 +24,8 @@ func main() { flag.Usage() } path := flag.Arg(0) - var st syscall.Statfs_t - err := syscall.Statfs(path, &st) + var st unix.Statfs_t + err := unix.Statfs(path, &st) if err != nil { fmt.Fprintf(os.Stderr, "statfs syscall returned error: %v\n", err) os.Exit(2)