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