Notas de vers??o do Solaris Express Developer Edition

Alterações nos tipos uid[lowbar]t e gid[lowbar]t no Developer 9/07

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:

Impacto sobre binários C recém-compilados:

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 }

Observação –

Binários C recém-compilados podem ser entremesclados com objetos antigos e objetos de sistema. O tamanho do tipo não foi alterado.


Impacto sobre o código C++.

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.