code: func (ds *Storage) fetch(ctx context.Context, br blob.Ref, offset, length int64) (rc io.ReadCloser, size uint32, err error) {
  	// TODO: use ctx, if the os package ever supports that.
  	fileName := ds.blobPath(br)
  	stat, err := ds.fs.Stat(fileName)
  	if os.IsNotExist(err) {
  		return nil, 0, os.ErrNotExist
  	}
  	size = u32(stat.Size())
  	file, err := ds.fs.Open(fileName)
  	if err != nil {
  		if os.IsNotExist(err) {
  			err = os.ErrNotExist
  		}
  		return nil, 0, err
  	}
  	// normal Fetch
  	if length < 0 && offset == 0 {
  		return file, size, nil
  	}
  	// SubFetch:
  	if offset < 0 || offset > stat.Size() {
  		if offset < 0 {
  			return nil, 0, blob.ErrNegativeSubFetch
  		}
  		return nil, 0, blob.ErrOutOfRangeOffsetSubFetch
  	}
  	if offset != 0 {
  		if at, err := file.Seek(offset, io.SeekStart); err != nil || at != offset {
  			file.Close()
  			return nil, 0, fmt.Errorf("localdisk: error seeking to %d: got %v, %v", offset, at, err)
  		}
  	}
  	return struct {
  		io.Reader
  		io.Closer
  	}{
  		Reader: io.LimitReader(file, length),
  		Closer: file,
  	}, 0 /* unused */, nil
  }
docs: // length -1 means entire file