patch
é projetado para arquivos de texto. Dê uma olhada em xxd
, que pode corrigir arquivos binários. Ele deve estar disponível para o FreeBSD também.
O patch da linha final falha no FreeBSD 10.2, mas funciona no GNU:
#!/bin/sh
echo a > f1
printf '#!/bin/sh
echo a > f1
printf '%pre%' >> f1
echo c >> f1
cp f1 f2
echo d >> f2
diff -au f1 f2 > diff
patch < diff
' >> f1
echo c >> f1
cp f1 f2
echo d >> f2
diff -au f1 f2 > diff
patch < diff
O FreeBSD é incapaz disso? A página man não menciona bytes nulos.
patch
é projetado para arquivos de texto. Dê uma olhada em xxd
, que pode corrigir arquivos binários. Ele deve estar disponível para o FreeBSD também.
Não é uma limitação incomum, pois os bytes nulos não são usados em arquivos de texto. É claro que existe uma porta do FreeBSD para o patch GNU.
Para o contexto, apenas olhando as páginas de manual do FreeBSD:
Tanto o patch GNU quanto o patch do FreeBSD se originaram do programa de correção de Larry Wall, mas o primeiro teve mudanças mais extensas. Em particular, o patch GNU foi estendido para lidar com os nulos incorporados que podem ser produzidos pelo diff do GNU. Ainda assim, mesmo que foi feito há um tempo atrás ( por volta de 1992 de acordo com o changelog ).
Por alguma razão, os desenvolvedores do FreeBSD não incorporaram essa mudança. Se você precisar do recurso no FreeBSD, você pode usar a porta (ou pacote pré-compilado) do patch GNU. Consulte FreshPorts para obter um resumo.