+// glocate -- ZFS-diff-friendly locate-like utility
+// Copyright (C) 2022-2025 Sergey Matveev <stargrave@stargrave.org>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 3 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
package main
import (
"log"
"os"
"path"
+ "path/filepath"
"strings"
"syscall"
)
+var TmpDir string
+
type Ent struct {
name []string
mtime int64
func dbCommit(dbPath string, tmp *os.File) {
umask := syscall.Umask(0)
syscall.Umask(umask)
- if err := os.Chmod(tmp.Name(), os.FileMode(0666&^umask)); err != nil {
+ if err := os.Chmod(tmp.Name(), os.FileMode(0o666&^umask)); err != nil {
log.Fatalln(err)
}
if err := os.Rename(tmp.Name(), dbPath); err != nil {
flag.Parse()
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
+ var err error
+ TmpDir, err = filepath.Abs(*dbPath)
+ if err != nil {
+ panic(err)
+ }
+ TmpDir = path.Dir(TmpDir)
+
if *doIndex {
tmp := index()
tmp.Close()
entsPrinter <- ent
continue
}
- for i = 0; i < len(ent.name); i++ {
+ for i = range len(ent.name) {
if i == len(namePrev) || ent.name[i] != namePrev[i] {
break
}