teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone

Blame 0031-debugedit-Only-output-comp_dir-under-build-dir-once.patch

Igor Gnatenko 082d5d
From 387acd5cb74c968b4751a1c2c731964fc1ab6c3f Mon Sep 17 00:00:00 2001
Igor Gnatenko 082d5d
From: Mark Wielaard <mark@klomp.org>
Igor Gnatenko 082d5d
Date: Fri, 21 Apr 2017 17:33:26 +0200
Mark Wielaard 284dc3
Subject: [PATCH] debugedit: Only output comp_dir under build dir (once).
Mark Wielaard 968a56
Igor Gnatenko 082d5d
The fix for rhbz#444310 (commit c1a5eb - Include empty CU current dirs)
Igor Gnatenko 082d5d
was a little greedy. It would also include comp_dirs outside the build
Igor Gnatenko 082d5d
root. Those are unnecessary and we don't have a good way to store them.
Igor Gnatenko 082d5d
Such dirs (e.g. /tmp) would then show up at the root of /usr/src/debug.
Mark Wielaard 968a56
Igor Gnatenko 082d5d
Fix this by including only comp_dirs under base_dir. Also only output
Igor Gnatenko 082d5d
all dirs once (during phase zero) and don't output empty dirs (which
Igor Gnatenko 082d5d
was harmless but would produce a warning from cpio).
Igor Gnatenko 082d5d
Igor Gnatenko 082d5d
This still includes all empty dirs from the original rhbz#444310
Igor Gnatenko 082d5d
nodir testcase and it is an alternative fix for rhbz#641022
Igor Gnatenko 082d5d
(commit c707ab).
Mark Wielaard 968a56
Igor Gnatenko 082d5d
Both fixes are necessary in case of an unexpected mode for a directory
Igor Gnatenko 082d5d
actually in the build root that we want to include in the source list.
Mark Wielaard 968a56
Igor Gnatenko 082d5d
Signed-off-by: Mark Wielaard <mark@klomp.org>
Igor Gnatenko 082d5d
(cherry picked from commit e795899780337dea751d85db8f381eff3fe75275)
Igor Gnatenko 082d5d
---
Igor Gnatenko 082d5d
 tools/debugedit.c | 39 ++++++++++++++++-----------------------
Igor Gnatenko 082d5d
 1 file changed, 16 insertions(+), 23 deletions(-)
Mark Wielaard 968a56
Mark Wielaard 968a56
diff --git a/tools/debugedit.c b/tools/debugedit.c
Igor Gnatenko 082d5d
index 8444e030e..bf115136c 100644
Mark Wielaard 968a56
--- a/tools/debugedit.c
Mark Wielaard 968a56
+++ b/tools/debugedit.c
Mark Wielaard 968a56
@@ -1680,30 +1680,23 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
Mark Wielaard 968a56
   /* Ensure the CU current directory will exist even if only empty.  Source
Mark Wielaard 968a56
      filenames possibly located in its parent directories refer relatively to
Mark Wielaard 968a56
      it and the debugger (GDB) cannot safely optimize out the missing
Mark Wielaard 968a56
-     CU current dir subdirectories.  */
Mark Wielaard 968a56
-  if (comp_dir && list_file_fd != -1)
Mark Wielaard 968a56
+     CU current dir subdirectories.  Only do this once in phase one. And
Mark Wielaard 968a56
+     only do this for dirs under our build/base_dir.  Don't output the
Mark Wielaard 968a56
+     empty string (in case the comp_dir == base_dir).  */
Mark Wielaard 968a56
+  if (phase == 0 && base_dir && comp_dir && list_file_fd != -1)
Mark Wielaard 968a56
     {
Mark Wielaard 968a56
-      const char *p = NULL;
Mark Wielaard 968a56
-      size_t size;
Mark Wielaard 968a56
-
Mark Wielaard 968a56
-      if (base_dir)
Mark Wielaard 968a56
-	{
Mark Wielaard 968a56
-	  p = skip_dir_prefix (comp_dir, base_dir);
Mark Wielaard 968a56
-	  if (p == NULL && dest_dir != NULL)
Mark Wielaard 968a56
-	    p = skip_dir_prefix (comp_dir, dest_dir);
Mark Wielaard 968a56
-	}
Mark Wielaard 968a56
-
Mark Wielaard 968a56
-      if (p == NULL)
Mark Wielaard 968a56
-	p = comp_dir;
Mark Wielaard 968a56
-
Mark Wielaard 968a56
-      size = strlen (p) + 1;
Mark Wielaard 968a56
-      while (size > 0)
Mark Wielaard 968a56
-	{
Mark Wielaard 968a56
-	  ssize_t ret = write (list_file_fd, p, size);
Mark Wielaard 968a56
-	  if (ret == -1)
Mark Wielaard 968a56
-	    break;
Mark Wielaard 968a56
-	  size -= ret;
Mark Wielaard 968a56
-	  p += ret;
Mark Wielaard 968a56
+      const char *p = skip_dir_prefix (comp_dir, base_dir);
Mark Wielaard 968a56
+      if (p != NULL && p[0] != '\0')
Mark Wielaard 968a56
+        {
Mark Wielaard 968a56
+	  size_t size = strlen (p) + 1;
Mark Wielaard 968a56
+	  while (size > 0)
Mark Wielaard 968a56
+	    {
Mark Wielaard 968a56
+	      ssize_t ret = write (list_file_fd, p, size);
Mark Wielaard 968a56
+	      if (ret == -1)
Mark Wielaard 968a56
+		break;
Mark Wielaard 968a56
+	      size -= ret;
Mark Wielaard 968a56
+	      p += ret;
Mark Wielaard 968a56
+	    }
Mark Wielaard 968a56
 	}
Mark Wielaard 968a56
     }
Mark Wielaard 968a56