// openFile opens a file and checks for the encoding. In case the encoding cannot be detected // or the file cannot be opened because for example of failing read permissions, an error // is returned and the harvester is closed. The file will be picked up again the next time // the file system is scanned func (h *Harvester) openFile() error { f, err := file.ReadOpen(h.state.Source) if err != nil { return fmt.Errorf("Failed opening %s: %s", h.state.Source, err) } harvesterOpenFiles.Add(1) // Makes sure file handler is also closed on errors err = h.validateFile(f) if err != nil { f.Close() harvesterOpenFiles.Add(-1) return err } h.file = source.File{f} return nil }
// openFile opens a file and checks for the encoding. In case the encoding cannot be detected // or the file cannot be opened because for example of failing read permissions, an error // is returned and the harvester is closed. The file will be picked up again the next time // the file system is scanned func (h *Harvester) openFile() (encoding.Encoding, error) { var encoding encoding.Encoding f, err := file.ReadOpen(h.Path) if err == nil { // Check we are not following a rabbit hole (symlinks, etc.) if !file.IsRegular(f) { return nil, errors.New("Given file is not a regular file.") } encoding, err = h.encoding(f) if err != nil { if err == transform.ErrShortSrc { logp.Info("Initialising encoding for '%v' failed due to file being too short", f) } else { logp.Err("Initialising encoding for '%v' failed: %v", f, err) } return nil, err } } else { logp.Err("Failed opening %s: %s", h.Path, err) return nil, err } // update file offset err = h.initFileOffset(f) if err != nil { return nil, err } // yay, open file h.file = source.File{f} return encoding, nil }