Gibt es einen Quellcode für den Patch-Befehl in Linux?

Gibt es einen Quellcode für den Patch-Befehl in Linux?

Ich suche nach einem Quellcode für den in Linux verwendeten Patch-Befehl. Weiß jemand, ob es einen gibt?

Ich suche etwas, das mit POSIX oder genauer gesagt mit QNX v7 kompatibel ist.

Antwort1

Es gibt mehrere Implementierungen von patchcommand in freier Wildbahn, busyboxzum Beispiel wird es mit einer eigenen geliefert. Sie suchen wahrscheinlich nach dem Quellcode, patchder mit Ihrem System geliefert wird. Um den Quellcode zu finden, müssen Sie wissen, wonach Sie suchen. Sie müssen prüfen, welches Paket patchcommand bereitstellt und wo sich der Upstream befindet. Sie haben nicht angegeben, welches Betriebssystem Sie verwenden, aber unter Debian können Sie Folgendes tun:

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]>

Und auf Slackware zum Beispiel:

$ 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:

In beiden Fällen wird der GNU-Patch verwendet und die Debian-Paketbeschreibung enthält sogar einen Link zur Homepage des Projekts http://savannah.gnu.org/projects/patchaber im Moment funktioniert es nicht.

Möglicherweise möchten Sie auch den Quellcode Ihres patchaktuell auf Ihrem System verwendeten Systems mit allen Patches und Kommentaren der Paketbetreuer abrufen. Unter Debian können Sie Folgendes tun:

$ apt-get source patch

Antwort2

Der Standardbefehl patchfür mindestensDebian(aber vermutlich auch auf den meisten anderen Linux-Distributionen) ist GNU patch.

Die GNU patchProjekt "Homepage" isthttps://www.gnu.org/software/patch/

Diese Seite enthält Links zu beidenSoftware-RepositorysUndherunterladbare Distributionsarchive.

Ein Github-Spiegel des Software-Repository ist verfügbar unterhttps://github.com/mirror/patch

BSD-Systeme haben eine alternative Implementierung. Die OpenBSD-Implementierung finden Sie unterhttps://cvsweb.openbsd.org/src/usr.bin/patch/

Antwort3

Wenn Sie Linux verwenden, verwenden Sie höchstwahrscheinlich den GNU-Patch. Siehehttp://www.gnu.org, patchhat aber eine lange Geschichte und existiert in mehr als nur einer Variante:

patchist ein Programm, das ursprünglich im Mai 1985 von Larry Wall geschrieben wurde. Er hat den Quellcode für Version 1.3 im Shar-Format in der Usenet-Newsgroup gepostetmod.sources.

Version 2.0 wurde 1986 von Larry Wall in einem Post veröffentlicht comp.sources.unix(wie mod.sourceses später umbenannt wurde) und die neueste Version von Larry Wall wurde im Juni 1988 erstellt.

Die ursprüngliche Lizenz von Larry lautete:

* 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.

Dies steht nicht im Einklang mit den heutigen Vorstellungen von OSS, da es nicht möglich ist, damit „Geld zu verdienen“.

Da ein so komplexes Programm patchAufmerksamkeit erfordert, gibt es mehrere abgeleitete Versionen.

Die Leute von GNU haben 1990 eine GPLd-Version herausgebracht, aber meines Wissens nach wurde nie überprüft, ob Larry dieser Lizenzänderung tatsächlich zugestimmt hat.

In den 1990er Jahren wurde eine Closed-Source-Version von IBM, HP, DEC und Sun erstellt. Sie wurde POSIX-kompatibel gemacht, hat jedoch nie alle bekannten Fehler behoben.

Vor ca. 10 Jahren wurden von OpenBSD und von mir Varianten ohne GPLd-Code erstellt.

Vor ungefähr 5 Jahren gab Larry den Leuten von OpenBSD und mir die Erlaubnis, die 1-Klausel-BSD-Lizenz zu verwenden, um Patches OSS-kompatibel zu machen.

Während zwischen den BSD-Leuten und mir eine Art Austausch bezüglich Fehlern und Sicherheitsproblemen besteht, ist die GNU-Version separat.

Die Version in schilytoolsenthält eine aufwändige Testsuite für Patches und vergleicht die Ergebnisse mit den erwarteten Ergebnissen und mit den Ergebnissen der lokal installierten Version. Da es sich dabei (in vielen Fällen um gpatch) handelt, muss es jedes Mal, wenn es einen Fehler in der systeminstallierten Version erkennt, einige Workarounds einbinden ,-)

Die Manpage für die Schilytools-Version finden Sie hier:http://schilytools.sourceforge.net/man/man1/patch.1.html

Da der OP an QNX interessiert ist, ist der OpenBSD-Quellcode für ihn nicht von Interesse, da dieser nicht portierbar ist. Die Schilytools sind hochgradig portierbar, auch wenn das letzte Feedback zu einer QNX-Kompilierung schon länger her ist. Wenn es also nicht mehr unter QNX kompiliert, senden Sie einen Hinweis.

Übrigens: Der GNU-Patch steht im Konflikt mit einigen Anforderungen von POSIX.

verwandte Informationen