Per promuovere la compatibilità con altri sistemi operativi, i tipi uid_t e gid_t sono stati trasformati da long (file binari a 32 bit) e int (file binari a 64 bit) in uint32_t. Per maggiori informazioni, vedere Modifiche ai tipi uid_t e gid_t nel manuale Nuove funzioni di Solaris Express Developer Edition.
Qui di seguito sono riportate le conseguenze di questa modifica:
Quando il codice viene ricompilato, le normali procedure di sviluppo dovrebbero essere in grado di identificare eventuali problemi legati alle modifiche al tipo di uid_t e gid_t.
Le aree problematiche da tenere in considerazione sono le seguenti:
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 } |
Il seguente avviso viene generato dal compilatore Sun Studio 11:
"uid.c", line 8: warning: initializer does not fit or is out of range: -1" |
I seguenti avvisi sono generati da lint in 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 |
|
I seguenti avvisi sono generati da 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) |
I nuovi file binari in C compilati possono utilizzati insieme ai vecchi oggetti e oggetti di sistema. La dimensione del tipo non è cambiata.
La modifica dei tipi uid_t e gid_t comporta una decorazione diversa dei nomi delle funzioni e degli oggetti C++.
Come i file binari in C, anche i file binari e le librerie in C++ funzionano correttamente come in precedenza. L'unica eccezione si verifica quando le librerie contengono interfacce che utilizzano uid_t e gid_t. In questo caso, le librerie che contengono tali interfacce e le applicazioni che utilizzano le interfacce devono essere ricompilate insieme.
Poiché il sistema operativo Solaris non espone interfacce C++ di questo tipo, non dovrebbero verificarsi incompatibilità con le librerie di Solaris.