On Mon, Jul 10, 2006 at 02:30:21PM -0700, Tyler MacDonald wrote: > Kurt, > Any chance I can get access to a box to play around with? This (and > other problems) could pop up all over the place in the code, it'd be nice to > be able to tackle them all at once instead of just uploading a new version > to find a new problem...
I've started changing things and I've attached the patch from as far as I got. When using printing a size_t, you need the z modifier in printf(). For u_int64_t's you have things in <inttypes.h> like PRIu64 that should give you the right string. The only problem I've had was with off_t. It works for me if I use the z modifier, as used for size_t, but I have a feeling this isn't very portable, and I haven't tried this on a 32 bit system. Not that if you have large file support, an off_t might be 64 bit with a size_t only 32 bit. I don't know how to portably print those. Then I got: Tracker.xs: In function 'XS_Net__BitTorrent__LibBT__Tracker_Infohash': Tracker.xs:576: warning: passing argument 3 of 'Perl_sv_2pv_flags' from incompatible pointer type Tracker.xs: In function 'XS_Net__BitTorrent__LibBT__Tracker__Infohash_Peer': Tracker.xs:1047: warning: passing argument 3 of 'Perl_sv_2pv_flags' from incompatible pointer type And I'm not sure how to deal with this, but didn't look very hard at it. If I don't forgot, I'll try looking at it again tomorrow. Kurt
--- src/libbtutil/util/bt_nice_size.c.old 2006-07-10 23:40:58.000000000 +0200 +++ src/libbtutil/util/bt_nice_size.c 2006-07-10 23:44:04.000000000 +0200 @@ -7,6 +7,7 @@ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> +#include <inttypes.h> #define SZSTR 64 @@ -31,7 +32,7 @@ } else { - snprintf(szstr, SZSTR, "%llub", size); + snprintf(szstr, SZSTR, "%" PRIu64 "b", size); } rv = apr_pstrdup(p, szstr); --- src/libbtutil/types/bt_metainfo.c.old 2006-07-10 23:45:09.000000000 +0200 +++ src/libbtutil/types/bt_metainfo.c 2006-07-10 23:53:42.000000000 +0200 @@ -40,7 +40,7 @@ if(sinfo.st_size > BT_MAX_METAINFO_SIZE) { fprintf( - stderr, "%s: file to large (%llu bytes > %u bytes)", + stderr, "%s: file to large (%zu bytes > %u bytes)", path, sinfo.st_size, BT_MAX_METAINFO_SIZE ); return NULL; @@ -60,7 +60,7 @@ if((rv = apr_file_read(file, buf, &len)) != APR_SUCCESS) { fprintf( - stderr, "Failed to read %llu bytes from %s: %s\n", + stderr, "Failed to read %zu bytes from %s: %s\n", sinfo.st_size, path, apr_strerror(rv, errorstr, BT_SHORT_STRING) ); @@ -70,7 +70,7 @@ if(len != sinfo.st_size) { fprintf( stderr, - "%s: expected %llu bytes, but got %"SF"!\n", path, sinfo.st_size, len + "%s: expected %zu bytes, but got %"SF"!\n", path, sinfo.st_size, len ); return NULL; } --- src/libbttracker/tracker/btt_tracker_alloc.c.old 2006-07-10 23:54:53.000000000 +0200 +++ src/libbttracker/tracker/btt_tracker_alloc.c 2006-07-10 23:55:52.000000000 +0200 @@ -122,13 +122,13 @@ rv = NULL; } else { if((ret = apr_shm_create(&rv, size, shfile, p)) != APR_SUCCESS) { - fprintf(stderr, "apr_shm_create(&rv, %d, \"%s\", pool) failed: %s\n", size, shfile, apr_strerror(ret, btt_error_msg, sizeof(btt_error_msg))); + fprintf(stderr, "apr_shm_create(&rv, %zd, \"%s\", pool) failed: %s\n", size, shfile, apr_strerror(ret, btt_error_msg, sizeof(btt_error_msg))); fflush(stderr); rv = NULL; } } } else { - fprintf(stderr, "apr_shm_create(&rv, %d, \"%s\", pool) failed: %s\n", size, shfile, apr_strerror(ret, btt_error_msg, sizeof(btt_error_msg))); + fprintf(stderr, "apr_shm_create(&rv, %zd, \"%s\", pool) failed: %s\n", size, shfile, apr_strerror(ret, btt_error_msg, sizeof(btt_error_msg))); fflush(stderr); rv = NULL; } @@ -189,7 +189,7 @@ return NULL; } } else { - fprintf(stderr, "bt_tracker_alloc(): Failed to allocate %d bytes!\n", sizeof(btt_tracker)); + fprintf(stderr, "bt_tracker_alloc(): Failed to allocate %zd bytes!\n", sizeof(btt_tracker)); fflush(stderr); return NULL; } --- src/libbttracker/types/btt_infohash.c.old 2006-07-10 23:56:48.000000000 +0200 +++ src/libbttracker/types/btt_infohash.c 2006-07-11 00:02:16.000000000 +0200 @@ -18,6 +18,7 @@ /* libc */ #include <time.h> #include <stdio.h> +#include <inttypes.h> /* other libs */ #include <apr.h> #include <apr_pools.h> @@ -79,7 +80,7 @@ "<TR><TH>Infohash:</TH><TD>%s</TH></TR>\n" "<TR><TH>Filename:</TH><TD>%s</TD></TR>\n" "<TR><TH>File Size:</TH><TD>%s</TD></TR>\n" - "<TR><TH>Announce Hits:</TH><TD>%llu</TD></TR>\n" + "<TR><TH>Announce Hits:</TH><TD>%" PRIu64 "</TD></TR>\n" "<TR><TH>Max Uploaded/Downloaded:</TH><TD>%s/%s</TD></TR>\n" "<TR><TH>Min/Max Left:</TH><TD>%s/%s</TD></TR>\n" "<TR><TH>Peers/Seeds/Shields:</TH><TD>%u/%u/%u</TD></TR>\n" @@ -121,7 +122,7 @@ "Infohash: %s\n" "Filename: %s\n" "File Size: %s\n" - "Announce Hits: %llu\n" + "Announce Hits: %" PRIu64 "\n" "Max Uploaded: %s\n" "Mac Downloaded: %s\n" "Min/Max Left: %s/%s\n" @@ -171,7 +172,7 @@ char* rv = apr_psprintf ( p, - "20:....................d8:completei%ue10:downloadedi%ue10:incompletei%ue4:name%u:%s4:sizei%lluee", + "20:....................d8:completei%ue10:downloadedi%ue10:incompletei%ue4:name%zu:%s4:sizei%" PRIu64 "ee", complete, infohash->completes, infohash->peers - infohash->seeds, strlen(infohash->filename), infohash->filename, infohash->filesize ); --- src/libbttracker/types/btt_peer.c.old 2006-07-11 00:03:22.000000000 +0200 +++ src/libbttracker/types/btt_peer.c 2006-07-11 00:04:54.000000000 +0200 @@ -122,7 +122,7 @@ fprintf( stderr, "bt_peer_req2struct(): got an invalid infohash " - "of length %i\n", fp.value_len + "of length %zi\n", fp.value_len ); fflush(stderr); return 0; @@ -135,7 +135,7 @@ fprintf( stderr, "bt_peer_req2struct(): got an invalid peerid " - "of length %i\n", fp.value_len + "of length %zi\n", fp.value_len ); fflush(stderr); return 0; @@ -175,7 +175,7 @@ fprintf( stderr, "bt_peer_req2struct(): Got an invalid event " - "of length %i\n", fp.value_len + "of length %zi\n", fp.value_len ); fflush(stderr); return 0; @@ -256,7 +256,7 @@ int len = 0; rv = apr_psprintf( - p, "d2:ip%u:%s4:porti%uee", strlen(ip), ip, + p, "d2:ip%zu:%s4:porti%uee", strlen(ip), ip, ntohs(peer->address.sin_port) ); len = strlen(rv); @@ -268,11 +268,11 @@ int btt_peer2bencode(apr_pool_t* p, btt_peer* peer, char **result) { char *rv = NULL; char *ip = apr_pstrdup(p, inet_ntoa(peer->address.sin_addr)); - int iplen = strlen(apr_psprintf(p, "%u%s", strlen(ip), ip)); + int iplen = strlen(apr_psprintf(p, "%zu%s", strlen(ip), ip)); int len = 0; rv = apr_psprintf( - p, "d2:ip%u:%s7:peer id20:xxxxxxxxxxxxxxxxxxxx4:porti%uee", + p, "d2:ip%zu:%s7:peer id20:xxxxxxxxxxxxxxxxxxxx4:porti%uee", strlen(ip), ip, ntohs(peer->address.sin_port) ); --- src/libbttracker/types/btt_tracker.c.old 2006-07-11 00:05:53.000000000 +0200 +++ src/libbttracker/types/btt_tracker.c 2006-07-11 00:08:38.000000000 +0200 @@ -15,6 +15,7 @@ * limitations under the License. */ +#include <inttypes.h> /* other libs */ #include <apr.h> #include <apr_pools.h> @@ -136,8 +137,8 @@ " <TR><TH>Startup Time:</TH><TD>%s</TD></TR>\n" " <TR><TH>Hashes:</TH><TD>%u</TD></TR>\n" " <TR><TH>Peers:</TH><TD>%u</TD></TR>\n" - " <TR><TH>Announces:</TH><TD>%llu (%.02f/s)</TD></TR>\n" - " <TR><TH>Faulty Announces:</TH><TD>%llu</TD></TR>\n" + " <TR><TH>Announces:</TH><TD>%" PRIu64 " (%.02f/s)</TD></TR>\n" + " <TR><TH>Faulty Announces:</TH><TD>%" PRIu64 "</TD></TR>\n" " <TR><TH>Peers Returned:</TH><TD>0 < %u < %u</TD></TR>\n" " <TR><TH>Return Interval:</TH><TD>%s</TD></TR>\n" " <TR><TH>Hash Expiry:</TH><TD>%lus - %lus (Watermark %u)</TD></TR>\n" @@ -206,8 +207,8 @@ " <NumRequests>%u</NumRequests>\n" " <NumHashes>%u</NumHashes>\n" " <NumPeers>%u</NumPeers>\n" - " <Announces>%llu</Announces>\n" - " <BadAnnounces>%llu</BadAnnounces>\n" + " <Announces>%" PRIu64 "</Announces>\n" + " <BadAnnounces>%" PRIu64 "</BadAnnounces>\n" " <StartT>%lu</StartT>\n" " <MasterPID>%u</MasterPID>\n" " <ServerTime>%lu</ServerTime>\n" @@ -215,7 +216,7 @@ " <DB>\n" " <Open>%u</Open>\n" " <Dir>%s</Dir>\n" - " <Cache>%u</Cache>\n" + " <Cache>%zu</Cache>\n" " </DB>\n" "</Tracker>\n", tracker->c->random_retry,