Para propiciar a compatibilidade com outros sistemas operacionais, os tipos uid[lowbar]t e gid[lowbar]t foram alterados de long (binários de 32 bits) e int (binários de 64 bits) para o tipo uint32[lowbar]t. Para obter mais informações sobre este recurso, consulte Alterações dos tipos uid[lowbar]t e gid[lowbar]t no O que há de novo no Solaris Express Developer Edition.
Seguem-se as conseqüências destas alterações:
Quando o código é recompilado, as práticas de desenvolvimento padrão devem identificar quaisquer problemas causados por alterações no tipo uid[lowbar]t e gid[lowbar]t.
Entre as áreas com problemas a que se deve atentar estão:
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 } |
O seguinte aviso é gerado pelo compilador Studio 11 da Sun:
"uid.c", line 8: warning: initializer does not fit or is out of range: -1" |
Os seguintes avisos são gerados pelo lint do Studio 11:
((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 |
|
Os seguintes avisos são gerados por 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) |
Binários C recém-compilados podem ser entremesclados com objetos antigos e objetos de sistema. O tamanho do tipo não foi alterado.
A alteração no tipo uid[lowbar]t e gid[lowbar]t resulta em diferente desconfiguração de nome para as funções de C++ e objetos.
Como no caso de binários C, binários e bibliotecas de C++ continuam a funcionar como antes. A exceção é quando as bibliotecas contêm interfaces que usam uid[lowbar]t e gid[lowbar]t. Neste caso, as bibliotecas que contêm estas interfaces, e os aplicativos que usam estas interfaces, precisam ser recompiladas ao mesmo tempo.
Uma vez que o Solaris OS não expõe interfaces de C++ desta natureza, não se espera qualquer incompatibilidade com as bibliotecas do Solaris.