From 7d4d68cc103bb8e93d9bdd17f0d9ddca54aa341f Mon Sep 17 00:00:00 2001 From: janneke Date: Thu, 3 Nov 2005 20:52:45 +0000 Subject: [PATCH] * flower/file-path.cc (find): Bugfix: Return name of file found. * lily/main.cc (setup_paths): Bugfix for argv0 logic. (setup_paths)[__CYGWIN__ || __MINGW32__ || ]: Normalize argv0. (setup_paths)[__MINGW32__]: Also look for argv0 + .exe. --- ChangeLog | 4 ++++ flower/file-name.cc | 1 - flower/file-path.cc | 31 ++++++++++++++----------------- lily/main.cc | 21 +++++++++++++++++---- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8becc357f0..ccacdb8c0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ 2005-11-03 Jan Nieuwenhuizen + * flower/file-path.cc (find): Bugfix: Return name of file found. + * lily/main.cc (setup_paths): Bugfix for argv0 logic. + (setup_paths)[__CYGWIN__ || __MINGW32__ || ]: Normalize argv0. + (setup_paths)[__MINGW32__]: Also look for argv0 + .exe. 2005-11-03 Han-Wen Nienhuys diff --git a/flower/file-name.cc b/flower/file-name.cc index 2064e07261..74a45fd651 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -23,7 +23,6 @@ using namespace std; #include #endif -/* We don't have multiple roots, set this to '\0'? */ #ifndef ROOTSEP #define ROOTSEP ':' #endif diff --git a/flower/file-path.cc b/flower/file-path.cc index c66909eae3..b4478c23a0 100644 --- a/flower/file-path.cc +++ b/flower/file-path.cc @@ -149,26 +149,23 @@ File_path::find (String name) const String File_path::find (String name, char const *extensions[]) { - File_name file_name (name); if (name.is_empty () || name == "-") - file_name.base_ = "-"; - else + return name; + + File_name file_name (name); + String orig_ext = file_name.ext_; + for (int i = 0; extensions[i]; i++) { - String orig_ext = file_name.ext_; - for (int i = 0; extensions[i]; i++) - { - file_name.ext_ = orig_ext; - if (*extensions[i] && !file_name.ext_.is_empty ()) - file_name.ext_ += "."; - file_name.ext_ += extensions[i]; - if (!find (file_name.to_string ()).is_empty ()) - break; - } - - /* Reshuffle extension */ - file_name = File_name (file_name.to_string ()); + file_name.ext_ = orig_ext; + if (*extensions[i] && !file_name.ext_.is_empty ()) + file_name.ext_ += "."; + file_name.ext_ += extensions[i]; + String found = find (file_name.to_string ()); + if (!found.is_empty ()) + return found; } - return file_name.to_string (); + + return ""; } /** Append a directory, return false if failed. */ diff --git a/lily/main.cc b/lily/main.cc index 9ffbc3e0e3..f5bee67560 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -326,15 +326,28 @@ setup_paths (char const *argv0) be_verbose_global = true; /* Find absolute ARGV0 name, using PATH. */ - File_path p; - p.parse_path (getenv ("PATH")); - String argv0_abs = p.find (argv0); + File_path path; + path.parse_path (getenv ("PATH")); + +#if defined (__CYGWIN__) || defined (__MINGW32__) + String s = argv0; + s.substitute ('\\', '/'); + argv0 = s.to_str0 (); +#endif /* __CYGWIN__ || __MINGW32__ */ + +#ifndef __MINGW32__ + String argv0_abs = path.find (argv0); +#else /* __MINGW32__ */ + char const *ext[] = {"exe", "", 0 }; + String argv0_abs = path.find (argv0, ext); +#endif /* __MINGW32__ */ + 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) + if (name.to_string ().index ('/') >= 0 && name.dir_[0] != '/') { char cwd[PATH_MAX]; getcwd (cwd, PATH_MAX); -- 2.39.5