[glib] g_get_current_dir(): consult PWD first
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] g_get_current_dir(): consult PWD first
- Date: Mon, 9 Dec 2013 17:10:21 +0000 (UTC)
commit a22f77739dd4ec911d7bdc0f0fc61314e5f9f1cf
Author: Ryan Lortie <desrt desrt ca>
Date: Sun Dec 8 18:18:16 2013 -0500
g_get_current_dir(): consult PWD first
Check if the current directory is the same as $PWD. This matches the
behaviour of the get_current_dir_name() function in glibc.
https://bugzilla.gnome.org/show_bug.cgi?id=705902
glib/gfileutils.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
---
diff --git a/glib/gfileutils.c b/glib/gfileutils.c
index 0db964a..6a8d194 100644
--- a/glib/gfileutils.c
+++ b/glib/gfileutils.c
@@ -2451,6 +2451,11 @@ g_path_get_dirname (const gchar *file_name)
* The encoding of the returned string is system defined.
* On Windows, it is always UTF-8.
*
+ * Since GLib 2.40, this function will return the value of the "PWD"
+ * environment variable if it is set and it happens to be the same as
+ * the current directory. This can make a difference in the case that
+ * the current directory is the target of a symbolic link.
+ *
* Returns: the current directory
*/
gchar *
@@ -2476,10 +2481,17 @@ g_get_current_dir (void)
return dir;
#else
-
+ const gchar *pwd;
gchar *buffer = NULL;
gchar *dir = NULL;
static gulong max_len = 0;
+ struct stat pwdbuf, dotbuf;
+
+ pwd = g_getenv ("PWD");
+ if (pwd != NULL &&
+ g_stat (".", &dotbuf) == 0 && g_stat (pwd, &pwdbuf) == 0 &&
+ dotbuf.st_dev == pwdbuf.st_dev && dotbuf.st_ino == pwdbuf.st_ino)
+ return g_strdup (pwd);
if (max_len == 0)
max_len = (G_PATH_LENGTH == -1) ? 2048 : G_PATH_LENGTH;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]