| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | 
							- // Copyright (C) 2014 The Syncthing Authors.
 
- //
 
- // This Source Code Form is subject to the terms of the Mozilla Public
 
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
 
- // You can obtain one at https://mozilla.org/MPL/2.0/.
 
- //go:build windows
 
- // +build windows
 
- package protocol
 
- // Windows uses backslashes as file separator
 
- import (
 
- 	"fmt"
 
- 	"path/filepath"
 
- 	"strings"
 
- )
 
- func makeNative(m rawModel) rawModel { return nativeModel{m} }
 
- type nativeModel struct {
 
- 	rawModel
 
- }
 
- func (m nativeModel) Index(idx *Index) error {
 
- 	idx.Files = fixupFiles(idx.Files)
 
- 	return m.rawModel.Index(idx)
 
- }
 
- func (m nativeModel) IndexUpdate(idxUp *IndexUpdate) error {
 
- 	idxUp.Files = fixupFiles(idxUp.Files)
 
- 	return m.rawModel.IndexUpdate(idxUp)
 
- }
 
- func (m nativeModel) Request(req *Request) (RequestResponse, error) {
 
- 	if strings.Contains(req.Name, `\`) {
 
- 		l.Warnf("Dropping request for %s, contains invalid path separator", req.Name)
 
- 		return nil, ErrNoSuchFile
 
- 	}
 
- 	req.Name = filepath.FromSlash(req.Name)
 
- 	return m.rawModel.Request(req)
 
- }
 
- func fixupFiles(files []FileInfo) []FileInfo {
 
- 	var out []FileInfo
 
- 	for i := range files {
 
- 		if strings.Contains(files[i].Name, `\`) {
 
- 			msg := fmt.Sprintf("Dropping index entry for %s, contains invalid path separator", files[i].Name)
 
- 			if files[i].Deleted {
 
- 				// Dropping a deleted item doesn't have any consequences.
 
- 				l.Debugln(msg)
 
- 			} else {
 
- 				l.Warnln(msg)
 
- 			}
 
- 			if out == nil {
 
- 				// Most incoming updates won't contain anything invalid, so
 
- 				// we delay the allocation and copy to output slice until we
 
- 				// really need to do it, then copy all the so-far valid
 
- 				// files to it.
 
- 				out = make([]FileInfo, i, len(files)-1)
 
- 				copy(out, files)
 
- 			}
 
- 			continue
 
- 		}
 
- 		// Fixup the path separators
 
- 		files[i].Name = filepath.FromSlash(files[i].Name)
 
- 		if out != nil {
 
- 			out = append(out, files[i])
 
- 		}
 
- 	}
 
- 	if out != nil {
 
- 		// We did some filtering
 
- 		return out
 
- 	}
 
- 	// Unchanged
 
- 	return files
 
- }
 
 
  |