pcsc-lite 1.5.5
|
00001 #include <stdio.h> 00002 #include <sys/types.h> 00003 #include <sys/wait.h> 00004 #include <stddef.h> 00005 00006 #include "PCSC/pcsclite.h" 00007 #include "pcscd.h" 00008 #include "winscard_msg.h" 00009 #include "readerfactory.h" 00010 #include "eventhandler.h" 00011 00012 #define BLANK_LINE() \ 00013 do { \ 00014 printf("\n"); \ 00015 } while(0) 00016 00017 #define COMMENT(c) \ 00018 do { \ 00019 printf(" /* "c" */\n"); \ 00020 } while(0) 00021 00022 #define STRINGIFY(a) #a 00023 00024 00025 #define CHECK_CDEFINE(a) \ 00026 printf(" CLASSERT("#a" == "STRINGIFY(a) ");\n") 00027 00028 #define CHECK_CVALUE(a) \ 00029 printf(" CLASSERT("#a" == %lld);\n", (long long)a) 00030 00031 #define CHECK_DEFINE(a) \ 00032 do { \ 00033 printf(" LASSERTF("#a" == "STRINGIFY(a) \ 00034 ",\" found %%lld\\n\",\n " \ 00035 "(long long)"#a");\n"); \ 00036 } while(0) 00037 00038 #define CHECK_VALUE(a) \ 00039 do { \ 00040 printf(" LASSERTF("#a \ 00041 " == %lld, \" found %%lld\\n\",\n "\ 00042 "(long long)"#a");\n", (long long)a); \ 00043 } while(0) 00044 00045 #define CHECK_VALUE_64(a) \ 00046 do { \ 00047 printf(" LASSERTF("#a \ 00048 " == %lldULL, \" found %%lld\\n\",\n "\ 00049 "(long long)"#a");\n", (long long)a); \ 00050 } while(0) 00051 00052 #define CHECK_MEMBER_OFFSET(s,m) \ 00053 do { \ 00054 CHECK_VALUE((int)offsetof(struct s, m)); \ 00055 } while(0) 00056 00057 #define CHECK_MEMBER_SIZEOF(s,m) \ 00058 do { \ 00059 CHECK_VALUE((int)sizeof(((struct s *)0)->m)); \ 00060 } while(0) 00061 00062 #define CHECK_MEMBER(s,m) \ 00063 do { \ 00064 CHECK_MEMBER_OFFSET(s, m); \ 00065 CHECK_MEMBER_SIZEOF(s, m); \ 00066 } while(0) 00067 00068 #define CHECK_STRUCT(s) \ 00069 do { \ 00070 COMMENT("Checks for struct "#s); \ 00071 CHECK_VALUE((int)sizeof(struct s)); \ 00072 } while(0) 00073 00074 static void 00075 check_constants (void) 00076 { 00077 COMMENT ("Constants..."); 00078 00079 BLANK_LINE (); 00080 CHECK_DEFINE (PROTOCOL_VERSION_MAJOR); 00081 CHECK_DEFINE (PROTOCOL_VERSION_MINOR); 00082 00083 BLANK_LINE (); 00084 CHECK_DEFINE (PCSCLITE_MSG_KEY_LEN); 00085 CHECK_DEFINE (PCSCLITE_MAX_MESSAGE_SIZE); 00086 00087 BLANK_LINE (); 00088 CHECK_DEFINE (MAX_READERNAME); 00089 CHECK_DEFINE (MAX_ATR_SIZE); 00090 CHECK_DEFINE (MAX_BUFFER_SIZE); 00091 00092 BLANK_LINE (); 00093 COMMENT ("enum pcsc_adm_commands"); 00094 CHECK_VALUE (CMD_FUNCTION); 00095 CHECK_VALUE (CMD_FAILED); 00096 CHECK_VALUE (CMD_SERVER_DIED); 00097 CHECK_VALUE (CMD_CLIENT_DIED); 00098 CHECK_VALUE (CMD_READER_EVENT); 00099 CHECK_VALUE (CMD_SYN); 00100 CHECK_VALUE (CMD_ACK); 00101 CHECK_VALUE (CMD_VERSION); 00102 00103 BLANK_LINE (); 00104 COMMENT ("enum pcsc_msg_commands"); 00105 CHECK_VALUE (SCARD_ESTABLISH_CONTEXT); 00106 CHECK_VALUE (SCARD_RELEASE_CONTEXT); 00107 CHECK_VALUE (SCARD_LIST_READERS); 00108 CHECK_VALUE (SCARD_CONNECT); 00109 CHECK_VALUE (SCARD_RECONNECT); 00110 CHECK_VALUE (SCARD_DISCONNECT); 00111 CHECK_VALUE (SCARD_BEGIN_TRANSACTION); 00112 CHECK_VALUE (SCARD_END_TRANSACTION); 00113 CHECK_VALUE (SCARD_TRANSMIT); 00114 CHECK_VALUE (SCARD_CONTROL); 00115 CHECK_VALUE (SCARD_STATUS); 00116 CHECK_VALUE (SCARD_GET_STATUS_CHANGE); 00117 CHECK_VALUE (SCARD_CANCEL); 00118 CHECK_VALUE (SCARD_CANCEL_TRANSACTION); 00119 CHECK_VALUE (SCARD_GET_ATTRIB); 00120 CHECK_VALUE (SCARD_SET_ATTRIB); 00121 } 00122 00123 static void 00124 check_types (void) 00125 { 00126 COMMENT ("Types..."); 00127 00128 BLANK_LINE (); 00129 CHECK_STRUCT (rxSharedSegment); 00130 CHECK_MEMBER (rxSharedSegment, mtype); 00131 CHECK_MEMBER (rxSharedSegment, user_id); 00132 CHECK_MEMBER (rxSharedSegment, group_id); 00133 CHECK_MEMBER (rxSharedSegment, command); 00134 CHECK_MEMBER (rxSharedSegment, date); 00135 CHECK_MEMBER (rxSharedSegment, key); 00136 CHECK_MEMBER (rxSharedSegment, data); 00137 00138 BLANK_LINE (); 00139 CHECK_STRUCT (version_struct); 00140 CHECK_MEMBER (version_struct, major); 00141 CHECK_MEMBER (version_struct, minor); 00142 CHECK_MEMBER (version_struct, rv); 00143 00144 BLANK_LINE (); 00145 CHECK_STRUCT (client_struct); 00146 CHECK_MEMBER (client_struct, hContext); 00147 00148 BLANK_LINE (); 00149 CHECK_STRUCT (establish_struct); 00150 CHECK_MEMBER (establish_struct, dwScope); 00151 CHECK_MEMBER (establish_struct, hContext); 00152 CHECK_MEMBER (establish_struct, rv); 00153 00154 BLANK_LINE (); 00155 CHECK_STRUCT (release_struct); 00156 CHECK_MEMBER (release_struct, hContext); 00157 CHECK_MEMBER (release_struct, rv); 00158 00159 BLANK_LINE (); 00160 CHECK_STRUCT (connect_struct); 00161 CHECK_MEMBER (connect_struct, hContext); 00162 CHECK_MEMBER (connect_struct, szReader); 00163 CHECK_MEMBER (connect_struct, dwShareMode); 00164 CHECK_MEMBER (connect_struct, dwPreferredProtocols); 00165 CHECK_MEMBER (connect_struct, hCard); 00166 CHECK_MEMBER (connect_struct, dwActiveProtocol); 00167 CHECK_MEMBER (connect_struct, rv); 00168 00169 BLANK_LINE (); 00170 CHECK_STRUCT (reconnect_struct); 00171 CHECK_MEMBER (reconnect_struct, hCard); 00172 CHECK_MEMBER (reconnect_struct, dwShareMode); 00173 CHECK_MEMBER (reconnect_struct, dwPreferredProtocols); 00174 CHECK_MEMBER (reconnect_struct, dwInitialization); 00175 CHECK_MEMBER (reconnect_struct, dwActiveProtocol); 00176 CHECK_MEMBER (reconnect_struct, rv); 00177 00178 BLANK_LINE (); 00179 CHECK_STRUCT (disconnect_struct); 00180 CHECK_MEMBER (disconnect_struct, hCard); 00181 CHECK_MEMBER (disconnect_struct, dwDisposition); 00182 CHECK_MEMBER (disconnect_struct, rv); 00183 00184 BLANK_LINE (); 00185 CHECK_STRUCT (begin_struct); 00186 CHECK_MEMBER (begin_struct, hCard); 00187 CHECK_MEMBER (begin_struct, rv); 00188 00189 BLANK_LINE (); 00190 CHECK_STRUCT (end_struct); 00191 CHECK_MEMBER (end_struct, hCard); 00192 CHECK_MEMBER (end_struct, dwDisposition); 00193 CHECK_MEMBER (end_struct, rv); 00194 00195 BLANK_LINE (); 00196 CHECK_STRUCT (cancel_struct); 00197 CHECK_MEMBER (cancel_struct, hCard); 00198 CHECK_MEMBER (cancel_struct, rv); 00199 00200 BLANK_LINE (); 00201 CHECK_STRUCT (status_struct); 00202 CHECK_MEMBER (status_struct, hCard); 00203 CHECK_MEMBER (status_struct, mszReaderNames); 00204 CHECK_MEMBER (status_struct, pcchReaderLen); 00205 CHECK_MEMBER (status_struct, dwState); 00206 CHECK_MEMBER (status_struct, dwProtocol); 00207 CHECK_MEMBER (status_struct, pbAtr); 00208 CHECK_MEMBER (status_struct, pcbAtrLen); 00209 CHECK_MEMBER (status_struct, rv); 00210 00211 BLANK_LINE (); 00212 CHECK_STRUCT (transmit_struct); 00213 CHECK_MEMBER (transmit_struct, hCard); 00214 CHECK_MEMBER (transmit_struct, ioSendPciProtocol); 00215 CHECK_MEMBER (transmit_struct, ioSendPciLength); 00216 CHECK_MEMBER (transmit_struct, pbSendBuffer); 00217 CHECK_MEMBER (transmit_struct, cbSendLength); 00218 CHECK_MEMBER (transmit_struct, ioRecvPciProtocol); 00219 CHECK_MEMBER (transmit_struct, ioRecvPciLength); 00220 CHECK_MEMBER (transmit_struct, pbRecvBuffer); 00221 CHECK_MEMBER (transmit_struct, pcbRecvLength); 00222 CHECK_MEMBER (transmit_struct, rv); 00223 00224 BLANK_LINE (); 00225 CHECK_STRUCT (control_struct); 00226 CHECK_MEMBER (control_struct, hCard); 00227 CHECK_MEMBER (control_struct, dwControlCode); 00228 CHECK_MEMBER (control_struct, pbSendBuffer); 00229 CHECK_MEMBER (control_struct, cbSendLength); 00230 CHECK_MEMBER (control_struct, pbRecvBuffer); 00231 CHECK_MEMBER (control_struct, cbRecvLength); 00232 CHECK_MEMBER (control_struct, dwBytesReturned); 00233 CHECK_MEMBER (control_struct, rv); 00234 00235 BLANK_LINE (); 00236 CHECK_STRUCT (getset_struct); 00237 CHECK_MEMBER (getset_struct, hCard); 00238 CHECK_MEMBER (getset_struct, dwAttrId); 00239 CHECK_MEMBER (getset_struct, cbAttrLen); 00240 CHECK_MEMBER (getset_struct, rv); 00241 00242 BLANK_LINE (); 00243 CHECK_STRUCT (pubReaderStatesList); 00244 CHECK_MEMBER (pubReaderStatesList, readerID); 00245 CHECK_MEMBER (pubReaderStatesList, readerName); 00246 CHECK_MEMBER (pubReaderStatesList, readerState); 00247 CHECK_MEMBER (pubReaderStatesList, readerSharing); 00248 CHECK_MEMBER (pubReaderStatesList, cardAtr); 00249 CHECK_MEMBER (pubReaderStatesList, cardAtrLength); 00250 CHECK_MEMBER (pubReaderStatesList, cardProtocol); 00251 } 00252 00253 int 00254 main(/*@unused@*/ int argc, /*@unused@*/ char **argv) 00255 { 00256 (void)argc; 00257 (void)argv; 00258 00259 printf ("#include <sys/types.h>\n" 00260 "#include <time.h>\n" 00261 "#include <stddef.h>\n\n" 00262 "#include \"PCSC/pcsclite.h\"\n" 00263 "#include \"pcscd.h\"\n" 00264 "#include \"readerfactory.h\"\n" 00265 "#include \"eventhandler.h\"\n" 00266 "#include \"winscard_msg.h\"\n\n" 00267 "#include \"lassert.h\"\n\n" 00268 "int pcsc_assert_wire_constants(void);\n" 00269 "int pcsc_assert_wire_constants(void)\n" 00270 "{\n"); 00271 00272 BLANK_LINE (); 00273 00274 check_constants (); 00275 check_types (); 00276 00277 BLANK_LINE (); 00278 00279 printf ("return 0;\n"); 00280 printf ("}\n"); 00281 00282 return 0; 00283 }