Zr Herstellung der Kompatibilität mit anderen Betriebssystemen wurden die Datentypen uid_t und gid_t von long (32-Bit-Binärdateien) und int (64-Bit-Binärdateien) in den Datentyp uint32_t geändert. Weitere Informationen zu diesem Leistungsmerkmal finden Sie in Änderung der Datentypen „uid_t“ und „gid_t“ in Neuerungen in der Solaris Express Developer Edition.
Diese Änderungen wirken sich wie folgt aus:
Bei der Neucompilierung von Code sollten Änderungen an den Datentypen uid_t und gid_t durch Standardparktiken im Entwicklungsprozess erkannt und gemeldet werden.
Dabei sollten Sie die folgenden Problembereiche berücksichtigen:
1 #include <unistd.h> 2 #include <stdlib.h> 3 #include <stdio.h> 4 5 int 6 main(void) 7 { 8 uid_t negone = -1; 9 10 if (getuid() < 0) 11 exit(1); 12 13 (void) setreuid(negone, getuid()); 14 15 (void) printf("%ld\n", getuid()); 16 17 return (0); 18 } |
Der Compiler von Sun Studio 11 gibt die folgende Warnung aus:
"uid.c", line 8: warning: initializer does not fit or is out of range: -1" |
„lint“ von Sun Studio 11 gibt die folgenden Warnungen aus:
((8) warning: constant truncated by assignment |
(8) warning: initializer will be sign-extended: -1 |
(10) warning: suspicious comparison of unsigned with 0: op "<" |
function argument ( number ) type inconsistent with format |
|
„gcc -Wall -Wextra“ gibt die folgenden Warnungen aus:
uid.c:10: warning: comparison of unsigned expression < 0 is always false |
uid.c:15: warning: long int format, uid_t arg (arg 2) |
Neu compilierte C-Binärdateien können zusammen mit vorhandenen Objekten und Systemobjekten verwendet werden, da die Datentypgröße gleich geblieben ist.
Die Änderung an den Datentypen uid_t und gid_t hat eine neue Namenskryptisierung von Funktionen und Objekten in C++ zur Folge.
Wie bei C-Binärdateien auch funktionieren C++—Binärdateien und -Bibliotheken jedoch weiterhin wie zuvor. Die einzige Ausnahme besteht bei Bibliotheken mit Schnittstellen, die die Datentypen uid_t und gid_t verwenden. In diesem Fall müssen Bibliotheken, die diese Schnittstellen enthalten, und Anwendungen, die diese Schnittstellen verwenden, gleichzeitig neu compiliert werden.
Da im Betriebssystem Solaris C++—Schnittstellen dieser Art nicht öffentlich zugänglich sind, werden keine Inkompatibilitäten mit Solaris-Bibliotheken erwartet.