Aplicando um patch diff

3

Eu nunca atualizei nada no Linux, e não consigo descobrir exatamente o que o cara que escreveu este post (segundo parágrafo) significa. Essa origem de destino é qemu do github e as alterações a serem aplicadas são:

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__)

Isso parece um longo comando diff para mim, mas a tentativa de executá-lo falha. Depois de alguma pesquisa, pensei que tinha que salvar isso como ie qemu.patch e executá-lo com patch , mas depois de tentar algumas combinações que também falharam.

Nesse contexto, o que devo fazer com o snippet acima?

    
por Juicy 30.09.2015 / 02:06

2 respostas

7

Este é realmente um comando muito curto diff. Ele diz para remover a linha //#define DEBUG e substituí-la por #define DEBUG .

Neste formato de comparação, as linhas que começam com um único - são removidas e aquelas com + são adicionadas. As outras linhas são para contexto e o @@ informa o deslocamento para o arquivo e o número de linhas referenciadas. (E as linhas triplas +++ --- informam qual arquivo foi modificado.)

As duas razões comuns para um patch não se aplicar são:

  1. As linhas afetadas reais foram alteradas ou
  2. O contexto em torno dessas linhas foi alterado (possivelmente, mudou demais , porque o patch geralmente usa um algoritmo "difuso".

Nesse caso, provavelmente é mais fácil examinar a seção do código manualmente (no arquivo linux-user/flatload.c , como você pode ver na primeira linha), e ver se há um #define DEBUG em qualquer lugar com comentários, e, em seguida, remova os caracteres de comentário // .

Olhando para o código eu mesmo, vejo que o problema é provavelmente a razão # 3 - o patch é mutilado porque foi renderizado de uma maneira que não deveria ser. Veja essa linha que diz apenas #include ? Na fonte original , diz #include <target_flat.h> . O software de blog em que você encontrou o patch provavelmente decidiu que <target_flat.h> é uma tag HTML suspeita e silenciosamente a excluiu, e o autor não percebeu.

    
por 30.09.2015 / 02:11
2

Este patch parece ter sido criado usando git , especificamente o comando git diff . Então você provavelmente faria bem em usar as ferramentas do git ( especificamente git apply ) para aplicá-las no alvo arquivo (s):

git apply qemu.patch
    
por 30.09.2015 / 07:07

Tags