From cbeda11801c95687498e2deb6a0144b562581d16 Mon Sep 17 00:00:00 2001 From: Tom Schwindl Date: Sun, 10 Jul 2022 19:30:22 +0000 Subject: vis: Compare inodes instead of filenames --- vis.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index cc61754..152a594 100644 --- a/vis.c +++ b/vis.c @@ -179,14 +179,19 @@ err: static File *file_new(Vis *vis, const char *name) { char *name_absolute = NULL; + struct stat new; + if (name) { if (!(name_absolute = absolute_path(name))) return NULL; + if (stat(name_absolute, &new) && errno != ENOENT) + return NULL; + File *existing = NULL; - /* try to detect whether the same file is already open in another window - * TODO: do this based on inodes */ + /* try to detect whether the same file is already open in another window */ for (File *file = vis->files; file; file = file->next) { - if (file->name && strcmp(file->name, name_absolute) == 0) { + if (file->name && file->stat.st_dev == new.st_dev && + file->stat.st_ino == new.st_ino) { existing = file; break; } -- cgit v1.2.3