code: func (base *Base) Reader(ctx context.Context, path string, offset int64) (io.ReadCloser, error) {
  	ctx, done := dcontext.WithTrace(ctx)
  	defer done("%s.Reader(%q, %d)", base.Name(), path, offset)
  
  	if offset < 0 {
  		return nil, storagedriver.InvalidOffsetError{Path: path, Offset: offset, DriverName: base.StorageDriver.Name()}
  	}
  
  	if !storagedriver.PathRegexp.MatchString(path) {
  		return nil, storagedriver.InvalidPathError{Path: path, DriverName: base.StorageDriver.Name()}
  	}
  
  	rc, e := base.StorageDriver.Reader(ctx, path, offset)
  	return rc, base.setDriverName(e)
  }
docs: // Reader wraps Reader of underlying storage driver.