after a discussion with an expert I believe the proper handling of size_t with printf is: a) use "%lu" format for unsigned long and b) always cast size_t to unsigned log.
for openct no changes are necessary, for opensc attached patch adds the type casts. do you agree? should I commit that patch? trunk only or also opensc 0.11.0? Thanks for your help. Regards, Andreas
diff -udrNPp --exclude=.svn opensc.orig/src/common/main.c opensc/src/common/main.c --- opensc.orig/src/common/main.c 2005-12-29 13:36:28.000000000 +0100 +++ opensc/src/common/main.c 2006-04-29 16:09:58.000000000 +0200 @@ -119,9 +119,7 @@ handle(char *progname, { fprintf(stderr, "%s: %lu bytes copied from `%s' to `%s'\n", - progname, - bytes_copied, - infilename, + (unsigned long) progname, bytes_copied, infilename, outfilename); } return 0; diff -udrNPp --exclude=.svn opensc.orig/src/libopensc/apdu.c opensc/src/libopensc/apdu.c --- opensc.orig/src/libopensc/apdu.c 2006-04-26 12:14:53.000000000 +0200 +++ opensc/src/libopensc/apdu.c 2006-04-29 16:12:17.000000000 +0200 @@ -336,9 +336,10 @@ error: "resp=%p resplen=%lu data=%p datelen=%lu", apdu->cse & SC_APDU_SHORT_MASK, (apdu->cse & SC_APDU_EXT) != 0 ? "extended" : "short", - apdu->cse, apdu->cla, apdu->ins, apdu->p1, - apdu->p2, apdu->lc, apdu->le, apdu->resp, - apdu->resplen, apdu->data, apdu->datalen); + apdu->cse, apdu->cla, apdu->ins, apdu->p1, apdu->p2, + (unsigned long) apdu->lc, (unsigned long) apdu->le, + apdu->resp, (unsigned long) apdu->resplen, + apdu->data, (unsigned long) apdu->datalen); return SC_ERROR_INVALID_ARGUMENTS; } diff -udrNPp --exclude=.svn opensc.orig/src/libopensc/card.c opensc/src/libopensc/card.c --- opensc.orig/src/libopensc/card.c 2006-03-25 22:33:47.000000000 +0100 +++ opensc/src/libopensc/card.c 2006-04-29 16:10:19.000000000 +0200 @@ -680,7 +680,8 @@ sc_card_ctl(sc_card_t *card, unsigned lo /* suppress "not supported" error messages */ if (r == SC_ERROR_NOT_SUPPORTED) { - sc_debug(card->ctx, "card_ctl(%lu) not supported\n", cmd); + sc_debug(card->ctx, "card_ctl(%lu) not supported\n", + (unsigned long) cmd); return r; } SC_FUNC_RETURN(card->ctx, 2, r); diff -udrNPp --exclude=.svn opensc.orig/src/libopensc/card-flex.c opensc/src/libopensc/card-flex.c --- opensc.orig/src/libopensc/card-flex.c 2006-01-22 23:27:40.000000000 +0100 +++ opensc/src/libopensc/card-flex.c 2006-04-29 16:10:30.000000000 +0200 @@ -1195,7 +1195,8 @@ static int flex_get_serialnr(sc_card_t * len = tfile->size; sc_file_free(tfile); if (len != 8) { - sc_debug(card->ctx, "unexpected file length of EF_ICCSN (%lu)\n", len); + sc_debug(card->ctx, "unexpected file length of EF_ICCSN (%lu)\n", + (unsigned long) len); return SC_ERROR_INTERNAL; } r = sc_read_binary(card, 0, buf, len, 0); diff -udrNPp --exclude=.svn opensc.orig/src/libopensc/ui.c opensc/src/libopensc/ui.c --- opensc.orig/src/libopensc/ui.c 2006-03-14 22:55:39.000000000 +0100 +++ opensc/src/libopensc/ui.c 2006-04-29 16:10:42.000000000 +0200 @@ -310,14 +310,14 @@ __sc_ui_read_pin(sc_context_t *ctx, cons if (len < pin_info->min_length) { fprintf(stderr, "PIN too short (min %lu characters)\n", - (unsigned long)pin_info->min_length); + (unsigned long) pin_info->min_length); continue; } if (pin_info->max_length && len > pin_info->max_length) { fprintf(stderr, "PIN too long (max %lu characters)\n", - (unsigned long)pin_info->max_length); + (unsigned long) pin_info->max_length); continue; } } diff -udrNPp --exclude=.svn opensc.orig/src/pkcs11/pkcs11-display.c opensc/src/pkcs11/pkcs11-display.c --- opensc.orig/src/pkcs11/pkcs11-display.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/pkcs11/pkcs11-display.c 2006-04-29 16:09:31.000000000 +0200 @@ -819,7 +819,8 @@ void print_mech_info(FILE *f, CK_MECHANI fprintf(f, "Unknown Mechanism (%08lx) : ", type); } fprintf(f, "min:%lu max:%lu flags:0x%lX ", - minfo->ulMinKeySize, minfo->ulMaxKeySize, minfo->flags); + (unsigned long) minfo->ulMinKeySize, + (unsigned long) minfo->ulMaxKeySize, minfo->flags); printf("( %s%s%s%s%s%s%s%s%s%s%s%s%s%s)\n", #endif (minfo->flags & CKF_HW) ? "Hardware " : "", diff -udrNPp --exclude=.svn opensc.orig/src/pkcs15init/pkcs15-cardos.c opensc/src/pkcs15init/pkcs15-cardos.c --- opensc.orig/src/pkcs15init/pkcs15-cardos.c 2006-02-15 09:53:00.000000000 +0100 +++ opensc/src/pkcs15init/pkcs15-cardos.c 2006-04-29 16:10:06.000000000 +0200 @@ -318,7 +318,8 @@ cardos_generate_key(sc_profile_t *profil rsa_max_size = (card->caps & SC_CARD_CAP_RSA_2048) ? 2048 : 1024; keybits = key_info->modulus_length & ~7UL; if (keybits > rsa_max_size) { - sc_error(card->ctx, "Unable to generate key, max size is %lu", rsa_max_size); + sc_error(card->ctx, "Unable to generate key, max size is %lu", + (unsigned long) rsa_max_size); return SC_ERROR_INVALID_ARGUMENTS; } diff -udrNPp --exclude=.svn opensc.orig/src/tests/print.c opensc/src/tests/print.c --- opensc.orig/src/tests/print.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tests/print.c 2006-04-29 16:05:06.000000000 +0200 @@ -65,7 +65,10 @@ static void print_pin(const struct sc_pk printf(", %s", pin_flags[i]); } printf("\n"); - printf("\tLength : min_len:%lu, max_len:%lu, stored_len:%lu\n", pin->min_length, pin->max_length, pin->stored_length); + printf("\tLength : min_len:%lu, max_len:%lu, stored_len:%lu\n", + (unsigned long) pin->min_length, + (unsigned long) pin->max_length, + (unsigned long) pin->stored_length); printf("\tPad char : 0x%02X\n", pin->pad_char); printf("\tReference : %d\n", pin->reference); printf("\tEncoding : "); @@ -122,7 +125,8 @@ static void print_prkey(const struct sc_ } printf("\n"); if (obj->type == SC_PKCS15_TYPE_PRKEY_RSA) - printf("\tModLength : %lu\n", prkey->modulus_length); + printf("\tModLength : %lu\n", + (unsigned long) prkey->modulus_length); printf("\tKey ref : %d\n", prkey->key_reference); printf("\tNative : %s\n", prkey->native ? "yes" : "no"); if (prkey->path.len) { @@ -169,7 +173,8 @@ static void print_pubkey(const struct sc } printf("\n"); if (obj->type == SC_PKCS15_TYPE_PUBKEY_RSA) - printf("\tModLength : %lu\n", pubkey->modulus_length); + printf("\tModLength : %lu\n", + (unsigned long) pubkey->modulus_length); printf("\tKey ref : %d\n", pubkey->key_reference); printf("\tNative : %s\n", pubkey->native ? "yes" : "no"); printf("\tPath : "); diff -udrNPp --exclude=.svn opensc.orig/src/tools/netkey-tool.c opensc/src/tools/netkey-tool.c --- opensc.orig/src/tools/netkey-tool.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/netkey-tool.c 2006-04-29 16:08:50.000000000 +0200 @@ -96,7 +96,7 @@ void show_pin( f->prop_attr_len!=5 || f->prop_attr[0]!=0x01 || f->prop_attr[1]!=0x80 ){ printf("\nInvald PIN-file: Type=%d, EF-Structure=%d, Prop-Len=%lu %02X:%02X:%02X\n", - f->type, f->ef_structure, f->prop_attr_len, + f->type, f->ef_structure, (unsigned long) f->prop_attr_len, f->prop_attr[0], f->prop_attr[1], f->prop_attr[2] ); return; @@ -133,7 +133,8 @@ void show_certs( printf("\n"); for(i=0;i<sizeof(certlist)/sizeof(certlist[0]);++i){ - printf("Certificate %lu: %s", i, certlist[i].label); fflush(stdout); + printf("Certificate %lu: %s", + (unsigned long) i, certlist[i].label); fflush(stdout); sc_format_path(certlist[i].path,&p); if((j=sc_select_file(card,&p,&f))<0){ @@ -150,7 +151,7 @@ void show_certs( printf(", Cannot read Cert-file, %s\n", sc_strerror(j)); continue; } - printf(", Maxlen=%lu", f->size); + printf(", Maxlen=%lu", (unsigned long) f->size); q=buf; if(q[0]==0x30 && q[1]==0x82){ if(q[4]==6 && q[5]<10 && q[q[5]+6]==0x30 && q[q[5]+7]==0x82) q+=q[5]+6; @@ -234,7 +235,7 @@ void show_card( file->size!=12 || (len=sc_read_binary(card,0,buf,12,0))!=12 || buf[0]!=0x5A || buf[1]!=0x0A ){ printf("\nInvald Serial-Number: Type=%d, EF-Structure=%d, Size=%lu\n", - file->type, file->ef_structure, file->size + file->type, file->ef_structure, (unsigned long) file->size ); return; } @@ -588,7 +589,8 @@ int main( printf("%d Reader detected\n", sc_ctx_get_reader_count(ctx)); for(i=0; i < sc_ctx_get_reader_count(ctx); ++i){ sc_reader_t *reader = sc_ctx_get_reader(ctx, i); - printf("%lu: %s, Driver: %s, %d Slot(s)\n", i, reader->name, + printf("%lu: %s, Driver: %s, %d Slot(s)\n", + (unsigned long) i, reader->name, reader->driver->name, reader->slot_count); } if(reader < 0 || reader >= (int)sc_ctx_get_reader_count(ctx)){ diff -udrNPp --exclude=.svn opensc.orig/src/tools/opensc-explorer.c opensc/src/tools/opensc-explorer.c --- opensc.orig/src/tools/opensc-explorer.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/opensc-explorer.c 2006-04-29 16:06:06.000000000 +0200 @@ -418,7 +418,7 @@ static int do_info(int argc, char **argv printf("%02X", path.value[i]); } } - printf("\n%-15s%lu bytes\n", "File size:", file->size); + printf("\n%-15s%lu bytes\n", "File size:", (unsigned long) file->size); if (file->type == SC_FILE_TYPE_DF) { const char *ops[] = { diff -udrNPp --exclude=.svn opensc.orig/src/tools/opensc-tool.c opensc/src/tools/opensc-tool.c --- opensc.orig/src/tools/opensc-tool.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/opensc-tool.c 2006-04-29 16:07:19.000000000 +0200 @@ -173,7 +173,7 @@ static int print_file(sc_card_t *in_card }; printf("ef structure: %s, ", structs[file->ef_structure]); } - printf("size: %lu\n", file->size); + printf("size: %lu\n", (unsigned long) file->size); for (r = 0; r < depth; r++) printf(" "); if (file->type == SC_FILE_TYPE_DF) @@ -311,7 +311,7 @@ static int send_apdu(void) apdu.datalen = apdu.lc; if (len < apdu.lc) { fprintf(stderr, "APDU too short (need %lu bytes).\n", - apdu.lc-len); + (unsigned long) apdu.lc-len); return 2; } len -= apdu.lc; @@ -324,7 +324,8 @@ static int send_apdu(void) } else apdu.cse = SC_APDU_CASE_3_SHORT; if (len) { - fprintf(stderr, "APDU too long (%lu bytes extra).\n", len); + fprintf(stderr, "APDU too long (%lu bytes extra).\n", + (unsigned long) len); return 2; } } else if (len == 1) { diff -udrNPp --exclude=.svn opensc.orig/src/tools/piv-tool.c opensc/src/tools/piv-tool.c --- opensc.orig/src/tools/piv-tool.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/piv-tool.c 2006-04-29 16:07:48.000000000 +0200 @@ -280,7 +280,7 @@ static int send_apdu(void) apdu.datalen = apdu.lc; if (len < apdu.lc) { fprintf(stderr, "APDU too short (need %lu bytes).\n", - apdu.lc-len); + (unsigned long) apdu.lc-len); return 2; } len -= apdu.lc; diff -udrNPp --exclude=.svn opensc.orig/src/tools/pkcs11-tool.c opensc/src/tools/pkcs11-tool.c --- opensc.orig/src/tools/pkcs11-tool.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/pkcs11-tool.c 2006-04-29 16:09:14.000000000 +0200 @@ -1597,12 +1597,14 @@ show_key(CK_SESSION_HANDLE sess, CK_OBJE switch (key_type) { case CKK_RSA: if (pub) - printf("; RSA %lu bits\n", getMODULUS_BITS(sess, obj)); + printf("; RSA %lu bits\n", + (unsigned long) getMODULUS_BITS(sess, obj)); else printf("; RSA \n"); break; default: - printf("; unknown key algorithm %lu\n", key_type); + printf("; unknown key algorithm %lu\n", + (unsigned long) key_type); break; } @@ -3463,7 +3465,7 @@ p11_mechanism_to_name(CK_MECHANISM_TYPE if (mi->mech == mech) return mi->name; } - snprintf(temp, sizeof(temp), "mechtype-%lu", mech); + snprintf(temp, sizeof(temp), "mechtype-%lu", (unsigned long) mech); return temp; } diff -udrNPp --exclude=.svn opensc.orig/src/tools/pkcs15-crypt.c opensc/src/tools/pkcs15-crypt.c --- opensc.orig/src/tools/pkcs15-crypt.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/pkcs15-crypt.c 2006-04-29 16:07:40.000000000 +0200 @@ -252,7 +252,7 @@ static int sign_ext(struct sc_pkcs15_obj else { fprintf(stderr, "Invalid input size (%lu bytes)\n", - len); + (unsigned long) len); return SC_ERROR_INVALID_ARGUMENTS; } } @@ -294,7 +294,7 @@ static int sign(struct sc_pkcs15_object && !(opt_crypt_flags & SC_ALGORITHM_RSA_PAD_PKCS1) && (size_t)c != key->modulus_length/8) { fprintf(stderr, "Input has to be exactly %lu bytes, when using no padding.\n", - key->modulus_length/8); + (unsigned long) key->modulus_length/8); return 2; } if (!key->native) { diff -udrNPp --exclude=.svn opensc.orig/src/tools/pkcs15-tool.c opensc/src/tools/pkcs15-tool.c --- opensc.orig/src/tools/pkcs15-tool.c 2006-04-26 13:52:17.000000000 +0200 +++ opensc/src/tools/pkcs15-tool.c 2006-04-29 16:06:50.000000000 +0200 @@ -216,7 +216,7 @@ list_data_object(const char *kind, const { size_t i; - printf("%s (%lu bytes): <", kind, data_len); + printf("%s (%lu bytes): <", kind, (unsigned long) data_len); for (i = 0; i < data_len; i++) printf(" %02X", data[i]); printf(" >\n"); @@ -239,13 +239,15 @@ print_data_object(const char *kind, cons } for (i=0; i < data_len; i++) fprintf(outf, "%c", data[i]); - printf("Dumping (%lu bytes) to file <%s>: <", data_len, opt_outfile); + printf("Dumping (%lu bytes) to file <%s>: <", + (unsigned long) data_len, opt_outfile); for (i=0; i < data_len; i++) printf(" %02X", data[i]); printf(" >\n"); fclose(outf); } else { - printf("%s (%lu bytes): <", kind, data_len); + printf("%s (%lu bytes): <", + kind, (unsigned long) data_len); for (i=0; i < data_len; i++) printf(" %02X", data[i]); printf(" >\n");
_______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel