summaryrefslogtreecommitdiff
path: root/src/pkg/encoding/git85
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/encoding/git85')
-rw-r--r--src/pkg/encoding/git85/git.go156
-rw-r--r--src/pkg/encoding/git85/git_test.go130
2 files changed, 143 insertions, 143 deletions
diff --git a/src/pkg/encoding/git85/git.go b/src/pkg/encoding/git85/git.go
index 1e5299792..25a3deac0 100644
--- a/src/pkg/encoding/git85/git.go
+++ b/src/pkg/encoding/git85/git.go
@@ -7,10 +7,10 @@
package git85
import (
- "bytes";
- "io";
- "os";
- "strconv";
+ "bytes"
+ "io"
+ "os"
+ "strconv"
)
type CorruptInputError int64
@@ -49,9 +49,9 @@ var decode = [256]uint8{
// The encoding splits src into chunks of at most 52 bytes
// and encodes each chunk on its own line.
func Encode(dst, src []byte) int {
- ndst := 0;
+ ndst := 0
for len(src) > 0 {
- n := len(src);
+ n := len(src)
if n > 52 {
n = 52
}
@@ -60,23 +60,23 @@ func Encode(dst, src []byte) int {
} else {
dst[ndst] = byte('a' + n - 26 - 1)
}
- ndst++;
+ ndst++
for i := 0; i < n; i += 4 {
- var v uint32;
+ var v uint32
for j := 0; j < 4 && i+j < n; j++ {
v |= uint32(src[i+j]) << uint(24-j*8)
}
for j := 4; j >= 0; j-- {
- dst[ndst+j] = encode[v%85];
- v /= 85;
+ dst[ndst+j] = encode[v%85]
+ v /= 85
}
- ndst += 5;
+ ndst += 5
}
- dst[ndst] = '\n';
- ndst++;
- src = src[n:];
+ dst[ndst] = '\n'
+ ndst++
+ src = src[n:]
}
- return ndst;
+ return ndst
}
// EncodedLen returns the length of an encoding of n source bytes.
@@ -86,7 +86,7 @@ func EncodedLen(n int) int {
}
// 5 bytes per 4 bytes of input, rounded up.
// 2 extra bytes for each line of 52 src bytes, rounded up.
- return (n+3)/4*5 + (n+51)/52*2;
+ return (n+3)/4*5 + (n+51)/52*2
}
var newline = []byte{'\n'}
@@ -97,10 +97,10 @@ var newline = []byte{'\n'}
// If Decode encounters invalid input, it returns a CorruptInputError.
//
func Decode(dst, src []byte) (n int, err os.Error) {
- ndst := 0;
- nsrc := 0;
+ ndst := 0
+ nsrc := 0
for nsrc < len(src) {
- var l int;
+ var l int
switch ch := int(src[nsrc]); {
case 'A' <= ch && ch <= 'Z':
l = ch - 'A' + 1
@@ -112,24 +112,24 @@ func Decode(dst, src []byte) (n int, err os.Error) {
if nsrc+1+l > len(src) {
return ndst, CorruptInputError(nsrc)
}
- el := (l + 3) / 4 * 5; // encoded len
+ el := (l + 3) / 4 * 5 // encoded len
if nsrc+1+el+1 > len(src) || src[nsrc+1+el] != '\n' {
return ndst, CorruptInputError(nsrc)
}
- line := src[nsrc+1 : nsrc+1+el];
+ line := src[nsrc+1 : nsrc+1+el]
for i := 0; i < el; i += 5 {
- var v uint32;
+ var v uint32
for j := 0; j < 5; j++ {
- ch := decode[line[i+j]];
+ ch := decode[line[i+j]]
if ch == 0 {
return ndst, CorruptInputError(nsrc + 1 + i + j)
}
- v = v*85 + uint32(ch-1);
+ v = v*85 + uint32(ch-1)
}
for j := 0; j < 4; j++ {
- dst[ndst] = byte(v >> 24);
- v <<= 8;
- ndst++;
+ dst[ndst] = byte(v >> 24)
+ v <<= 8
+ ndst++
}
}
// Last fragment may have run too far (but there was room in dst).
@@ -137,27 +137,27 @@ func Decode(dst, src []byte) (n int, err os.Error) {
if l%4 != 0 {
ndst -= 4 - l%4
}
- nsrc += 1 + el + 1;
+ nsrc += 1 + el + 1
}
- return ndst, nil;
+ return ndst, nil
}
-func MaxDecodedLen(n int) int { return n / 5 * 4 }
+func MaxDecodedLen(n int) int { return n / 5 * 4 }
// NewEncoder returns a new Git base85 stream encoder. Data written to
// the returned writer will be encoded and then written to w.
// The Git encoding operates on 52-byte blocks; when finished
// writing, the caller must Close the returned encoder to flush any
// partially written blocks.
-func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }
+func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }
type encoder struct {
- w io.Writer;
- err os.Error;
- buf [52]byte;
- nbuf int;
- out [1024]byte;
- nout int;
+ w io.Writer
+ err os.Error
+ buf [52]byte
+ nbuf int
+ out [1024]byte
+ nout int
}
func (e *encoder) Write(p []byte) (n int, err os.Error) {
@@ -167,70 +167,70 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {
// Leading fringe.
if e.nbuf > 0 {
- var i int;
+ var i int
for i = 0; i < len(p) && e.nbuf < 52; i++ {
- e.buf[e.nbuf] = p[i];
- e.nbuf++;
+ e.buf[e.nbuf] = p[i]
+ e.nbuf++
}
- n += i;
- p = p[i:];
+ n += i
+ p = p[i:]
if e.nbuf < 52 {
return
}
- nout := Encode(&e.out, &e.buf);
+ nout := Encode(&e.out, &e.buf)
if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {
return n, e.err
}
- e.nbuf = 0;
+ e.nbuf = 0
}
// Large interior chunks.
for len(p) >= 52 {
- nn := len(e.out) / (1 + 52/4*5 + 1) * 52;
+ nn := len(e.out) / (1 + 52/4*5 + 1) * 52
if nn > len(p) {
nn = len(p) / 52 * 52
}
if nn > 0 {
- nout := Encode(&e.out, p[0:nn]);
+ nout := Encode(&e.out, p[0:nn])
if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {
return n, e.err
}
}
- n += nn;
- p = p[nn:];
+ n += nn
+ p = p[nn:]
}
// Trailing fringe.
for i := 0; i < len(p); i++ {
e.buf[i] = p[i]
}
- e.nbuf = len(p);
- n += len(p);
- return;
+ e.nbuf = len(p)
+ n += len(p)
+ return
}
func (e *encoder) Close() os.Error {
// If there's anything left in the buffer, flush it out
if e.err == nil && e.nbuf > 0 {
- nout := Encode(&e.out, e.buf[0:e.nbuf]);
- e.nbuf = 0;
- _, e.err = e.w.Write(e.out[0:nout]);
+ nout := Encode(&e.out, e.buf[0:e.nbuf])
+ e.nbuf = 0
+ _, e.err = e.w.Write(e.out[0:nout])
}
- return e.err;
+ return e.err
}
// NewDecoder returns a new Git base85 stream decoder.
-func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }
+func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }
type decoder struct {
- r io.Reader;
- err os.Error;
- readErr os.Error;
- buf [1024]byte;
- nbuf int;
- out []byte;
- outbuf [1024]byte;
- off int64;
+ r io.Reader
+ err os.Error
+ readErr os.Error
+ buf [1024]byte
+ nbuf int
+ out []byte
+ outbuf [1024]byte
+ off int64
}
func (d *decoder) Read(p []byte) (n int, err os.Error) {
@@ -241,9 +241,9 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
for {
// Copy leftover output from last decode.
if len(d.out) > 0 {
- n = copy(p, d.out);
- d.out = d.out[n:];
- return;
+ n = copy(p, d.out)
+ d.out = d.out[n:]
+ return
}
// Out of decoded output. Check errors.
@@ -251,27 +251,27 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {
return 0, d.err
}
if d.readErr != nil {
- d.err = d.readErr;
- return 0, d.err;
+ d.err = d.readErr
+ return 0, d.err
}
// Read and decode more input.
- var nn int;
- nn, d.readErr = d.r.Read(d.buf[d.nbuf:]);
- d.nbuf += nn;
+ var nn int
+ nn, d.readErr = d.r.Read(d.buf[d.nbuf:])
+ d.nbuf += nn
// Send complete lines to Decode.
- nl := bytes.LastIndex(d.buf[0:d.nbuf], newline);
+ nl := bytes.LastIndex(d.buf[0:d.nbuf], newline)
if nl < 0 {
continue
}
- nn, d.err = Decode(&d.outbuf, d.buf[0:nl+1]);
+ nn, d.err = Decode(&d.outbuf, d.buf[0:nl+1])
if e, ok := d.err.(CorruptInputError); ok {
d.err = CorruptInputError(int64(e) + d.off)
}
- d.out = d.outbuf[0:nn];
- d.nbuf = copy(&d.buf, d.buf[nl+1:d.nbuf]);
- d.off += int64(nl + 1);
+ d.out = d.outbuf[0:nn]
+ d.nbuf = copy(&d.buf, d.buf[nl+1:d.nbuf])
+ d.off += int64(nl + 1)
}
- panic("unreacahable");
+ panic("unreacahable")
}
diff --git a/src/pkg/encoding/git85/git_test.go b/src/pkg/encoding/git85/git_test.go
index 564b4915b..4a42282fe 100644
--- a/src/pkg/encoding/git85/git_test.go
+++ b/src/pkg/encoding/git85/git_test.go
@@ -5,36 +5,36 @@
package git85
import (
- "bytes";
- "io/ioutil";
- "os";
- "reflect";
- "strings";
- "testing";
+ "bytes"
+ "io/ioutil"
+ "os"
+ "reflect"
+ "strings"
+ "testing"
)
type testpair struct {
- decoded, encoded string;
+ decoded, encoded string
}
func testEqual(t *testing.T, msg string, args ...) bool {
- v := reflect.NewValue(args).(*reflect.StructValue);
- v1 := v.Field(v.NumField() - 2);
- v2 := v.Field(v.NumField() - 1);
+ v := reflect.NewValue(args).(*reflect.StructValue)
+ v1 := v.Field(v.NumField() - 2)
+ v2 := v.Field(v.NumField() - 1)
if v1.Interface() != v2.Interface() {
- t.Errorf(msg, args);
- return false;
+ t.Errorf(msg, args)
+ return false
}
- return true;
+ return true
}
func TestGitTable(t *testing.T) {
- var saw [256]bool;
+ var saw [256]bool
for i, c := range encode {
if decode[c] != uint8(i+1) {
t.Errorf("decode['%c'] = %d, want %d", c, decode[c], i+1)
}
- saw[c] = true;
+ saw[c] = true
}
for i, b := range saw {
if !b && decode[i] != 0 {
@@ -64,65 +64,65 @@ var gitBigtest = gitPairs[len(gitPairs)-1]
func TestEncode(t *testing.T) {
for _, p := range gitPairs {
- buf := make([]byte, EncodedLen(len(p.decoded)));
- n := Encode(buf, strings.Bytes(p.decoded));
+ buf := make([]byte, EncodedLen(len(p.decoded)))
+ n := Encode(buf, strings.Bytes(p.decoded))
if n != len(buf) {
t.Errorf("EncodedLen does not agree with Encode")
}
- buf = buf[0:n];
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, string(buf), p.encoded);
+ buf = buf[0:n]
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, string(buf), p.encoded)
}
}
func TestEncoder(t *testing.T) {
for _, p := range gitPairs {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(bb);
- encoder.Write(strings.Bytes(p.decoded));
- encoder.Close();
- testEqual(t, "Encode(%q) = %q, want %q", p.decoded, bb.String(), p.encoded);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(bb)
+ encoder.Write(strings.Bytes(p.decoded))
+ encoder.Close()
+ testEqual(t, "Encode(%q) = %q, want %q", p.decoded, bb.String(), p.encoded)
}
}
func TestEncoderBuffering(t *testing.T) {
- input := strings.Bytes(gitBigtest.decoded);
+ input := strings.Bytes(gitBigtest.decoded)
for bs := 1; bs <= 12; bs++ {
- bb := &bytes.Buffer{};
- encoder := NewEncoder(bb);
+ bb := &bytes.Buffer{}
+ encoder := NewEncoder(bb)
for pos := 0; pos < len(input); pos += bs {
- end := pos + bs;
+ end := pos + bs
if end > len(input) {
end = len(input)
}
- n, err := encoder.Write(input[pos:end]);
- testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil));
- testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos);
+ n, err := encoder.Write(input[pos:end])
+ testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil))
+ testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos)
}
- err := encoder.Close();
- testEqual(t, "Close gave error %v, want %v", err, os.Error(nil));
- testEqual(t, "Encoding/%d of %q = %q, want %q", bs, gitBigtest.decoded, bb.String(), gitBigtest.encoded);
+ err := encoder.Close()
+ testEqual(t, "Close gave error %v, want %v", err, os.Error(nil))
+ testEqual(t, "Encoding/%d of %q = %q, want %q", bs, gitBigtest.decoded, bb.String(), gitBigtest.encoded)
}
}
func TestDecode(t *testing.T) {
for _, p := range gitPairs {
- dbuf := make([]byte, 4*len(p.encoded));
- ndst, err := Decode(dbuf, strings.Bytes(p.encoded));
- testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil));
- testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded));
- testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded);
+ dbuf := make([]byte, 4*len(p.encoded))
+ ndst, err := Decode(dbuf, strings.Bytes(p.encoded))
+ testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil))
+ testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded))
+ testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded)
}
}
func TestDecoder(t *testing.T) {
for _, p := range gitPairs {
- decoder := NewDecoder(bytes.NewBufferString(p.encoded));
- dbuf, err := ioutil.ReadAll(decoder);
+ decoder := NewDecoder(bytes.NewBufferString(p.encoded))
+ dbuf, err := ioutil.ReadAll(decoder)
if err != nil {
t.Fatal("Read failed", err)
}
- testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded));
- testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded);
+ testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded))
+ testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded)
if err != nil {
testEqual(t, "Read from %q = %v, want %v", p.encoded, err, os.EOF)
}
@@ -131,31 +131,31 @@ func TestDecoder(t *testing.T) {
func TestDecoderBuffering(t *testing.T) {
for bs := 1; bs <= 12; bs++ {
- decoder := NewDecoder(bytes.NewBufferString(gitBigtest.encoded));
- buf := make([]byte, len(gitBigtest.decoded)+12);
- var total int;
+ decoder := NewDecoder(bytes.NewBufferString(gitBigtest.encoded))
+ buf := make([]byte, len(gitBigtest.decoded)+12)
+ var total int
for total = 0; total < len(gitBigtest.decoded); {
- n, err := decoder.Read(buf[total : total+bs]);
- testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", gitBigtest.encoded, total, n, err, os.Error(nil));
- total += n;
+ n, err := decoder.Read(buf[total : total+bs])
+ testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", gitBigtest.encoded, total, n, err, os.Error(nil))
+ total += n
}
- testEqual(t, "Decoding/%d of %q = %q, want %q", bs, gitBigtest.encoded, string(buf[0:total]), gitBigtest.decoded);
+ testEqual(t, "Decoding/%d of %q = %q, want %q", bs, gitBigtest.encoded, string(buf[0:total]), gitBigtest.decoded)
}
}
func TestDecodeCorrupt(t *testing.T) {
type corrupt struct {
- e string;
- p int;
+ e string
+ p int
}
examples := []corrupt{
corrupt{"v", 0},
corrupt{"!z!!!!!!!!!", 0},
- };
+ }
for _, e := range examples {
- dbuf := make([]byte, 2*len(e.e));
- _, err := Decode(dbuf, strings.Bytes(e.e));
+ dbuf := make([]byte, 2*len(e.e))
+ _, err := Decode(dbuf, strings.Bytes(e.e))
switch err := err.(type) {
case CorruptInputError:
testEqual(t, "Corruption in %q at offset %v, want %v", e.e, int(err), e.p)
@@ -166,34 +166,34 @@ func TestDecodeCorrupt(t *testing.T) {
}
func TestGitBig(t *testing.T) {
- n := 3*1000 + 1;
- raw := make([]byte, n);
- const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ n := 3*1000 + 1
+ raw := make([]byte, n)
+ const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i := 0; i < n; i++ {
raw[i] = alpha[i%len(alpha)]
}
- encoded := new(bytes.Buffer);
- w := NewEncoder(encoded);
- nn, err := w.Write(raw);
+ encoded := new(bytes.Buffer)
+ w := NewEncoder(encoded)
+ nn, err := w.Write(raw)
if nn != n || err != nil {
t.Fatalf("Encoder.Write(raw) = %d, %v want %d, nil", nn, err, n)
}
- err = w.Close();
+ err = w.Close()
if err != nil {
t.Fatalf("Encoder.Close() = %v want nil", err)
}
- decoded, err := ioutil.ReadAll(NewDecoder(encoded));
+ decoded, err := ioutil.ReadAll(NewDecoder(encoded))
if err != nil {
t.Fatalf("ioutil.ReadAll(NewDecoder(...)): %v", err)
}
if !bytes.Equal(raw, decoded) {
- var i int;
+ var i int
for i = 0; i < len(decoded) && i < len(raw); i++ {
if decoded[i] != raw[i] {
break
}
}
- t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i);
+ t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i)
}
}