Diff

應用差異更新檔

  • September 30, 2015

我從未在 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,但是在嘗試了一些失敗的組合之後。

在這種情況下,我應該如何處理上面的程式碼片段?

這實際上是一個非常短的diff 命令。它說要刪除該行//#define DEBUG並將其替換為#define DEBUG.

在這種差異格式中,以 single 開頭的行將-被刪除,而以 single 開頭的行會+被添加。其他行用於上下文,並@@告訴文件中的偏移量和引用的行數。(+++ ---三行告訴你哪個文件被修改了。)

更新檔無法應用的兩個常見原因是:

  1. 實際受影響的行已更改,或
  2. 這些行周圍的上下文已經改變(可能改變了太多,因為更新檔通常使用“模糊”算法。

在這種情況下,最簡單的方法可能是手動查看程式碼部分(在linux-user/flatload.c文件中,正如您從第一行看到的那樣),看看是否有#define DEBUG任何地方被註釋掉,然後刪除//註釋字元。

親自查看程式碼,我發現問題實際上可能是原因 #3 — 更新檔被破壞了,因為它以不應該的方式呈現。看到剛才說的那一行了#include嗎?在原始來源中,它說#include <target_flat.h>。你發現更新檔的部落格軟體可能認為這<target_flat.h>是一個可疑的 HTML 標籤,然後默默地刪除了它,而作者沒有註意到。

引用自:https://unix.stackexchange.com/questions/232879