rpm/debugedit-comp-dir.diff

58 lines
1.4 KiB
Diff

Include compilation directory in source file list if used.
---
tools/debugedit.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
--- tools/debugedit.c.orig 2007-04-08 22:55:58.000000000 +0200
+++ tools/debugedit.c 2007-04-09 01:34:51.000000000 +0200
@@ -488,6 +488,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;
@@ -586,6 +587,7 @@ edit_dwarf2_line (DSO *dso, uint_32 off,
}
else
{
+ comp_dir_used = 1;
memcpy (s, comp_dir, comp_dir_len);
s[comp_dir_len] = '/';
memcpy (s + comp_dir_len + 1, dirt[value], dir_len);
@@ -624,7 +626,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;