X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/5c14e4c916d76ce35ee2b07bf832d5f3b6118260..424ef66f0fe1ea21b4bae765dc40c97c98ed363e:/hotline/files.go?ds=sidebyside diff --git a/hotline/files.go b/hotline/files.go index 42e25db..4f55eba 100644 --- a/hotline/files.go +++ b/hotline/files.go @@ -10,6 +10,8 @@ import ( "strings" ) +const incompleteFileSuffix = ".incomplete" + func downcaseFileExtension(filename string) string { splitStr := strings.Split(filename, ".") ext := strings.ToLower( @@ -56,6 +58,9 @@ func getFileNameList(filePath string) (fields []Field, err error) { } rFile, err := os.Stat(filePath + "/" + resolvedPath) + if errors.Is(err, os.ErrNotExist) { + continue + } if err != nil { return fields, err } @@ -83,6 +88,10 @@ func getFileNameList(filePath string) (fields []Field, err error) { copy(fnwi.Type[:], []byte("fldr")[:]) copy(fnwi.Creator[:], fileCreator[:]) } else { + // the Hotline protocol does not support file sizes > 4GiB due to the 4 byte field size, so skip them + if file.Size() > 4294967296 { + continue + } binary.BigEndian.PutUint32(fnwi.FileSize[:], uint32(file.Size())) copy(fnwi.Type[:], []byte(fileTypeFromFilename(file.Name()).TypeCode)[:]) copy(fnwi.Creator[:], []byte(fileTypeFromFilename(file.Name()).CreatorCode)[:]) @@ -170,8 +179,6 @@ func EncodeFilePath(filePath string) []byte { return bytes } -const incompleteFileSuffix = ".incomplete" - // effectiveFile wraps os.Open to check for the presence of a partial file transfer as a fallback func effectiveFile(filePath string) (*os.File, error) { file, err := os.Open(filePath) @@ -180,7 +187,7 @@ func effectiveFile(filePath string) (*os.File, error) { } if errors.Is(err, fs.ErrNotExist) { - file, err = os.OpenFile(filePath+incompleteFileSuffix, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) + file, err = os.OpenFile(filePath+incompleteFileSuffix, os.O_APPEND|os.O_WRONLY, 0644) if err != nil { return nil, err }