¿Cómo puedo get FreeBSD `patch` para tolerar bytes nulos?

El parche de la línea final falla en FreeBSD 10.2, pero funciona en GNU:

#!/bin/sh echo a > f1 printf '\0' >> f1 echo c >> f1 cp f1 f2 echo d >> f2 diff -au f1 f2 > diff patch < diff 

¿FreeBSD es incapaz de esto? La página man no menciona los bytes nulos.

patch está diseñado para files de text. Eche un vistazo a xxd , que puede parchear files binarys. Debería estar disponible para FreeBSD también.

No es una limitación poco común, ya que los bytes nulos no se usan en los files de text. Por supuesto, hay un puerto FreeBSD para el parche GNU.

Para el context, simplemente mirando las páginas del manual para FreeBSD:

  • esto es GNU diff , de acuerdo con el repository fuente , y en realidad es un poco viejo ( 8 años ).
  • esto no es un parche de GNU , de nuevo acordando con el repository fuente .

Tanto el parche de GNU como el parche de FreeBSD se originaron con el progtwig de parches de Larry Wall, pero el primero tuvo cambios más extensos. En particular, el parche GNU se extendió para manejar los nulos incorporados que podrían ser emitidos por GNU diff. Aún así, incluso eso se hizo hace bastante time ( alnetworkingedor de 1992 según el logging de cambios ).

Por alguna razón, los desarrolladores de FreeBSD no incorporaron este cambio. Si necesita la característica en FreeBSD, puede usar el puerto (o package precomstackdo) del parche GNU. Vea FreshPorts para un resumen.