* [PATCH] Fix cache dir resolving on Windows
@ 2019-06-03 19:37 orgads
2019-06-04 14:44 ` Eli Zaretskii
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: orgads @ 2019-06-03 19:37 UTC (permalink / raw)
To: gdb-patches; +Cc: Orgad Shaneh
From: Orgad Shaneh <orgads@gmail.com>
... when not running from MSYS environment, and HOME is not set.
---
gdb/common/pathstuff.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c
index 2b1669a5b9..edb8a1fcda 100644
--- a/gdb/common/pathstuff.c
+++ b/gdb/common/pathstuff.c
@@ -231,6 +231,10 @@ get_standard_cache_dir ()
#endif
const char *home = getenv ("HOME");
+#ifdef _WIN32
+ if (home == nullptr)
+ home = getenv ("USERPROFILE");
+#endif
if (home != NULL)
{
/* Make sure the path is absolute and tilde-expanded. */
--
2.22.0.rc0.windows.1
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-03 19:37 [PATCH] Fix cache dir resolving on Windows orgads @ 2019-06-04 14:44 ` Eli Zaretskii 2019-06-04 15:06 ` Simon Marchi 2019-06-07 6:21 ` orgads 2019-06-07 6:27 ` orgads 2 siblings, 1 reply; 12+ messages in thread From: Eli Zaretskii @ 2019-06-04 14:44 UTC (permalink / raw) To: orgads; +Cc: gdb-patches, orgads > From: orgads@gmail.com > Cc: Orgad Shaneh <orgads@gmail.com> > Date: Mon, 3 Jun 2019 22:37:16 +0300 > > From: Orgad Shaneh <orgads@gmail.com> > > ... when not running from MSYS environment, and HOME is not set. > --- > gdb/common/pathstuff.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c > index 2b1669a5b9..edb8a1fcda 100644 > --- a/gdb/common/pathstuff.c > +++ b/gdb/common/pathstuff.c > @@ -231,6 +231,10 @@ get_standard_cache_dir () > #endif > > const char *home = getenv ("HOME"); > +#ifdef _WIN32 > + if (home == nullptr) > + home = getenv ("USERPROFILE"); > +#endif > if (home != NULL) This is against the MS platform recommendations regarding "known folders", see https://docs.microsoft.com/en-us/windows/desktop/shell/knownfolderid https://docs.microsoft.com/en-us/windows/desktop/shell/csidl But maybe we don't care about that. I know that many applications ported from Unix don't. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-04 14:44 ` Eli Zaretskii @ 2019-06-04 15:06 ` Simon Marchi 2019-06-04 16:17 ` Eli Zaretskii 0 siblings, 1 reply; 12+ messages in thread From: Simon Marchi @ 2019-06-04 15:06 UTC (permalink / raw) To: Eli Zaretskii, orgads; +Cc: gdb-patches On 2019-06-04 10:44 a.m., Eli Zaretskii wrote: >> From: orgads@gmail.com >> Cc: Orgad Shaneh <orgads@gmail.com> >> Date: Mon, 3 Jun 2019 22:37:16 +0300 >> >> From: Orgad Shaneh <orgads@gmail.com> >> >> ... when not running from MSYS environment, and HOME is not set. >> --- >> gdb/common/pathstuff.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c >> index 2b1669a5b9..edb8a1fcda 100644 >> --- a/gdb/common/pathstuff.c >> +++ b/gdb/common/pathstuff.c >> @@ -231,6 +231,10 @@ get_standard_cache_dir () >> #endif >> >> const char *home = getenv ("HOME"); >> +#ifdef _WIN32 >> + if (home == nullptr) >> + home = getenv ("USERPROFILE"); >> +#endif >> if (home != NULL) > > This is against the MS platform recommendations regarding "known > folders", see > > https://docs.microsoft.com/en-us/windows/desktop/shell/knownfolderid > https://docs.microsoft.com/en-us/windows/desktop/shell/csidl > > But maybe we don't care about that. I know that many applications > ported from Unix don't. If it's not too complicated to do The Right Thing (use these and be a good citizen, I would prefer that. But I won't be the one writing the change for Windows and maintaining it, so I won't force it either. Simon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-04 15:06 ` Simon Marchi @ 2019-06-04 16:17 ` Eli Zaretskii 0 siblings, 0 replies; 12+ messages in thread From: Eli Zaretskii @ 2019-06-04 16:17 UTC (permalink / raw) To: Simon Marchi; +Cc: orgads, gdb-patches > Cc: gdb-patches@sourceware.org > From: Simon Marchi <simark@simark.ca> > Date: Tue, 4 Jun 2019 11:05:52 -0400 > > > https://docs.microsoft.com/en-us/windows/desktop/shell/knownfolderid > > https://docs.microsoft.com/en-us/windows/desktop/shell/csidl > > > > But maybe we don't care about that. I know that many applications > > ported from Unix don't. > > If it's not too complicated to do The Right Thing (use these and be a good citizen, > I would prefer that. But I won't be the one writing the change for Windows > and maintaining it, so I won't force it either. If we want to follow the recommendations, it's just the matter of using a different environment variable: APPDATA instead of USERPROFILE. It is usually a subdirectory of USERPROFILE. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] Fix cache dir resolving on Windows 2019-06-03 19:37 [PATCH] Fix cache dir resolving on Windows orgads 2019-06-04 14:44 ` Eli Zaretskii @ 2019-06-07 6:21 ` orgads 2019-06-07 6:23 ` Orgad Shaneh 2019-06-07 6:27 ` Eli Zaretskii 2019-06-07 6:27 ` orgads 2 siblings, 2 replies; 12+ messages in thread From: orgads @ 2019-06-07 6:21 UTC (permalink / raw) To: gdb-patches; +Cc: Orgad Shaneh From: Orgad Shaneh <orgads@gmail.com> ... when not running from MSYS environment, and HOME is not set. --- gdb/common/pathstuff.c | 584 +++++++++++++++++++++-------------------- 1 file changed, 294 insertions(+), 290 deletions(-) diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c index 2b1669a5b9..33fa5bbb4d 100644 --- a/gdb/common/pathstuff.c +++ b/gdb/common/pathstuff.c @@ -1,290 +1,294 @@ -/* Path manipulation routines for GDB and gdbserver. - - Copyright (C) 1986-2019 Free Software Foundation, Inc. - - This file is part of GDB. - - 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; either version 3 of the License, or - (at your option) any later version. - - 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/>. */ - -#include "common-defs.h" -#include "pathstuff.h" -#include "host-defs.h" -#include "filenames.h" -#include "gdb_tilde_expand.h" - -#ifdef USE_WIN32API -#include <windows.h> -#endif - -/* See common/pathstuff.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_realpath (const char *filename) -{ -/* On most hosts, we rely on canonicalize_file_name to compute - the FILENAME's realpath. - - But the situation is slightly more complex on Windows, due to some - versions of GCC which were reported to generate paths where - backlashes (the directory separator) were doubled. For instance: - c:\\some\\double\\slashes\\dir - ... instead of ... - c:\some\double\slashes\dir - Those double-slashes were getting in the way when comparing paths, - for instance when trying to insert a breakpoint as follow: - (gdb) b c:/some/double/slashes/dir/foo.c:4 - No source file named c:/some/double/slashes/dir/foo.c:4. - (gdb) b c:\some\double\slashes\dir\foo.c:4 - No source file named c:\some\double\slashes\dir\foo.c:4. - To prevent this from happening, we need this function to always - strip those extra backslashes. While canonicalize_file_name does - perform this simplification, it only works when the path is valid. - Since the simplification would be useful even if the path is not - valid (one can always set a breakpoint on a file, even if the file - does not exist locally), we rely instead on GetFullPathName to - perform the canonicalization. */ - -#if defined (_WIN32) - { - char buf[MAX_PATH]; - DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL); - - /* The file system is case-insensitive but case-preserving. - So it is important we do not lowercase the path. Otherwise, - we might not be able to display the original casing in a given - path. */ - if (len > 0 && len < MAX_PATH) - return gdb::unique_xmalloc_ptr<char> (xstrdup (buf)); - } -#else - { - char *rp = canonicalize_file_name (filename); - - if (rp != NULL) - return gdb::unique_xmalloc_ptr<char> (rp); - } -#endif - - /* This system is a lost cause, just dup the buffer. */ - return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); -} - -/* See common/pathstuff.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_realpath_keepfile (const char *filename) -{ - const char *base_name = lbasename (filename); - char *dir_name; - char *result; - - /* Extract the basename of filename, and return immediately - a copy of filename if it does not contain any directory prefix. */ - if (base_name == filename) - return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); - - dir_name = (char *) alloca ((size_t) (base_name - filename + 2)); - /* Allocate enough space to store the dir_name + plus one extra - character sometimes needed under Windows (see below), and - then the closing \000 character. */ - strncpy (dir_name, filename, base_name - filename); - dir_name[base_name - filename] = '\000'; - -#ifdef HAVE_DOS_BASED_FILE_SYSTEM - /* We need to be careful when filename is of the form 'd:foo', which - is equivalent of d:./foo, which is totally different from d:/foo. */ - if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':') - { - dir_name[2] = '.'; - dir_name[3] = '\000'; - } -#endif - - /* Canonicalize the directory prefix, and build the resulting - filename. If the dirname realpath already contains an ending - directory separator, avoid doubling it. */ - gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name); - const char *real_path = path_storage.get (); - if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1])) - result = concat (real_path, base_name, (char *) NULL); - else - result = concat (real_path, SLASH_STRING, base_name, (char *) NULL); - - return gdb::unique_xmalloc_ptr<char> (result); -} - -/* See common/pathstuff.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_abspath (const char *path) -{ - gdb_assert (path != NULL && path[0] != '\0'); - - if (path[0] == '~') - return gdb_tilde_expand_up (path); - - if (IS_ABSOLUTE_PATH (path)) - return gdb::unique_xmalloc_ptr<char> (xstrdup (path)); - - /* Beware the // my son, the Emacs barfs, the botch that catch... */ - return gdb::unique_xmalloc_ptr<char> - (concat (current_directory, - IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) - ? "" : SLASH_STRING, - path, (char *) NULL)); -} - -/* See common/pathstuff.h. */ - -const char * -child_path (const char *parent, const char *child) -{ - /* The child path must start with the parent path. */ - size_t parent_len = strlen (parent); - if (filename_ncmp (parent, child, parent_len) != 0) - return NULL; - - /* The parent path must be a directory and the child must contain at - least one component underneath the parent. */ - const char *child_component; - if (IS_DIR_SEPARATOR (parent[parent_len - 1])) - { - /* The parent path ends in a directory separator, so it is a - directory. The first child component starts after the common - prefix. */ - child_component = child + parent_len; - } - else - { - /* The parent path does not end in a directory separator. The - first character in the child after the common prefix must be - a directory separator. - - Note that CHILD must hold at least parent_len characters for - filename_ncmp to return zero. If the character at parent_len - is nul due to CHILD containing the same path as PARENT, the - IS_DIR_SEPARATOR check will fail here. */ - if (!IS_DIR_SEPARATOR (child[parent_len])) - return NULL; - - /* The first child component starts after the separator after the - common prefix. */ - child_component = child + parent_len + 1; - } - - /* The child must contain at least one non-separator character after - the parent. */ - while (*child_component != '\0') - { - if (!IS_DIR_SEPARATOR (*child_component)) - return child_component; - - child_component++; - } - return NULL; -} - -/* See common/pathstuff.h. */ - -bool -contains_dir_separator (const char *path) -{ - for (; *path != '\0'; path++) - { - if (IS_DIR_SEPARATOR (*path)) - return true; - } - - return false; -} - -/* See common/pathstuff.h. */ - -std::string -get_standard_cache_dir () -{ -#ifdef __APPLE__ -#define HOME_CACHE_DIR "Library/Caches" -#else -#define HOME_CACHE_DIR ".cache" -#endif - -#ifndef __APPLE__ - const char *xdg_cache_home = getenv ("XDG_CACHE_HOME"); - if (xdg_cache_home != NULL) - { - /* Make sure the path is absolute and tilde-expanded. */ - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home)); - return string_printf ("%s/gdb", abs.get ()); - } -#endif - - const char *home = getenv ("HOME"); - if (home != NULL) - { - /* Make sure the path is absolute and tilde-expanded. */ - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home)); - return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ()); - } - - return {}; -} - -/* See common/pathstuff.h. */ - -std::string -get_standard_temp_dir () -{ -#ifdef WIN32 - const char *tmp = getenv ("TMP"); - if (tmp != nullptr) - return tmp; - - tmp = getenv ("TEMP"); - if (tmp != nullptr) - return tmp; - - error (_("Couldn't find temp dir path, both TMP and TEMP are unset.")); - -#else - const char *tmp = getenv ("TMPDIR"); - if (tmp != nullptr) - return tmp; - - return "/tmp"; -#endif -} - -/* See common/pathstuff.h. */ - -const char * -get_shell () -{ - const char *ret = getenv ("SHELL"); - if (ret == NULL) - ret = "/bin/sh"; - - return ret; -} - -/* See common/pathstuff.h. */ - -gdb::char_vector -make_temp_filename (const std::string &f) -{ - gdb::char_vector filename_temp (f.length () + 8); - strcpy (filename_temp.data (), f.c_str ()); - strcat (filename_temp.data () + f.size (), "-XXXXXX"); - return filename_temp; -} +/* Path manipulation routines for GDB and gdbserver. + + Copyright (C) 1986-2019 Free Software Foundation, Inc. + + This file is part of GDB. + + 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; either version 3 of the License, or + (at your option) any later version. + + 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/>. */ + +#include "common-defs.h" +#include "pathstuff.h" +#include "host-defs.h" +#include "filenames.h" +#include "gdb_tilde_expand.h" + +#ifdef USE_WIN32API +#include <windows.h> +#endif + +/* See common/pathstuff.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_realpath (const char *filename) +{ +/* On most hosts, we rely on canonicalize_file_name to compute + the FILENAME's realpath. + + But the situation is slightly more complex on Windows, due to some + versions of GCC which were reported to generate paths where + backlashes (the directory separator) were doubled. For instance: + c:\\some\\double\\slashes\\dir + ... instead of ... + c:\some\double\slashes\dir + Those double-slashes were getting in the way when comparing paths, + for instance when trying to insert a breakpoint as follow: + (gdb) b c:/some/double/slashes/dir/foo.c:4 + No source file named c:/some/double/slashes/dir/foo.c:4. + (gdb) b c:\some\double\slashes\dir\foo.c:4 + No source file named c:\some\double\slashes\dir\foo.c:4. + To prevent this from happening, we need this function to always + strip those extra backslashes. While canonicalize_file_name does + perform this simplification, it only works when the path is valid. + Since the simplification would be useful even if the path is not + valid (one can always set a breakpoint on a file, even if the file + does not exist locally), we rely instead on GetFullPathName to + perform the canonicalization. */ + +#if defined (_WIN32) + { + char buf[MAX_PATH]; + DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL); + + /* The file system is case-insensitive but case-preserving. + So it is important we do not lowercase the path. Otherwise, + we might not be able to display the original casing in a given + path. */ + if (len > 0 && len < MAX_PATH) + return gdb::unique_xmalloc_ptr<char> (xstrdup (buf)); + } +#else + { + char *rp = canonicalize_file_name (filename); + + if (rp != NULL) + return gdb::unique_xmalloc_ptr<char> (rp); + } +#endif + + /* This system is a lost cause, just dup the buffer. */ + return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); +} + +/* See common/pathstuff.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_realpath_keepfile (const char *filename) +{ + const char *base_name = lbasename (filename); + char *dir_name; + char *result; + + /* Extract the basename of filename, and return immediately + a copy of filename if it does not contain any directory prefix. */ + if (base_name == filename) + return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); + + dir_name = (char *) alloca ((size_t) (base_name - filename + 2)); + /* Allocate enough space to store the dir_name + plus one extra + character sometimes needed under Windows (see below), and + then the closing \000 character. */ + strncpy (dir_name, filename, base_name - filename); + dir_name[base_name - filename] = '\000'; + +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + /* We need to be careful when filename is of the form 'd:foo', which + is equivalent of d:./foo, which is totally different from d:/foo. */ + if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':') + { + dir_name[2] = '.'; + dir_name[3] = '\000'; + } +#endif + + /* Canonicalize the directory prefix, and build the resulting + filename. If the dirname realpath already contains an ending + directory separator, avoid doubling it. */ + gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name); + const char *real_path = path_storage.get (); + if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1])) + result = concat (real_path, base_name, (char *) NULL); + else + result = concat (real_path, SLASH_STRING, base_name, (char *) NULL); + + return gdb::unique_xmalloc_ptr<char> (result); +} + +/* See common/pathstuff.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_abspath (const char *path) +{ + gdb_assert (path != NULL && path[0] != '\0'); + + if (path[0] == '~') + return gdb_tilde_expand_up (path); + + if (IS_ABSOLUTE_PATH (path)) + return gdb::unique_xmalloc_ptr<char> (xstrdup (path)); + + /* Beware the // my son, the Emacs barfs, the botch that catch... */ + return gdb::unique_xmalloc_ptr<char> + (concat (current_directory, + IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) + ? "" : SLASH_STRING, + path, (char *) NULL)); +} + +/* See common/pathstuff.h. */ + +const char * +child_path (const char *parent, const char *child) +{ + /* The child path must start with the parent path. */ + size_t parent_len = strlen (parent); + if (filename_ncmp (parent, child, parent_len) != 0) + return NULL; + + /* The parent path must be a directory and the child must contain at + least one component underneath the parent. */ + const char *child_component; + if (IS_DIR_SEPARATOR (parent[parent_len - 1])) + { + /* The parent path ends in a directory separator, so it is a + directory. The first child component starts after the common + prefix. */ + child_component = child + parent_len; + } + else + { + /* The parent path does not end in a directory separator. The + first character in the child after the common prefix must be + a directory separator. + + Note that CHILD must hold at least parent_len characters for + filename_ncmp to return zero. If the character at parent_len + is nul due to CHILD containing the same path as PARENT, the + IS_DIR_SEPARATOR check will fail here. */ + if (!IS_DIR_SEPARATOR (child[parent_len])) + return NULL; + + /* The first child component starts after the separator after the + common prefix. */ + child_component = child + parent_len + 1; + } + + /* The child must contain at least one non-separator character after + the parent. */ + while (*child_component != '\0') + { + if (!IS_DIR_SEPARATOR (*child_component)) + return child_component; + + child_component++; + } + return NULL; +} + +/* See common/pathstuff.h. */ + +bool +contains_dir_separator (const char *path) +{ + for (; *path != '\0'; path++) + { + if (IS_DIR_SEPARATOR (*path)) + return true; + } + + return false; +} + +/* See common/pathstuff.h. */ + +std::string +get_standard_cache_dir () +{ +#ifdef __APPLE__ +#define HOME_CACHE_DIR "Library/Caches" +#else +#define HOME_CACHE_DIR ".cache" +#endif + +#ifndef __APPLE__ + const char *xdg_cache_home = getenv ("XDG_CACHE_HOME"); + if (xdg_cache_home != NULL) + { + /* Make sure the path is absolute and tilde-expanded. */ + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home)); + return string_printf ("%s/gdb", abs.get ()); + } +#endif + + const char *home = getenv ("HOME"); +#ifdef _WIN32 + if (home == nullptr) + home = getenv ("APPDATA"); +#endif + if (home != NULL) + { + /* Make sure the path is absolute and tilde-expanded. */ + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home)); + return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ()); + } + + return {}; +} + +/* See common/pathstuff.h. */ + +std::string +get_standard_temp_dir () +{ +#ifdef WIN32 + const char *tmp = getenv ("TMP"); + if (tmp != nullptr) + return tmp; + + tmp = getenv ("TEMP"); + if (tmp != nullptr) + return tmp; + + error (_("Couldn't find temp dir path, both TMP and TEMP are unset.")); + +#else + const char *tmp = getenv ("TMPDIR"); + if (tmp != nullptr) + return tmp; + + return "/tmp"; +#endif +} + +/* See common/pathstuff.h. */ + +const char * +get_shell () +{ + const char *ret = getenv ("SHELL"); + if (ret == NULL) + ret = "/bin/sh"; + + return ret; +} + +/* See common/pathstuff.h. */ + +gdb::char_vector +make_temp_filename (const std::string &f) +{ + gdb::char_vector filename_temp (f.length () + 8); + strcpy (filename_temp.data (), f.c_str ()); + strcat (filename_temp.data () + f.size (), "-XXXXXX"); + return filename_temp; +} -- 2.20.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-07 6:21 ` orgads @ 2019-06-07 6:23 ` Orgad Shaneh 2019-06-07 6:27 ` Eli Zaretskii 1 sibling, 0 replies; 12+ messages in thread From: Orgad Shaneh @ 2019-06-07 6:23 UTC (permalink / raw) To: gdb-patches Oops! I mixed UNIX/Windows, and that's the result. Please ignore it. I'll post a new patch soon. - Orgad On Fri, Jun 7, 2019 at 9:21 AM <orgads@gmail.com> wrote: > > From: Orgad Shaneh <orgads@gmail.com> > > ... when not running from MSYS environment, and HOME is not set. > --- > gdb/common/pathstuff.c | 584 +++++++++++++++++++++-------------------- > 1 file changed, 294 insertions(+), 290 deletions(-) > > diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c > index 2b1669a5b9..33fa5bbb4d 100644 > --- a/gdb/common/pathstuff.c > +++ b/gdb/common/pathstuff.c > @@ -1,290 +1,294 @@ > -/* Path manipulation routines for GDB and gdbserver. > - > - Copyright (C) 1986-2019 Free Software Foundation, Inc. > - > - This file is part of GDB. > - > - 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; either version 3 of the License, or > - (at your option) any later version. > - > - 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/>. */ > - > -#include "common-defs.h" > -#include "pathstuff.h" > -#include "host-defs.h" > -#include "filenames.h" > -#include "gdb_tilde_expand.h" > - > -#ifdef USE_WIN32API > -#include <windows.h> > -#endif > - > -/* See common/pathstuff.h. */ > - > -gdb::unique_xmalloc_ptr<char> > -gdb_realpath (const char *filename) > -{ > -/* On most hosts, we rely on canonicalize_file_name to compute > - the FILENAME's realpath. > - > - But the situation is slightly more complex on Windows, due to some > - versions of GCC which were reported to generate paths where > - backlashes (the directory separator) were doubled. For instance: > - c:\\some\\double\\slashes\\dir > - ... instead of ... > - c:\some\double\slashes\dir > - Those double-slashes were getting in the way when comparing paths, > - for instance when trying to insert a breakpoint as follow: > - (gdb) b c:/some/double/slashes/dir/foo.c:4 > - No source file named c:/some/double/slashes/dir/foo.c:4. > - (gdb) b c:\some\double\slashes\dir\foo.c:4 > - No source file named c:\some\double\slashes\dir\foo.c:4. > - To prevent this from happening, we need this function to always > - strip those extra backslashes. While canonicalize_file_name does > - perform this simplification, it only works when the path is valid. > - Since the simplification would be useful even if the path is not > - valid (one can always set a breakpoint on a file, even if the file > - does not exist locally), we rely instead on GetFullPathName to > - perform the canonicalization. */ > - > -#if defined (_WIN32) > - { > - char buf[MAX_PATH]; > - DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL); > - > - /* The file system is case-insensitive but case-preserving. > - So it is important we do not lowercase the path. Otherwise, > - we might not be able to display the original casing in a given > - path. */ > - if (len > 0 && len < MAX_PATH) > - return gdb::unique_xmalloc_ptr<char> (xstrdup (buf)); > - } > -#else > - { > - char *rp = canonicalize_file_name (filename); > - > - if (rp != NULL) > - return gdb::unique_xmalloc_ptr<char> (rp); > - } > -#endif > - > - /* This system is a lost cause, just dup the buffer. */ > - return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); > -} > - > -/* See common/pathstuff.h. */ > - > -gdb::unique_xmalloc_ptr<char> > -gdb_realpath_keepfile (const char *filename) > -{ > - const char *base_name = lbasename (filename); > - char *dir_name; > - char *result; > - > - /* Extract the basename of filename, and return immediately > - a copy of filename if it does not contain any directory prefix. */ > - if (base_name == filename) > - return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); > - > - dir_name = (char *) alloca ((size_t) (base_name - filename + 2)); > - /* Allocate enough space to store the dir_name + plus one extra > - character sometimes needed under Windows (see below), and > - then the closing \000 character. */ > - strncpy (dir_name, filename, base_name - filename); > - dir_name[base_name - filename] = '\000'; > - > -#ifdef HAVE_DOS_BASED_FILE_SYSTEM > - /* We need to be careful when filename is of the form 'd:foo', which > - is equivalent of d:./foo, which is totally different from d:/foo. */ > - if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':') > - { > - dir_name[2] = '.'; > - dir_name[3] = '\000'; > - } > -#endif > - > - /* Canonicalize the directory prefix, and build the resulting > - filename. If the dirname realpath already contains an ending > - directory separator, avoid doubling it. */ > - gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name); > - const char *real_path = path_storage.get (); > - if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1])) > - result = concat (real_path, base_name, (char *) NULL); > - else > - result = concat (real_path, SLASH_STRING, base_name, (char *) NULL); > - > - return gdb::unique_xmalloc_ptr<char> (result); > -} > - > -/* See common/pathstuff.h. */ > - > -gdb::unique_xmalloc_ptr<char> > -gdb_abspath (const char *path) > -{ > - gdb_assert (path != NULL && path[0] != '\0'); > - > - if (path[0] == '~') > - return gdb_tilde_expand_up (path); > - > - if (IS_ABSOLUTE_PATH (path)) > - return gdb::unique_xmalloc_ptr<char> (xstrdup (path)); > - > - /* Beware the // my son, the Emacs barfs, the botch that catch... */ > - return gdb::unique_xmalloc_ptr<char> > - (concat (current_directory, > - IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) > - ? "" : SLASH_STRING, > - path, (char *) NULL)); > -} > - > -/* See common/pathstuff.h. */ > - > -const char * > -child_path (const char *parent, const char *child) > -{ > - /* The child path must start with the parent path. */ > - size_t parent_len = strlen (parent); > - if (filename_ncmp (parent, child, parent_len) != 0) > - return NULL; > - > - /* The parent path must be a directory and the child must contain at > - least one component underneath the parent. */ > - const char *child_component; > - if (IS_DIR_SEPARATOR (parent[parent_len - 1])) > - { > - /* The parent path ends in a directory separator, so it is a > - directory. The first child component starts after the common > - prefix. */ > - child_component = child + parent_len; > - } > - else > - { > - /* The parent path does not end in a directory separator. The > - first character in the child after the common prefix must be > - a directory separator. > - > - Note that CHILD must hold at least parent_len characters for > - filename_ncmp to return zero. If the character at parent_len > - is nul due to CHILD containing the same path as PARENT, the > - IS_DIR_SEPARATOR check will fail here. */ > - if (!IS_DIR_SEPARATOR (child[parent_len])) > - return NULL; > - > - /* The first child component starts after the separator after the > - common prefix. */ > - child_component = child + parent_len + 1; > - } > - > - /* The child must contain at least one non-separator character after > - the parent. */ > - while (*child_component != '\0') > - { > - if (!IS_DIR_SEPARATOR (*child_component)) > - return child_component; > - > - child_component++; > - } > - return NULL; > -} > - > -/* See common/pathstuff.h. */ > - > -bool > -contains_dir_separator (const char *path) > -{ > - for (; *path != '\0'; path++) > - { > - if (IS_DIR_SEPARATOR (*path)) > - return true; > - } > - > - return false; > -} > - > -/* See common/pathstuff.h. */ > - > -std::string > -get_standard_cache_dir () > -{ > -#ifdef __APPLE__ > -#define HOME_CACHE_DIR "Library/Caches" > -#else > -#define HOME_CACHE_DIR ".cache" > -#endif > - > -#ifndef __APPLE__ > - const char *xdg_cache_home = getenv ("XDG_CACHE_HOME"); > - if (xdg_cache_home != NULL) > - { > - /* Make sure the path is absolute and tilde-expanded. */ > - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home)); > - return string_printf ("%s/gdb", abs.get ()); > - } > -#endif > - > - const char *home = getenv ("HOME"); > - if (home != NULL) > - { > - /* Make sure the path is absolute and tilde-expanded. */ > - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home)); > - return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ()); > - } > - > - return {}; > -} > - > -/* See common/pathstuff.h. */ > - > -std::string > -get_standard_temp_dir () > -{ > -#ifdef WIN32 > - const char *tmp = getenv ("TMP"); > - if (tmp != nullptr) > - return tmp; > - > - tmp = getenv ("TEMP"); > - if (tmp != nullptr) > - return tmp; > - > - error (_("Couldn't find temp dir path, both TMP and TEMP are unset.")); > - > -#else > - const char *tmp = getenv ("TMPDIR"); > - if (tmp != nullptr) > - return tmp; > - > - return "/tmp"; > -#endif > -} > - > -/* See common/pathstuff.h. */ > - > -const char * > -get_shell () > -{ > - const char *ret = getenv ("SHELL"); > - if (ret == NULL) > - ret = "/bin/sh"; > - > - return ret; > -} > - > -/* See common/pathstuff.h. */ > - > -gdb::char_vector > -make_temp_filename (const std::string &f) > -{ > - gdb::char_vector filename_temp (f.length () + 8); > - strcpy (filename_temp.data (), f.c_str ()); > - strcat (filename_temp.data () + f.size (), "-XXXXXX"); > - return filename_temp; > -} > +/* Path manipulation routines for GDB and gdbserver. > + > + Copyright (C) 1986-2019 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + 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; either version 3 of the License, or > + (at your option) any later version. > + > + 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/>. */ > + > +#include "common-defs.h" > +#include "pathstuff.h" > +#include "host-defs.h" > +#include "filenames.h" > +#include "gdb_tilde_expand.h" > + > +#ifdef USE_WIN32API > +#include <windows.h> > +#endif > + > +/* See common/pathstuff.h. */ > + > +gdb::unique_xmalloc_ptr<char> > +gdb_realpath (const char *filename) > +{ > +/* On most hosts, we rely on canonicalize_file_name to compute > + the FILENAME's realpath. > + > + But the situation is slightly more complex on Windows, due to some > + versions of GCC which were reported to generate paths where > + backlashes (the directory separator) were doubled. For instance: > + c:\\some\\double\\slashes\\dir > + ... instead of ... > + c:\some\double\slashes\dir > + Those double-slashes were getting in the way when comparing paths, > + for instance when trying to insert a breakpoint as follow: > + (gdb) b c:/some/double/slashes/dir/foo.c:4 > + No source file named c:/some/double/slashes/dir/foo.c:4. > + (gdb) b c:\some\double\slashes\dir\foo.c:4 > + No source file named c:\some\double\slashes\dir\foo.c:4. > + To prevent this from happening, we need this function to always > + strip those extra backslashes. While canonicalize_file_name does > + perform this simplification, it only works when the path is valid. > + Since the simplification would be useful even if the path is not > + valid (one can always set a breakpoint on a file, even if the file > + does not exist locally), we rely instead on GetFullPathName to > + perform the canonicalization. */ > + > +#if defined (_WIN32) > + { > + char buf[MAX_PATH]; > + DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL); > + > + /* The file system is case-insensitive but case-preserving. > + So it is important we do not lowercase the path. Otherwise, > + we might not be able to display the original casing in a given > + path. */ > + if (len > 0 && len < MAX_PATH) > + return gdb::unique_xmalloc_ptr<char> (xstrdup (buf)); > + } > +#else > + { > + char *rp = canonicalize_file_name (filename); > + > + if (rp != NULL) > + return gdb::unique_xmalloc_ptr<char> (rp); > + } > +#endif > + > + /* This system is a lost cause, just dup the buffer. */ > + return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); > +} > + > +/* See common/pathstuff.h. */ > + > +gdb::unique_xmalloc_ptr<char> > +gdb_realpath_keepfile (const char *filename) > +{ > + const char *base_name = lbasename (filename); > + char *dir_name; > + char *result; > + > + /* Extract the basename of filename, and return immediately > + a copy of filename if it does not contain any directory prefix. */ > + if (base_name == filename) > + return gdb::unique_xmalloc_ptr<char> (xstrdup (filename)); > + > + dir_name = (char *) alloca ((size_t) (base_name - filename + 2)); > + /* Allocate enough space to store the dir_name + plus one extra > + character sometimes needed under Windows (see below), and > + then the closing \000 character. */ > + strncpy (dir_name, filename, base_name - filename); > + dir_name[base_name - filename] = '\000'; > + > +#ifdef HAVE_DOS_BASED_FILE_SYSTEM > + /* We need to be careful when filename is of the form 'd:foo', which > + is equivalent of d:./foo, which is totally different from d:/foo. */ > + if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':') > + { > + dir_name[2] = '.'; > + dir_name[3] = '\000'; > + } > +#endif > + > + /* Canonicalize the directory prefix, and build the resulting > + filename. If the dirname realpath already contains an ending > + directory separator, avoid doubling it. */ > + gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name); > + const char *real_path = path_storage.get (); > + if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1])) > + result = concat (real_path, base_name, (char *) NULL); > + else > + result = concat (real_path, SLASH_STRING, base_name, (char *) NULL); > + > + return gdb::unique_xmalloc_ptr<char> (result); > +} > + > +/* See common/pathstuff.h. */ > + > +gdb::unique_xmalloc_ptr<char> > +gdb_abspath (const char *path) > +{ > + gdb_assert (path != NULL && path[0] != '\0'); > + > + if (path[0] == '~') > + return gdb_tilde_expand_up (path); > + > + if (IS_ABSOLUTE_PATH (path)) > + return gdb::unique_xmalloc_ptr<char> (xstrdup (path)); > + > + /* Beware the // my son, the Emacs barfs, the botch that catch... */ > + return gdb::unique_xmalloc_ptr<char> > + (concat (current_directory, > + IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) > + ? "" : SLASH_STRING, > + path, (char *) NULL)); > +} > + > +/* See common/pathstuff.h. */ > + > +const char * > +child_path (const char *parent, const char *child) > +{ > + /* The child path must start with the parent path. */ > + size_t parent_len = strlen (parent); > + if (filename_ncmp (parent, child, parent_len) != 0) > + return NULL; > + > + /* The parent path must be a directory and the child must contain at > + least one component underneath the parent. */ > + const char *child_component; > + if (IS_DIR_SEPARATOR (parent[parent_len - 1])) > + { > + /* The parent path ends in a directory separator, so it is a > + directory. The first child component starts after the common > + prefix. */ > + child_component = child + parent_len; > + } > + else > + { > + /* The parent path does not end in a directory separator. The > + first character in the child after the common prefix must be > + a directory separator. > + > + Note that CHILD must hold at least parent_len characters for > + filename_ncmp to return zero. If the character at parent_len > + is nul due to CHILD containing the same path as PARENT, the > + IS_DIR_SEPARATOR check will fail here. */ > + if (!IS_DIR_SEPARATOR (child[parent_len])) > + return NULL; > + > + /* The first child component starts after the separator after the > + common prefix. */ > + child_component = child + parent_len + 1; > + } > + > + /* The child must contain at least one non-separator character after > + the parent. */ > + while (*child_component != '\0') > + { > + if (!IS_DIR_SEPARATOR (*child_component)) > + return child_component; > + > + child_component++; > + } > + return NULL; > +} > + > +/* See common/pathstuff.h. */ > + > +bool > +contains_dir_separator (const char *path) > +{ > + for (; *path != '\0'; path++) > + { > + if (IS_DIR_SEPARATOR (*path)) > + return true; > + } > + > + return false; > +} > + > +/* See common/pathstuff.h. */ > + > +std::string > +get_standard_cache_dir () > +{ > +#ifdef __APPLE__ > +#define HOME_CACHE_DIR "Library/Caches" > +#else > +#define HOME_CACHE_DIR ".cache" > +#endif > + > +#ifndef __APPLE__ > + const char *xdg_cache_home = getenv ("XDG_CACHE_HOME"); > + if (xdg_cache_home != NULL) > + { > + /* Make sure the path is absolute and tilde-expanded. */ > + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home)); > + return string_printf ("%s/gdb", abs.get ()); > + } > +#endif > + > + const char *home = getenv ("HOME"); > +#ifdef _WIN32 > + if (home == nullptr) > + home = getenv ("APPDATA"); > +#endif > + if (home != NULL) > + { > + /* Make sure the path is absolute and tilde-expanded. */ > + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home)); > + return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ()); > + } > + > + return {}; > +} > + > +/* See common/pathstuff.h. */ > + > +std::string > +get_standard_temp_dir () > +{ > +#ifdef WIN32 > + const char *tmp = getenv ("TMP"); > + if (tmp != nullptr) > + return tmp; > + > + tmp = getenv ("TEMP"); > + if (tmp != nullptr) > + return tmp; > + > + error (_("Couldn't find temp dir path, both TMP and TEMP are unset.")); > + > +#else > + const char *tmp = getenv ("TMPDIR"); > + if (tmp != nullptr) > + return tmp; > + > + return "/tmp"; > +#endif > +} > + > +/* See common/pathstuff.h. */ > + > +const char * > +get_shell () > +{ > + const char *ret = getenv ("SHELL"); > + if (ret == NULL) > + ret = "/bin/sh"; > + > + return ret; > +} > + > +/* See common/pathstuff.h. */ > + > +gdb::char_vector > +make_temp_filename (const std::string &f) > +{ > + gdb::char_vector filename_temp (f.length () + 8); > + strcpy (filename_temp.data (), f.c_str ()); > + strcat (filename_temp.data () + f.size (), "-XXXXXX"); > + return filename_temp; > +} > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-07 6:21 ` orgads 2019-06-07 6:23 ` Orgad Shaneh @ 2019-06-07 6:27 ` Eli Zaretskii 1 sibling, 0 replies; 12+ messages in thread From: Eli Zaretskii @ 2019-06-07 6:27 UTC (permalink / raw) To: orgads; +Cc: gdb-patches > From: orgads@gmail.com > Cc: Orgad Shaneh <orgads@gmail.com> > Date: Fri, 7 Jun 2019 09:20:49 +0300 > > From: Orgad Shaneh <orgads@gmail.com> > > ... when not running from MSYS environment, and HOME is not set. > --- > gdb/common/pathstuff.c | 584 +++++++++++++++++++++-------------------- > 1 file changed, 294 insertions(+), 290 deletions(-) Something's wrong with this patch: you delete all the lines and then add them, plus 4 more. I suspect some snafu with EOL format, which caused Git to decide that every line was different. Please double-check. Thanks. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] Fix cache dir resolving on Windows 2019-06-03 19:37 [PATCH] Fix cache dir resolving on Windows orgads 2019-06-04 14:44 ` Eli Zaretskii 2019-06-07 6:21 ` orgads @ 2019-06-07 6:27 ` orgads 2019-06-07 7:36 ` Eli Zaretskii 2019-06-07 18:10 ` Tom Tromey 2 siblings, 2 replies; 12+ messages in thread From: orgads @ 2019-06-07 6:27 UTC (permalink / raw) To: gdb-patches; +Cc: Orgad Shaneh From: Orgad Shaneh <orgads@gmail.com> ... when not running from MSYS environment, and HOME is not set. --- gdb/common/pathstuff.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c index 2b1669a5b9..59410fb61f 100644 --- a/gdb/common/pathstuff.c +++ b/gdb/common/pathstuff.c @@ -231,6 +231,10 @@ get_standard_cache_dir () #endif const char *home = getenv ("HOME"); +#ifdef _WIN32 + if (home == nullptr) + home = getenv ("APPDATA"); +#endif if (home != NULL) { /* Make sure the path is absolute and tilde-expanded. */ -- 2.20.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-07 6:27 ` orgads @ 2019-06-07 7:36 ` Eli Zaretskii 2019-06-07 8:01 ` Eli Zaretskii 2019-06-07 18:10 ` Tom Tromey 1 sibling, 1 reply; 12+ messages in thread From: Eli Zaretskii @ 2019-06-07 7:36 UTC (permalink / raw) To: orgads; +Cc: gdb-patches > From: orgads@gmail.com > Cc: Orgad Shaneh <orgads@gmail.com> > Date: Fri, 7 Jun 2019 09:27:19 +0300 > > From: Orgad Shaneh <orgads@gmail.com> > > ... when not running from MSYS environment, and HOME is not set. > --- > gdb/common/pathstuff.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c > index 2b1669a5b9..59410fb61f 100644 > --- a/gdb/common/pathstuff.c > +++ b/gdb/common/pathstuff.c > @@ -231,6 +231,10 @@ get_standard_cache_dir () > #endif > > const char *home = getenv ("HOME"); > +#ifdef _WIN32 > + if (home == nullptr) > + home = getenv ("APPDATA"); > +#endif > if (home != NULL) > { > /* Make sure the path is absolute and tilde-expanded. */ Thanks, this LGTM. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-07 7:36 ` Eli Zaretskii @ 2019-06-07 8:01 ` Eli Zaretskii [not found] ` <CAGHpTB+Y+kO=ZiKtTft3yG4mMR+27DYfqJGQWBLvu=VKCgRyLw@mail.gmail.com> 0 siblings, 1 reply; 12+ messages in thread From: Eli Zaretskii @ 2019-06-07 8:01 UTC (permalink / raw) To: orgads; +Cc: gdb-patches > Date: Fri, 07 Jun 2019 10:36:39 +0300 > From: Eli Zaretskii <eliz@gnu.org> > CC: gdb-patches@sourceware.org > > > const char *home = getenv ("HOME"); > > +#ifdef _WIN32 > > + if (home == nullptr) > > + home = getenv ("APPDATA"); > > +#endif > > if (home != NULL) > > { > > /* Make sure the path is absolute and tilde-expanded. */ > > Thanks, this LGTM. Actually, I see that we mention HOME on Windows in the manual, in a footnote that's part of the "Startup" node. I think we should document this addition there. Would you like to add a change to the manual as well? Thanks. P.S. I see that you don't have a copyright assignment on file, which means we are limited in the amount of changes we can accept from you. Would you like to start the legal paperwork of assigning to the FSF the copyright for your changes? If so, I will send you the form to fill. ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <CAGHpTB+Y+kO=ZiKtTft3yG4mMR+27DYfqJGQWBLvu=VKCgRyLw@mail.gmail.com>]
* Re: [PATCH] Fix cache dir resolving on Windows [not found] ` <CAGHpTB+Y+kO=ZiKtTft3yG4mMR+27DYfqJGQWBLvu=VKCgRyLw@mail.gmail.com> @ 2019-06-07 12:29 ` Eli Zaretskii 0 siblings, 0 replies; 12+ messages in thread From: Eli Zaretskii @ 2019-06-07 12:29 UTC (permalink / raw) To: Orgad Shaneh; +Cc: gdb-patches > From: Orgad Shaneh <orgads@gmail.com> > Date: Fri, 7 Jun 2019 11:58:45 +0300 > > On Fri, Jun 7, 2019 at 11:01 AM Eli Zaretskii <eliz@gnu.org> wrote: > > Actually, I see that we mention HOME on Windows in the manual, in a > > footnote that's part of the "Startup" node. I think we should > > document this addition there. Would you like to add a change to the > > manual as well? > > This refers to gdbinit, which probably should also be added a fallback > to APPDATA. Anyway, it is not related to this patch, which is about > the cache directory. Oh, so we probe $HOME in more than one place? Yes, I think we should do this in all of those places, preferably through a single function. > > P.S. I see that you don't have a copyright assignment on file, which > > means we are limited in the amount of changes we can accept from you. > > Would you like to start the legal paperwork of assigning to the FSF > > the copyright for your changes? If so, I will send you the form to > > fill. > > Sure. Thanks, form sent off-list. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Fix cache dir resolving on Windows 2019-06-07 6:27 ` orgads 2019-06-07 7:36 ` Eli Zaretskii @ 2019-06-07 18:10 ` Tom Tromey 1 sibling, 0 replies; 12+ messages in thread From: Tom Tromey @ 2019-06-07 18:10 UTC (permalink / raw) To: orgads; +Cc: gdb-patches >> +#ifdef _WIN32 >> + if (home == nullptr) >> + home = getenv ("APPDATA"); I think the assignment line is indented a bit too far -- should be 2 spaces over from the "if", per the GNU style. thanks, Tom ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2019-06-07 18:10 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-03 19:37 [PATCH] Fix cache dir resolving on Windows orgads
2019-06-04 14:44 ` Eli Zaretskii
2019-06-04 15:06 ` Simon Marchi
2019-06-04 16:17 ` Eli Zaretskii
2019-06-07 6:21 ` orgads
2019-06-07 6:23 ` Orgad Shaneh
2019-06-07 6:27 ` Eli Zaretskii
2019-06-07 6:27 ` orgads
2019-06-07 7:36 ` Eli Zaretskii
2019-06-07 8:01 ` Eli Zaretskii
[not found] ` <CAGHpTB+Y+kO=ZiKtTft3yG4mMR+27DYfqJGQWBLvu=VKCgRyLw@mail.gmail.com>
2019-06-07 12:29 ` Eli Zaretskii
2019-06-07 18:10 ` Tom Tromey
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox