Increase max path length 1024 -> 8192 bytes (fixes #551)

PATH_MAX seems to be 4096 most of the time; Windows limit is much lower.
This commit is contained in:
Jakob Borg 2014-08-25 08:47:59 +02:00
parent 1a174e75d3
commit df65247325
3 changed files with 42 additions and 12 deletions

View File

@ -5,6 +5,7 @@
package files_test
import (
"bytes"
"fmt"
"sort"
"testing"
@ -596,6 +597,35 @@ func TestLocalVersion(t *testing.T) {
}
}
func TestLongPath(t *testing.T) {
db, err := leveldb.Open(storage.NewMemStorage(), nil)
if err != nil {
t.Fatal(err)
}
s := files.NewSet("test", db)
var b bytes.Buffer
for i := 0; i < 100; i++ {
b.WriteString("012345678901234567890123456789012345678901234567890")
}
name := b.String() // 5000 characters
local := []protocol.FileInfo{
protocol.FileInfo{Name: string(name), Version: 1000},
}
s.ReplaceWithDelete(protocol.LocalNodeID, local)
gf := globalList(s)
if l := len(gf); l != 1 {
t.Fatalf("Incorrect len %d != 1 for global list", l)
}
if gf[0].Name != local[0].Name {
t.Error("Incorrect long filename;\n%q !=\n%q", gf[0].Name, local[0].Name)
}
}
/*
var gf protocol.FileInfo

View File

@ -12,7 +12,7 @@ type IndexMessage struct {
}
type FileInfo struct {
Name string // max:1024
Name string // max:8192
Flags uint32
Modified int64
Version uint64
@ -41,7 +41,7 @@ func (f FileInfo) IsDeleted() bool {
// Used for unmarshalling a FileInfo structure but skipping the actual block list
type FileInfoTruncated struct {
Name string // max:1024
Name string // max:8192
Flags uint32
Modified int64
Version uint64
@ -82,7 +82,7 @@ func (b BlockInfo) String() string {
type RequestMessage struct {
Repository string // max:64
Name string // max:1024
Name string // max:8192
Offset uint64
Size uint32
}

View File

@ -127,7 +127,7 @@ FileInfo Structure:
struct FileInfo {
string Name<1024>;
string Name<8192>;
unsigned int Flags;
hyper Modified;
unsigned hyper Version;
@ -154,7 +154,7 @@ func (o FileInfo) AppendXDR(bs []byte) []byte {
}
func (o FileInfo) encodeXDR(xw *xdr.Writer) (int, error) {
if len(o.Name) > 1024 {
if len(o.Name) > 8192 {
return xw.Tot(), xdr.ErrElementSizeExceeded
}
xw.WriteString(o.Name)
@ -184,7 +184,7 @@ func (o *FileInfo) UnmarshalXDR(bs []byte) error {
}
func (o *FileInfo) decodeXDR(xr *xdr.Reader) error {
o.Name = xr.ReadStringMax(1024)
o.Name = xr.ReadStringMax(8192)
o.Flags = xr.ReadUint32()
o.Modified = int64(xr.ReadUint64())
o.Version = xr.ReadUint64()
@ -229,7 +229,7 @@ FileInfoTruncated Structure:
struct FileInfoTruncated {
string Name<1024>;
string Name<8192>;
unsigned int Flags;
hyper Modified;
unsigned hyper Version;
@ -256,7 +256,7 @@ func (o FileInfoTruncated) AppendXDR(bs []byte) []byte {
}
func (o FileInfoTruncated) encodeXDR(xw *xdr.Writer) (int, error) {
if len(o.Name) > 1024 {
if len(o.Name) > 8192 {
return xw.Tot(), xdr.ErrElementSizeExceeded
}
xw.WriteString(o.Name)
@ -280,7 +280,7 @@ func (o *FileInfoTruncated) UnmarshalXDR(bs []byte) error {
}
func (o *FileInfoTruncated) decodeXDR(xr *xdr.Reader) error {
o.Name = xr.ReadStringMax(1024)
o.Name = xr.ReadStringMax(8192)
o.Flags = xr.ReadUint32()
o.Modified = int64(xr.ReadUint64())
o.Version = xr.ReadUint64()
@ -384,7 +384,7 @@ RequestMessage Structure:
struct RequestMessage {
string Repository<64>;
string Name<1024>;
string Name<8192>;
unsigned hyper Offset;
unsigned int Size;
}
@ -412,7 +412,7 @@ func (o RequestMessage) encodeXDR(xw *xdr.Writer) (int, error) {
return xw.Tot(), xdr.ErrElementSizeExceeded
}
xw.WriteString(o.Repository)
if len(o.Name) > 1024 {
if len(o.Name) > 8192 {
return xw.Tot(), xdr.ErrElementSizeExceeded
}
xw.WriteString(o.Name)
@ -434,7 +434,7 @@ func (o *RequestMessage) UnmarshalXDR(bs []byte) error {
func (o *RequestMessage) decodeXDR(xr *xdr.Reader) error {
o.Repository = xr.ReadStringMax(64)
o.Name = xr.ReadStringMax(1024)
o.Name = xr.ReadStringMax(8192)
o.Offset = xr.ReadUint64()
o.Size = xr.ReadUint32()
return xr.Error()