pcsc-wirecheck-gen.c

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, phContext);
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, phCard);
00166     CHECK_MEMBER (connect_struct, pdwActiveProtocol);
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, pdwActiveProtocol);
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, pdwState);
00206     CHECK_MEMBER (status_struct, pdwProtocol);
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, pioSendPciProtocol);
00215     CHECK_MEMBER (transmit_struct, pioSendPciLength);
00216     CHECK_MEMBER (transmit_struct, pbSendBuffer);
00217     CHECK_MEMBER (transmit_struct, cbSendLength);
00218     CHECK_MEMBER (transmit_struct, pioRecvPciProtocol);
00219     CHECK_MEMBER (transmit_struct, pioRecvPciLength);
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 }

Generated on Mon Aug 17 01:00:10 2009 for pcsc-lite by  doxygen 1.5.9