Como posso fazer com que o 'patch' do FreeBSD tolere bytes nulos?

2

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.

    
por Janus Troelsen 17.11.2015 / 01:27

2 respostas

3

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.

    
por 17.11.2015 / 02:07
2

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.

    
por 17.11.2015 / 02:09