[gnome-builder/gnome-builder-42] libide/io: do not use absolete for relative path



commit a2d82aaeaf6ff463672245711da6bb1a60f84513
Author: Christian Hergert <chergert redhat com>
Date:   Mon Apr 4 12:16:18 2022 -0700

    libide/io: do not use absolete for relative path
    
    This will break when calling g_file_get_child() and so we need to handle
    it specifically before generating a relative path.
    
    Fixes #1648

 src/libide/io/ide-gfile.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)
---
diff --git a/src/libide/io/ide-gfile.c b/src/libide/io/ide-gfile.c
index 63b63ac68..a7cca987d 100644
--- a/src/libide/io/ide-gfile.c
+++ b/src/libide/io/ide-gfile.c
@@ -940,14 +940,19 @@ _ide_g_file_readlink (GFile *file)
 
       if (is_symlink (iter, &target))
         {
-          g_autoptr(GFile) parent = g_file_get_parent (iter);
-          g_autoptr(GFile) base = g_file_get_child (parent, target);
-          g_autofree gchar *relative = g_file_get_relative_path (iter, file);
-
-          if (relative == NULL)
-            return g_steal_pointer (&base);
-          else
-            return g_file_get_child (base, relative);
+          if (!g_path_is_absolute (target))
+            {
+              g_autoptr(GFile) parent = g_file_get_parent (iter);
+              g_autoptr(GFile) base = g_file_get_child (parent, target);
+              g_autofree gchar *relative = g_file_get_relative_path (iter, file);
+
+              if (relative == NULL)
+                return g_steal_pointer (&base);
+              else
+                return g_file_get_child (base, relative);
+            }
+
+          return g_file_new_for_path (target);
         }
     }
   while (iter_parents (&iter));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]