예제 #1
0
파일: file.go 프로젝트: theit8514/gocryptfs
// createHeader - create a new random header and write it to disk
func (f *file) createHeader() error {
	h := cryptfs.RandomHeader()
	buf := h.Pack()
	_, err := f.fd.WriteAt(buf, 0)
	if err != nil {
		return err
	}
	f.header = h

	return nil
}
예제 #2
0
파일: file.go 프로젝트: louisyoo/gocryptfs
// createHeader - create a new random header and write it to disk
func (f *file) createHeader() error {
	h := cryptfs.RandomHeader()
	buf := h.Pack()

	// Prevent partially written (=corrupt) header by preallocating the space beforehand
	f.fdLock.Lock()
	defer f.fdLock.Unlock()
	err := prealloc(int(f.fd.Fd()), 0, cryptfs.HEADER_LEN)
	if err != nil {
		cryptfs.Warn.Printf("createHeader: fallocateRetry failed: %s\n", err.Error())
		return err
	}

	// Actually write header
	_, err = f.fd.WriteAt(buf, 0)
	if err != nil {
		return err
	}
	f.header = h

	return nil
}