Existe um código-fonte disponível para o comando patch no Linux?

Existe um código-fonte disponível para o comando patch no Linux?

Estou procurando um código-fonte para o comando patch usado no Linux. Alguém sabe se existe algum disponível?

Estou procurando algo que seja compatível com POSIX ou mais especificamente com QNX v7.

Responder1

Existem várias implementações de patchcomando disponíveis, busyboxpor exemplo, vem com o seu próprio. Você provavelmente está procurando o código-fonte do patchseu sistema. Para encontrar o código-fonte você precisa saber o que está procurando. Você precisa verificar qual pacote fornece patcho comando e onde está o upstream. Você não especificou qual sistema operacional usa, mas no Debian você pode fazer:

root@64ee32ea5ee6:/# dpkg -S "$(command -v patch)"
patch: /usr/bin/patch
root@64ee32ea5ee6:/# dpkg -s patch
Package: patch
Status: install ok installed
Priority: standard
Section: vcs
Installed-Size: 238
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Version: 2.7.6-2ubuntu1.1
Depends: libc6 (>= 2.17)
Suggests: ed, diffutils-doc
Description: Apply a diff file to an original
 Patch will take a patch file containing any of the four forms
 of difference listing produced by the diff program and apply
 those differences to an original file, producing a patched
 version.
Homepage: http://savannah.gnu.org/projects/patch/
Original-Maintainer: Laszlo Boszormenyi (GCS) <[email protected]>

E no Slackware, por exemplo:

$ grep $(sed 's,^/,,' <<< "$(command -v patch)" ) /var/log/packages/* | cut -d: -f1
/var/log/packages/metamail-2.7-x86_64-7
/var/log/packages/patch-2.7.6-x86_64-3
/var/log/packages/patchelf-0.10-x86_64-1
$ cat /var/log/packages/patch-2.7.6-x86_64-3
PACKAGE NAME:     patch-2.7.6-x86_64-3
COMPRESSED PACKAGE SIZE:     116K
UNCOMPRESSED PACKAGE SIZE:     290K
PACKAGE LOCATION: ./patch-2.7.6-x86_64-3.txz
PACKAGE DESCRIPTION:
patch: patch (apply a diff file to an original file or files)
patch:
patch: Patch is a utility used to apply diffs (or patches) to files, which
patch: are usually source code.
patch:
patch: Larry Wall wrote the original version of patch. Paul Eggert removed
patch: patch's arbitrary limits; added support for binary files, setting
patch: file times, and deleting files; and made it conform better to POSIX.
patch: Other  contributors include Wayne Davison, who added unidiff support,
patch: and David MacKenzie, who added configuration and backup support.
patch:

Em ambos os casos o patch GNU é usado e a descrição do pacote Debian contém até um link para a página inicial do projeto http://savannah.gnu.org/projects/patchmas não está funcionando no momento.

Também é possível que você queira obter o código-fonte que patchvocê usa atualmente em seu sistema com todos os patches e comentários adicionados pelos mantenedores do pacote. No Debian você pode fazer:

$ apt-get source patch

Responder2

O patchcomando padrão em pelo menosDebian(mas presumivelmente também na maioria das outras distribuições Linux) é GNU patch.

A patch"página inicial" do projeto GNU éhttps://www.gnu.org/software/patch/

Esta página contém links para ambosrepositórios de softwareearquivos de distribuição para download.

Um espelho Github do repositório de software está disponível emhttps://github.com/mirror/patch

Os sistemas BSD têm uma implementação alternativa. A implementação do OpenBSD pode ser visualizada emhttps://cvsweb.openbsd.org/src/usr.bin/patch/

Responder3

Se você estiver no Linux, provavelmente usará o patch GNU, consultehttp://www.gnu.org, mas patchtem uma longa história e existe em mais de uma variante:

patché um programa originalmente escrito por Larry Wall em maio de 1985. Ele postou a fonte da versão 1.3 em formato shar no grupo de notícias Usenetmod.sources.

A versão 2.0 foi publicada em 1986 por Larry Wall por meio de um post para comp.sources.unix( mod.sourcesmais tarde renomeado) e a versão mais recente de Larry Wall foi feita em junho de 1988.

A licença original de Larry era:

* This program may be copied as long as you don't try to make any
* money off of it, or pretend that you wrote it.

o que não está alinhado com as ideias atuais de OSS, uma vez que proíbe "ganhar dinheiro" com ele.

Como um programa tão complexo patchprecisa de atenção, existem diversas versões derivadas.

O pessoal do GNU criou uma versão GPLd em 1990, mas a AFAIK nunca verificou se Larry deu seu OK para essa mudança de licença.

Uma versão de código fechado da IBM, HP, DEC e Sun foi criada na década de 1990. Foi compatível com POSIX, mas nunca corrigiu todos os bugs conhecidos.

Aproximadamente. Há 10 anos, variantes sem código GPLd foram criadas pelo OpenBSD e por mim.

Aproximadamente. 5 anos atrás, Larry deu permissão ao pessoal do OpenBSD e a mim para usar a licença BSD de 1 cláusula para tornar o patch compatível com OSS.

Embora haja algum tipo de troca entre o pessoal do BSD e eu em relação a bugs e problemas de segurança, a versão GNU é separada.

A versão schilytoolsinclui um conjunto de testes caro para patch e compara os resultados com os resultados esperados e com os resultados da versão instalada localmente. Como este é (em muitos casos gpatch), ele precisa incluir algumas soluções alternativas sempre que detectar um bug na versão instalada do sistema ,-)

A página de manual da versão schilytools pode ser encontrada aqui:http://schilytools.sourceforge.net/man/man1/patch.1.html

Dado que o OP está interessado no QNX, a fonte do OpenBSD não é do seu interesse, uma vez que essa fonte não é portátil. Os schilytools são altamente portáteis, embora já tenha passado mais tempo desde o último feedback de uma compilação QNX. Então se não compilar mais no QNX, mande uma dica.

BTW: O patch GNU está em conflito com alguns dos requisitos do POSIX.

informação relacionada