File debugedit-comp-dir.diff of Package rpm

Include compilation directory in source file list if used.

---
 tools/debugedit.c |   28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

Index: tools/debugedit.c
===================================================================
--- tools/debugedit.c.orig
+++ tools/debugedit.c
@@ -492,6 +492,7 @@ edit_dwarf2_line (DSO *dso, uint_32 off,
   uint_32 value, dirt_cnt;
   size_t comp_dir_len = strlen (comp_dir);
   size_t abs_file_cnt = 0, abs_dir_cnt = 0;
+  int comp_dir_used = 0;
 
   if (phase != 0)
     return 0;
@@ -600,6 +601,7 @@ edit_dwarf2_line (DSO *dso, uint_32 off,
 	  memcpy (p, dirt[value], dir_len);
 	  p[dir_len] = '/';
 	  memcpy (p + dir_len + 1, file, file_len + 1);
+	  comp_dir_used = 1;
 	}
       canonicalize_path (s, s);
       if (list_file_fd != -1)
@@ -632,7 +634,31 @@ edit_dwarf2_line (DSO *dso, uint_32 off,
       read_uleb128 (ptr);
     }
   ++ptr;
-  
+
+  if (comp_dir_used && list_file_fd != -1
+      && (base_dir == NULL || has_prefix (comp_dir, base_dir)))
+    {
+      char *p;
+      size_t size;
+      ssize_t ret;
+
+      size = comp_dir_len + 1;
+      p = comp_dir;
+      if (base_dir)
+	{
+	  p += strlen (base_dir);
+	  size -= strlen (base_dir);
+	}
+      while (size > 0)
+	{
+	  ret = write (list_file_fd, p, size);
+	  if (ret == -1)
+	    break;
+	  size -= ret;
+	  p += ret;
+	}
+    }
+
   if (dest_dir)
     {
       unsigned char *srcptr, *buf = NULL;
openSUSE Build Service is sponsored by