Nach 10 Monaten der Entwicklung wurde die Standardausgabe der C-Bibliothek Musl 1.2.5 veröffentlicht, die eine Implementierung von libc bereitstellt, die für den Einsatz sowohl auf stationären PCs und Servern als auch auf mobilen Systemen geeignet ist. Sie kombiniert umfassende Unterstützung für Standards (wie in Glibc) mit kleiner Größe, geringem Ressourcenverbrauch und hoher Leistung (wie in uClibc, dietlibc und Android Bionic). Die Unterstützung aller erforderlichen Schnittstellen von C99 und POSIX 2008 sowie teilweise C11 und einem Satz von Erweiterungen für Multithreading (POSIX-Threads), Speicherverwaltung und Locale-Verwaltung ist vorhanden. Der Musl-Code wird unter der MIT-Lizenz geliefert.
Hauptänderungen:
- Die Funktion statx() wurde hinzugefügt, die sich von fstatat64 durch ein zusätzliches Flag-Argument unterscheidet. Falls der Kernel den Systemaufruf statx, der erweiterte Informationen über eine Datei zurückgibt, einschließlich der Erstellungszeit der Datei und spezifische Flags für Dateisysteme, nicht unterstützt, wird auf die Verwendung des Systemaufrufs fstatat zurückgegriffen.
- Die Funktionen preadv2() und pwritev2() wurden hinzugefügt, die eine Wrapperumgebung über den gleichnamigen Systemaufrufen des Linux-Kernels bereitstellen. Im Gegensatz zu preadv() und pwritev() unterscheiden sich die neuen Funktionen durch ein zusätzliches Argument, um dem Kernel zusätzliche Flags zu übermitteln, wie RWF_SYNC (Schreiben von Daten und Metadaten aus dem Cache auf das Medium nach Abschluss der Operation) und RWF_DSYNC (Zwangs-Flush auf das Medium nur für Daten).
- Unterstützung für die Architekturen Loongarch64 und Riscv32 wurde hinzugefügt.
- Die Implementierung der Funktion clone() wurde auf einen benutzbaren Zustand gebracht.
- In der Funktion statvfs() wird sichergestellt, dass das Ergebnis mit dem Typ f_type zurückgegeben wird.
- Für Riscv64-Systeme wurde Unterstützung für den Mechanismus TLSDESC (Thread-Local Storage Descriptor) hinzugefügt.
- Im DNS-Resolver wurde die Verarbeitung von Antworten mit langen CNAME-Sequenzen implementiert. Ein Problem wurde gelöst, bei dem einige große Antworten, die über TCP übertragen wurden, verworfen wurden.
- In den mntent-Schnittstellen wurde Unterstützung für das Escapen von Leerzeichen in Dateipfaden und -optionen hinzugefügt.
- In snprintf und swprintf wurde sichergestellt, dass die Situation beim Umgang mit Zahlen, die größer als INT_MAX sind, korrekt behandelt wird. Die Übereinstimmung mit dem Standard für die printf-Familie wurde verbessert.
Quelle: opennet.ru
