From 5de83217a9bb1ce265897514c9690dcc89deccac Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 3 Nov 2005 09:48:22 +0000 Subject: [PATCH] (setup_paths): Bugfix for argv0 logic. --- ChangeLog | 4 ++++ lily/main.cc | 23 ++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index f972e20df6..9c4b906ec8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-11-03 Jan Nieuwenhuizen + + * lily/main.cc (setup_paths): Bugfix for argv0 logic. + 2005-11-02 Jan Nieuwenhuizen * lily/main.cc (setup_paths)[__MINGW32__]: Do not assume argv0 is diff --git a/lily/main.cc b/lily/main.cc index 551a0afd12..dbcc0381d1 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -320,13 +320,26 @@ setup_paths (char const* argv0) if (getenv ("LILYPOND_VERBOSE")) be_verbose_global = true; -#if 1 /* Huh, argv0 is not absolute on windows? ndef __MINGW32__ */ + /* Find absolute ARGV0 name, using PATH. */ File_path p; p.parse_path (getenv ("PATH")); - String bindir = dir_name (p.find (argv0)); -#else /* __MINGW32__ */ - String bindir = dir_name (argv0); -#endif + String argv0_abs = p.find (argv0); + if (argv0_abs.is_empty ()) + { + File_name name (argv0); + /* If NAME contains slashes and its DIR is not absolute, it can + only be referenced from CWD. */ + if (name.to_string ().index ('/') >= 0 && name.dir_[0] != DIRSEP) + { + char cwd[PATH_MAX]; + getcwd (cwd, PATH_MAX); + argv0_abs = String (cwd) + "/" + argv0; + } + else + programming_error ("can't find absolute argv0"); + } + + String bindir = dir_name (argv0_abs); String argv0_prefix = dir_name (bindir); if (argv0_prefix != dir_name (dir_name (dir_name (prefix_directory)))) { -- 2.39.5