Pour assurer la compatibilité avec d'autres systèmes d'exploitation, les types uid[lowbar]t et gid[lowbar]t ont changé. Les types long (binaires 32 bits) et int (binaires 64 bits) ont été remplacés par le type uint32[lowbar]t. Pour plus d'informations sur cette fonction, reportez-vous à la section uid[lowbar]t and gid[lowbar]t Type Changes du document Solaris Express Developer Edition What’s New.
Voici les effets de ces modifications :
Lorsque le code est recompilé, les pratiques de développement standard doivent tenir compte des problèmes liés aux modifications des types uid[lowbar]t et gid[lowbar]t.
Les sections qui risquent de poser des problèmes sont les suivantes :
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 } |
L'avertissement suivant est généré par le compilateur Studio 11 de Sun :
"uid.c", line 8: warning: initializer does not fit or is out of range: -1" |
Les avertissements suivants sont générés par Studio 11 lint :
((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 |
|
Les avertissements suivants sont générés par gcc -Wall -Wextra :
uid.c:10: warning: comparison of unsigned expression < 0 is always false |
uid.c:15: warning: long int format, uid_t arg (arg 2) |
Les binaires C récemment compilés peuvent être mélangés à des anciens objets et à des objets système. La taille du type n'a pas changé.
La modification des types uid[lowbar]t et gid[lowbar]t a pour effet de mutiler les différents noms des fonctions et des objets C++.
A l'instar des binaires C, les binaires C++ et les bibliothèques continuent de fonctionner comme auparavant, à l'exception des bibliothèques contenant des interfaces qui utilisent uid[lowbar]t et gid[lowbar]t. Dans ce cas, les bibliothèques en question ainsi que les applications ayant recours à ces interfaces doivent être recompilées simultanément.
Comme le système d'exploitation Solaris ne présente pas les interfaces C++ de cette nature, aucune incompatibilité avec les bibliothèques Solaris n'est attendue.