Aplicando un parche diff

Nunca he parchado nada en Linux, y no puedo entender exactamente qué significa el tipo que escribió esta publicación (segundo párrafo). Esa fuente de destino es qemu de github y los cambios para aplicar son:

 diff --git a/linux-user/flatload.cb/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__) 

Esto parece un command diff largo para mí, pero al intentar ejecutarlo falla. Después de algunas búsquedas, pensé que tenía que save eso como ie qemu.patch y ejecutarlo con patch , pero después de probar algunas combinaciones también fallaron.

En este context, ¿qué se supone que debo hacer con el fragment de arriba?

Este es realmente un command diff muy corto . Dice que eliminar la línea //#define DEBUG y la reemplaza con #define DEBUG .

En este formatting de diferencias, se eliminan las líneas que comienzan con una sola y se agregan las que tienen + . Las otras líneas son para el context, y @@ dice el desplazamiento en el file y la cantidad de líneas a las que se hace reference. (Y las líneas triples +++ --- dicen qué file se modificó).

Las dos razones más comunes para que un parche no se aplique son:

  1. Las líneas afectadas realmente han cambiado, o
  2. El context alnetworkingedor de esas líneas ha cambiado (posiblemente, haya cambiado demasiado , porque el parche usualmente usa un algorithm "difuso").

En este caso, probablemente sea más fácil mirar la sección de código a mano (en el file linux-user/flatload.c , como puede ver en la primera línea), y ver si hay un #define DEBUG cualquier lugar , y luego eliminar los // caracteres de comentario.

Si miro el código yo mismo, veo que probablemente el problema sea realmente el motivo # 3: el parche está destrozado porque se ha procesado de una manera que no se suponía que fuera. ¿Ves esa línea que acaba de decir #include ? En la fuente original , dice #include <target_flat.h> . El software del blog donde encontraste el parche probablemente decidió que <target_flat.h> es una label HTML sospechosa y la eliminó en silencio, y el autor no se dio count.

Este parche parece haber sido creado usando git , específicamente el command git diff . Así que probablemente harías bien en usar las herramientas git ( específicamente git apply ) para git apply parche al file (s) de destino:

 git apply qemu.patch