* use filepath.Join to build file paths instead of fmt.Sprintf
* use ioutil.ReadAll to ensure that we read the whole file
func (v *UnixVolume) Read(loc string) ([]byte, error) {
var f *os.File
var err error
func (v *UnixVolume) Read(loc string) ([]byte, error) {
var f *os.File
var err error
- blockFilename := fmt.Sprintf("%s/%s/%s", v.root, loc[0:3], loc)
+ blockFilename := filepath.Join(v.root, loc[0:3], loc)
f, err = os.Open(blockFilename)
if err != nil {
return nil, err
}
f, err = os.Open(blockFilename)
if err != nil {
return nil, err
}
- var buf = make([]byte, BLOCKSIZE)
- nread, err = f.Read(buf)
- if err != nil {
+ if buf, err = ioutil.ReadAll(f); err != nil {
log.Printf("%s: reading %s: %s\n", v, blockFilename, err)
return buf, err
}
// Success!
log.Printf("%s: reading %s: %s\n", v, blockFilename, err)
return buf, err
}
// Success!
- return buf[:nread], nil
}
// Write stores a block of data identified by the locator string
}
// Write stores a block of data identified by the locator string
if v.IsFull() {
return FullError
}
if v.IsFull() {
return FullError
}
- blockDir := fmt.Sprintf("%s/%s", v.root, loc[0:3])
+ blockDir := filepath.Join(v.root, loc[0:3])
if err := os.MkdirAll(blockDir, 0755); err != nil {
log.Printf("%s: could not create directory %s: %s",
loc, blockDir, err)
if err := os.MkdirAll(blockDir, 0755); err != nil {
log.Printf("%s: could not create directory %s: %s",
loc, blockDir, err)
log.Printf("ioutil.TempFile(%s, tmp%s): %s", blockDir, loc, tmperr)
return tmperr
}
log.Printf("ioutil.TempFile(%s, tmp%s): %s", blockDir, loc, tmperr)
return tmperr
}
- blockFilename := fmt.Sprintf("%s/%s", blockDir, loc)
+ blockFilename := filepath.Join(blockDir, loc)
if _, err := tmpfile.Write(block); err != nil {
log.Printf("%s: writing to %s: %s\n", v, blockFilename, err)
if _, err := tmpfile.Write(block); err != nil {
log.Printf("%s: writing to %s: %s\n", v, blockFilename, err)
}(sem)
// Wait for all goroutines to finish
}(sem)
// Wait for all goroutines to finish
- for done := 0; done < 2; {
+ for done := 0; done < 3; {