smbFileWrapper.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package smbfs
  2. import (
  3. "io"
  4. "io/fs"
  5. "os"
  6. "github.com/hirochachacha/go-smb2"
  7. "imuslab.com/arozos/mod/filesystem/arozfs"
  8. )
  9. type smbfsFile struct {
  10. file *smb2.File
  11. }
  12. func NewSmbFsFile(wrappingFile *smb2.File) *smbfsFile {
  13. return &smbfsFile{
  14. file: wrappingFile,
  15. }
  16. }
  17. func (f *smbfsFile) Chdir() error {
  18. return arozfs.ErrOperationNotSupported
  19. }
  20. func (f *smbfsFile) Chmod(mode os.FileMode) error {
  21. return arozfs.ErrOperationNotSupported
  22. }
  23. func (f *smbfsFile) Chown(uid, gid int) error {
  24. return arozfs.ErrOperationNotSupported
  25. }
  26. func (f *smbfsFile) Close() error {
  27. return f.file.Close()
  28. }
  29. func (f *smbfsFile) Name() string {
  30. return f.file.Name()
  31. }
  32. func (f *smbfsFile) Read(b []byte) (n int, err error) {
  33. return f.file.Read(b)
  34. }
  35. func (f *smbfsFile) ReadAt(b []byte, off int64) (n int, err error) {
  36. return f.file.ReadAt(b, off)
  37. }
  38. func (f *smbfsFile) ReadDir(n int) ([]fs.DirEntry, error) {
  39. return []fs.DirEntry{}, arozfs.ErrOperationNotSupported
  40. }
  41. func (f *smbfsFile) Readdirnames(n int) (names []string, err error) {
  42. fi, err := f.file.Readdir(n)
  43. if err != nil {
  44. return []string{}, err
  45. }
  46. names = []string{}
  47. for _, i := range fi {
  48. names = append(names, i.Name())
  49. }
  50. return names, nil
  51. }
  52. func (f *smbfsFile) ReadFrom(r io.Reader) (n int64, err error) {
  53. return f.file.ReadFrom(r)
  54. }
  55. func (f *smbfsFile) Readdir(n int) ([]fs.FileInfo, error) {
  56. return f.file.Readdir(n)
  57. }
  58. func (f *smbfsFile) Seek(offset int64, whence int) (ret int64, err error) {
  59. return f.file.Seek(offset, whence)
  60. }
  61. func (f *smbfsFile) Stat() (fs.FileInfo, error) {
  62. return f.file.Stat()
  63. }
  64. func (f *smbfsFile) Sync() error {
  65. return f.file.Sync()
  66. }
  67. func (f *smbfsFile) Truncate(size int64) error {
  68. return f.file.Truncate(size)
  69. }
  70. func (f *smbfsFile) Write(b []byte) (n int, err error) {
  71. return f.file.Write(b)
  72. }
  73. func (f *smbfsFile) WriteAt(b []byte, off int64) (n int, err error) {
  74. return f.file.WriteAt(b, off)
  75. }
  76. func (f *smbfsFile) WriteString(s string) (n int, err error) {
  77. return f.file.WriteString(s)
  78. }
  79. type smbDirEntry struct {
  80. finfo fs.FileInfo
  81. }
  82. func newDirEntryFromFileInfo(targetFileInfo fs.FileInfo) *smbDirEntry {
  83. return &smbDirEntry{
  84. finfo: targetFileInfo,
  85. }
  86. }
  87. func (de smbDirEntry) Name() string {
  88. return de.finfo.Name()
  89. }
  90. func (de smbDirEntry) IsDir() bool {
  91. return de.finfo.IsDir()
  92. }
  93. func (de smbDirEntry) Type() fs.FileMode {
  94. return de.finfo.Mode()
  95. }
  96. func (de smbDirEntry) Info() (fs.FileInfo, error) {
  97. return de.finfo, nil
  98. }