Para favorecer la compatibilidad con otros sistemas operativos, se han cambiado los tipos uid[lowbar]t y gid[lowbar]t de long (binarios de 32 bits) e int (binarios de 64 bits) al tipo uint32[lowbar]t. Si desea más información sobre esta función, consulte Cambios en los tipos uid[lowbar]t y gid[lowbar]t de Novedades de Solaris Express Developer Edition.
A continuación puede ver las consecuencias de estos cambios:
Cuando se vuelve a compilar el código, las prácticas de desarrollo estándar deben detectar cualquier problema provocado por los cambios en los tipos uid[lowbar]t y gid[lowbar]t.
Las áreas de problemas que se deben controlar son:
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 } |
El compilador Studio 11 de Sun genera la advertencia siguiente:
"uid.c", line 8: warning: initializer does not fit or is out of range: -1" |
Studio 11 lint genera las advertencias siguientes:
((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 genera las advertencias siguientes:
uid.c:10: warning: comparison of unsigned expression < 0 is always false |
uid.c:15: warning: long int format, uid_t arg (arg 2) |
Los binarios C recién compilados se pueden mezclar con objetos del sistema y objetos antiguos. El tamaño del tipo no ha cambiado.
El cambio en los tipos uid[lowbar]t y gid[lowbar]t provoca diversos problemas en los nombres de los objetos y las funciones de C++.
Al igual que ocurre con los binarios C, las bibliotecas y los binarios C++ continúan funcionando al igual que antes. La excepción se produce cuando las bibliotecas contienen interfaces que utilizan uid[lowbar]t y gid[lowbar]t. En esta instancia, las bibliotecas que contienen estas interfaces y las aplicaciones que utilizan estas interfaces se deben compilar de nuevo al mismo tiempo.
Debido a que el sistema operativo Solaris no expone interfaces de C++ de esta naturaleza, no se esperan incompatibilidades con las bibliotecas de Solaris.