summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore19
-rw-r--r--xdelta3/Makefile.am1
-rw-r--r--xdelta3/go/src/regtest.go34
-rw-r--r--xdelta3/go/src/xdelta/rstream.go20
-rw-r--r--xdelta3/go/src/xdelta/test.go9
-rwxr-xr-xxdelta3/run_release.sh1
-rw-r--r--xdelta3/xdelta3-main.h2
-rw-r--r--xdelta3/xdelta3.h2
8 files changed, 60 insertions, 28 deletions
diff --git a/.gitignore b/.gitignore
index 5761abc..366b29f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,20 @@
1*.o 1*.o
2*~
3
4Makefile.in
5aclocal.m4
6autom4te.cache
7build
8compile
9config.guess
10config.h.in
11config.sub
12configure
13depcomp
14ltmain.sh
15libtool.m4
16ltoptions.m4
17ltsugar.m4
18ltversion.m4
19lt~obsolete.m4
20missing
diff --git a/xdelta3/Makefile.am b/xdelta3/Makefile.am
index f589599..ffc35a4 100644
--- a/xdelta3/Makefile.am
+++ b/xdelta3/Makefile.am
@@ -1,4 +1,5 @@
1ACLOCAL_AMFLAGS = -I m4 1ACLOCAL_AMFLAGS = -I m4
2AUTOMAKE_OPTIONS = subdir-objects
2 3
3bin_PROGRAMS = xdelta3 4bin_PROGRAMS = xdelta3
4noinst_PROGRAMS = xdelta3regtest xdelta3decode xdelta3checksum 5noinst_PROGRAMS = xdelta3regtest xdelta3decode xdelta3checksum
diff --git a/xdelta3/go/src/regtest.go b/xdelta3/go/src/regtest.go
index d31e905..52547e1 100644
--- a/xdelta3/go/src/regtest.go
+++ b/xdelta3/go/src/regtest.go
@@ -1,16 +1,20 @@
1package main 1package main
2 2
3import ( 3import (
4 "bufio"
4 "bytes" 5 "bytes"
5 "fmt" 6 "fmt"
6 "io" 7 "io"
7 "io/ioutil" 8 "io/ioutil"
9 "os"
10
8 "xdelta" 11 "xdelta"
9) 12)
10 13
11const ( 14const (
12 blocksize = 1<<20 15 blocksize = 1<<16
13 prog = "/Users/jmacd/src/xdelta/xdelta3/xdelta3" 16 winsize = 1<<26
17 prog = "/Users/jmacd/src/xdelta/xdelta3/build/m64/64size-64off/xdelta3"
14 seed = 1422253499919909358 18 seed = 1422253499919909358
15) 19)
16 20
@@ -26,10 +30,14 @@ func drain(f io.ReadCloser) <-chan []byte {
26 return c 30 return c
27} 31}
28 32
29func empty(f io.ReadCloser) { 33func empty(f io.ReadCloser, desc string) {
30 go func() { 34 go func() {
31 if _, err := ioutil.ReadAll(f); err != nil { 35 s := bufio.NewScanner(f)
32 panic(err) 36 for s.Scan() {
37 os.Stderr.Write([]byte(fmt.Sprint(desc, ": ", s.Text(), "\n")))
38 }
39 if err := s.Err(); err != nil {
40 fmt.Println("error reading input:", err)
33 } 41 }
34 }() 42 }()
35} 43}
@@ -52,7 +60,7 @@ func smokeTest(r *xdelta.Runner, p *xdelta.Program) {
52 panic(err) 60 panic(err)
53 } 61 }
54 encodeout := drain(run.Stdout) 62 encodeout := drain(run.Stdout)
55 empty(run.Stderr) 63 empty(run.Stderr, "encode")
56 64
57 write(run.Stdin, []byte(target)) 65 write(run.Stdin, []byte(target))
58 write(run.Srcin, []byte(source)) 66 write(run.Srcin, []byte(source))
@@ -67,7 +75,7 @@ func smokeTest(r *xdelta.Runner, p *xdelta.Program) {
67 } 75 }
68 76
69 decodeout := drain(run.Stdout) 77 decodeout := drain(run.Stdout)
70 empty(run.Stderr) 78 empty(run.Stderr, "decode")
71 79
72 write(run.Stdin, <-encodeout) 80 write(run.Stdin, <-encodeout)
73 write(run.Srcin, []byte(source)) 81 write(run.Srcin, []byte(source))
@@ -121,12 +129,12 @@ func compareStreams(r1 io.ReadCloser, r2 io.ReadCloser, length int64) {
121 } 129 }
122} 130}
123 131
124func offsetTest(r *xdelta.Runner, p *xdelta.Program, offset, length int64) { 132func offsetTest(r *xdelta.Runner, p *xdelta.Program, offset, bufsize, length int64) {
125 enc, err := r.Exec(p, true, []string{"-e"}) 133 enc, err := r.Exec(p, true, []string{"-e", "-1", "-n", fmt.Sprint("-B", bufsize), "-vv", fmt.Sprint("-W", winsize)})
126 if err != nil { 134 if err != nil {
127 panic(err) 135 panic(err)
128 } 136 }
129 dec, err := r.Exec(p, true, []string{"-d"}) 137 dec, err := r.Exec(p, true, []string{"-d", fmt.Sprint("-B", bufsize), "-vv", fmt.Sprint("-W", winsize)})
130 if err != nil { 138 if err != nil {
131 panic(err) 139 panic(err)
132 } 140 }
@@ -136,8 +144,8 @@ func offsetTest(r *xdelta.Runner, p *xdelta.Program, offset, length int64) {
136 go copyStreams(enc.Stdout, dec.Stdin) 144 go copyStreams(enc.Stdout, dec.Stdin)
137 go compareStreams(dec.Stdout, read, length) 145 go compareStreams(dec.Stdout, read, length)
138 146
139 empty(enc.Stderr) // Use these? 147 empty(enc.Stderr, "encode")
140 empty(dec.Stderr) 148 empty(dec.Stderr, "decode")
141 149
142 // TODO: seems possible to use one WriteRstreams call to generate 150 // TODO: seems possible to use one WriteRstreams call to generate
143 // the source and target for both encoder and decoder. Why not? 151 // the source and target for both encoder and decoder. Why not?
@@ -163,5 +171,5 @@ func main() {
163 171
164 smokeTest(r, prog) 172 smokeTest(r, prog)
165 173
166 offsetTest(r, prog, 0, 1024 << 20) 174 offsetTest(r, prog, 1 << 31, 1 << 32, 1 << 33)
167} 175}
diff --git a/xdelta3/go/src/xdelta/rstream.go b/xdelta3/go/src/xdelta/rstream.go
index 1666934..1d56031 100644
--- a/xdelta3/go/src/xdelta/rstream.go
+++ b/xdelta3/go/src/xdelta/rstream.go
@@ -16,20 +16,21 @@ func WriteRstreams(seed, offset, len int64,
16 go writeOne(seed, offset, len, second) 16 go writeOne(seed, offset, len, second)
17} 17}
18 18
19func writeOne(seed, offset, len int64, stream io.WriteCloser) { 19func writeOne(seed, offset, len int64, stream io.WriteCloser) error {
20 if offset != 0 { 20 if offset != 0 {
21 // Fill with other random data until the offset 21 // Fill with other random data until the offset
22 writeRand(rand.New(rand.NewSource(^seed)), 22 if err := writeRand(rand.New(rand.NewSource(^seed)), offset, stream); err != nil {
23 offset, stream) 23 return err
24 }
24 } 25 }
25 writeRand(rand.New(rand.NewSource(seed)), 26 if err := writeRand(rand.New(rand.NewSource(seed)),
26 len - offset, stream) 27 len - offset, stream); err != nil {
27 if err := stream.Close(); err != nil { 28 return err
28 panic(err)
29 } 29 }
30 return stream.Close()
30} 31}
31 32
32func writeRand(r *rand.Rand, len int64, s io.Writer) { 33func writeRand(r *rand.Rand, len int64, s io.Writer) error {
33 blk := make([]byte, blocksize) 34 blk := make([]byte, blocksize)
34 for len > 0 { 35 for len > 0 {
35 fillRand(r, blk) 36 fillRand(r, blk)
@@ -38,10 +39,11 @@ func writeRand(r *rand.Rand, len int64, s io.Writer) {
38 c = int(len) 39 c = int(len)
39 } 40 }
40 if _, err := s.Write(blk[0:c]); err != nil { 41 if _, err := s.Write(blk[0:c]); err != nil {
41 panic(err) 42 return err
42 } 43 }
43 len -= int64(c) 44 len -= int64(c)
44 } 45 }
46 return nil
45} 47}
46 48
47func fillRand(r *rand.Rand, blk []byte) { 49func fillRand(r *rand.Rand, blk []byte) {
diff --git a/xdelta3/go/src/xdelta/test.go b/xdelta3/go/src/xdelta/test.go
index 292f133..3143dfa 100644
--- a/xdelta3/go/src/xdelta/test.go
+++ b/xdelta3/go/src/xdelta/test.go
@@ -83,15 +83,16 @@ func (r *Runner) Exec(p *Program, srcfifo bool, flags []string) (*Run, error) {
83 return run, nil 83 return run, nil
84} 84}
85 85
86func writeFifo(srcfile string, read io.Reader) { 86func writeFifo(srcfile string, read io.Reader) error {
87 fifo, err := os.OpenFile(srcfile, os.O_WRONLY, 0600) 87 fifo, err := os.OpenFile(srcfile, os.O_WRONLY, 0600)
88 if err != nil { 88 if err != nil {
89 panic(err) 89 return err
90 } 90 }
91 if _, err := io.Copy(fifo, read); err != nil { 91 if _, err := io.Copy(fifo, read); err != nil {
92 panic(err) 92 return err
93 } 93 }
94 if err := fifo.Close(); err != nil { 94 if err := fifo.Close(); err != nil {
95 panic(err) 95 return err
96 } 96 }
97 return nil
97} 98}
diff --git a/xdelta3/run_release.sh b/xdelta3/run_release.sh
index fc06491..2ac810a 100755
--- a/xdelta3/run_release.sh
+++ b/xdelta3/run_release.sh
@@ -52,6 +52,7 @@ function buildit {
52 echo CXXFLAGS=$CXXFLAGS 52 echo CXXFLAGS=$CXXFLAGS
53 D=build/$MACH/${sizebits}size-${offsetbits}off 53 D=build/$MACH/${sizebits}size-${offsetbits}off
54 mkdir -p $D 54 mkdir -p $D
55 echo "Configuring $D ..."
55 (cd $D && $SRCDIR/configure --prefix=$PWD/bin --enable-debug-symbols) 56 (cd $D && $SRCDIR/configure --prefix=$PWD/bin --enable-debug-symbols)
56 #(cd $D && make all && make test) 57 #(cd $D && make all && make test)
57} 58}
diff --git a/xdelta3/xdelta3-main.h b/xdelta3/xdelta3-main.h
index 157a4fb..1871f14 100644
--- a/xdelta3/xdelta3-main.h
+++ b/xdelta3/xdelta3-main.h
@@ -708,7 +708,7 @@ main_atoux (const char* arg, xoff_t *xo, xoff_t low,
708 int ret; 708 int ret;
709 709
710 if ((ret = main_strtoxoff (arg, & x, which))) { return ret; } 710 if ((ret = main_strtoxoff (arg, & x, which))) { return ret; }
711 XPR(NT "SEE -%c: value %"Q" low %"Q" high %"Q"\n", which, x, low, high); 711
712 if (x < low) 712 if (x < low)
713 { 713 {
714 XPR(NT "-%c: minimum value: %"Q"\n", which, low); 714 XPR(NT "-%c: minimum value: %"Q"\n", which, low);
diff --git a/xdelta3/xdelta3.h b/xdelta3/xdelta3.h
index f1aa5d8..bb5f4d6 100644
--- a/xdelta3/xdelta3.h
+++ b/xdelta3/xdelta3.h
@@ -71,7 +71,7 @@
71 * 71 *
72 * 8-16MB is reasonable, probably don't need to go larger. */ 72 * 8-16MB is reasonable, probably don't need to go larger. */
73#ifndef XD3_HARDMAXWINSIZE 73#ifndef XD3_HARDMAXWINSIZE
74#define XD3_HARDMAXWINSIZE (1U<<24) 74#define XD3_HARDMAXWINSIZE (1U<<26)
75#endif 75#endif
76/* The IOPT_SIZE value sets the size of a buffer used to batch 76/* The IOPT_SIZE value sets the size of a buffer used to batch
77 * overlapping copy instructions before they are optimized by picking 77 * overlapping copy instructions before they are optimized by picking