应用差异补丁

应用差异补丁

我从来没有在 Linux 中打过任何补丁,而且我无法确切地弄清楚那个人写了什么这个帖子(第二段)的意思是。该目标源qemu来自 github,要应用的更改是:

diff --git a/linux-user/flatload.c b/linux-user/flatload.c
index 58f679e..c13a201 100644
--- a/linux-user/flatload.c
+++ b/linux-user/flatload.c
@@ -44,7 +44,7 @@
 #define ntohl(x) be32_to_cpu(x)
 #include 
 
-//#define DEBUG
+#define DEBUG
 
 #ifdef DEBUG
 #define        DBG_FLT(...)    printf(__VA_ARGS__)

对我来说这看起来像是一个很长的diff命令,但尝试执行它失败了。经过一番搜索后,我虽然必须将其保存为 ieqemu.patch并使用 运行它patch,但在尝试了一些组合后也失败了。

在这种情况下,我应该如何处理上面的代码片段?

答案1

这实际上是一个很短差异命令。它说删除该行//#define DEBUG并将其替换为#define DEBUG.

在此 diff 格式中,以 single 开头的行将-被删除,并+添加以 single 开头的行。其他行用于上下文,并@@告诉文件的偏移量和引用的行数。 (三行+++ ---告诉你哪个文件被修改了。)

补丁无法应用的两个常见原因是:

  1. 实际受影响的线路已更改,或
  2. 这些行周围的上下文已经改变(可能,改变太多,因为补丁通常使用“模糊”算法。

在这种情况下,最简单的方法可能是手动查看代码部分(在文件中linux-user/flatload.c,正如您从第一行看到的那样),看看是否有任何地方被注释掉#define DEBUG,然后删除//注释字符。

我自己查看代码,发现问题实际上可能是原因#3——补丁被破坏了,因为它以不应该的方式呈现。看到刚才说的那句话了#include吗?在里面原始来源, 它说#include <target_flat.h>。您发现该补丁的博客软件可能认为这<target_flat.h>是一个可疑的 HTML 标记,并默默地将其删除,而作者没有注意到。

答案2

该补丁看起来像是使用创建的git,特别是命令git diff。所以你可能最好使用 git 工具(具体来说git apply)将其修补到目标文件上:

git apply qemu.patch

相关内容