annotate vendor/golang.org/x/sys/unix/fstatfs_zos.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 // Copyright 2020 The Go Authors. All rights reserved.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2 // Use of this source code is governed by a BSD-style
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 // license that can be found in the LICENSE file.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 //go:build zos && s390x
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 // +build zos,s390x
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 package unix
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 "unsafe"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 // This file simulates fstatfs on z/OS using fstatvfs and w_getmntent.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 func Fstatfs(fd int, stat *Statfs_t) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 var stat_v Statvfs_t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 err = Fstatvfs(fd, &stat_v)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 if err == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 // populate stat
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 stat.Type = 0
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 stat.Bsize = stat_v.Bsize
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 stat.Blocks = stat_v.Blocks
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 stat.Bfree = stat_v.Bfree
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 stat.Bavail = stat_v.Bavail
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 stat.Files = stat_v.Files
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 stat.Ffree = stat_v.Ffree
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 stat.Fsid = stat_v.Fsid
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 stat.Namelen = stat_v.Namemax
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 stat.Frsize = stat_v.Frsize
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 stat.Flags = stat_v.Flag
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 for passn := 0; passn < 5; passn++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 switch passn {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 case 0:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 err = tryGetmntent64(stat)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 case 1:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 err = tryGetmntent128(stat)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 case 2:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 err = tryGetmntent256(stat)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 case 3:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 err = tryGetmntent512(stat)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 case 4:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 err = tryGetmntent1024(stat)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 default:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 //proceed to return if: err is nil (found), err is nonnil but not ERANGE (another error occurred)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 if err == nil || err != nil && err != ERANGE {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 func tryGetmntent64(stat *Statfs_t) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 var mnt_ent_buffer struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 header W_Mnth
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 filesys_info [64]W_Mntent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 err = ERANGE //return ERANGE if no match is found in this batch
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 for i := 0; i < fs_count; i++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 err = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 func tryGetmntent128(stat *Statfs_t) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 var mnt_ent_buffer struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 header W_Mnth
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 filesys_info [128]W_Mntent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88 fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 err = ERANGE //return ERANGE if no match is found in this batch
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93 for i := 0; i < fs_count; i++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
95 stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
96 err = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
97 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
98 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
99 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
100 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
101 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
102
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
103 func tryGetmntent256(stat *Statfs_t) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
104 var mnt_ent_buffer struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
105 header W_Mnth
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
106 filesys_info [256]W_Mntent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
107 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
108 var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
109 fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
110 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
111 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
112 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
113 err = ERANGE //return ERANGE if no match is found in this batch
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
114 for i := 0; i < fs_count; i++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
115 if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
116 stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
117 err = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
118 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
119 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
120 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
121 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
122 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
123
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
124 func tryGetmntent512(stat *Statfs_t) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
125 var mnt_ent_buffer struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
126 header W_Mnth
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
127 filesys_info [512]W_Mntent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
128 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
129 var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
130 fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
131 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
132 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
133 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
134 err = ERANGE //return ERANGE if no match is found in this batch
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
135 for i := 0; i < fs_count; i++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
136 if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
137 stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
138 err = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
139 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
140 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
141 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
142 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
143 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
144
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
145 func tryGetmntent1024(stat *Statfs_t) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
146 var mnt_ent_buffer struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
147 header W_Mnth
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
148 filesys_info [1024]W_Mntent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
149 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
150 var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
151 fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
152 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
153 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
154 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
155 err = ERANGE //return ERANGE if no match is found in this batch
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
156 for i := 0; i < fs_count; i++ {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
157 if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
158 stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
159 err = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
160 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
161 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
162 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
163 return err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
164 }