diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp index ff5538e84c47672e42465c4b3371ef674a522705..f189baee21400275a4450027f4b567d47f447567 100644 --- a/src/sbbs3/atcodes.cpp +++ b/src/sbbs3/atcodes.cpp @@ -2056,7 +2056,7 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen, long* pmode, bool return str; } if(strcmp(sp, "FILE_CREDITS") == 0) { - safe_snprintf(str, maxlen, "%lu", (ulong)current_file->cost); + safe_snprintf(str, maxlen, "%" PRIu64, current_file->cost); return str; } if(strcmp(sp, "FILE_TIME") == 0) diff --git a/src/sbbs3/bat_xfer.cpp b/src/sbbs3/bat_xfer.cpp index c3954ace90b4a574b6e0e90041b130a5e817737c..f34a3ef2083e431f1471048f8787342b76ff98d0 100644 --- a/src/sbbs3/bat_xfer.cpp +++ b/src/sbbs3/bat_xfer.cpp @@ -124,8 +124,8 @@ void sbbs_t::batchmenu() getfiletime(&cfg, &f); bprintf(text[DownloadQueueLstFmt],i+1 ,filename - ,ultoac(f.cost, tmp) - ,ultoac((ulong)f.size, str) + ,i64toac(f.cost, tmp) + ,i64toac(f.size, str) ,cur_cps ? sectostr((uint)(f.size/(ulong)cur_cps),tmp2) : "??:??:??" @@ -701,9 +701,9 @@ bool sbbs_t::addtobatdl(file_t* f) } else { if(batch_file_add(&cfg, useron.number, XFER_BATCH_DOWNLOAD, f)) { bprintf(text[FileAddedToBatDlQueue] - ,f->name, strListCount(filenames) + 1, cfg.max_batdn, ultoac((ulong)totalcost,tmp) - ,ultoac((ulong)totalsize,tmp2) - ,sectostr((ulong)totalsize/MAX((ulong)cur_cps, 1),str)); + ,f->name, strListCount(filenames) + 1, cfg.max_batdn, i64toac(totalcost,tmp) + ,i64toac(totalsize,tmp2) + ,sectostr((ulong)(totalsize/MAX((ulong)cur_cps, 1)),str)); result = true; } } diff --git a/src/sbbs3/file.cpp b/src/sbbs3/file.cpp index 4c905c8c098cfc69d41c7788842319845f5edc85..1c952b019f52e2fa4e61ec910f25bf5840cdde03 100644 --- a/src/sbbs3/file.cpp +++ b/src/sbbs3/file.cpp @@ -43,7 +43,7 @@ void sbbs_t::showfileinfo(file_t* f, bool show_extdesc) , byte_estimate_to_str(f->size, tmp2, sizeof(tmp2), /* units: */1024, /* precision: */1)); bprintf(P_TRUNCATE, text[FiCredits] - ,(cfg.dir[f->dir]->misc&DIR_FREE || !f->cost) ? "FREE" : ultoac((ulong)f->cost,tmp)); + ,(cfg.dir[f->dir]->misc&DIR_FREE || !f->cost) ? "FREE" : i64toac(f->cost,tmp)); if(getfilesize(&cfg, f) > 0 && f->size == smb_getfilesize(&f->idx)) { #if 0 // I don't think anyone cares about the CRC-16 checksum value of a file if(f->file_idx.hash.flags & SMB_HASH_CRC16) { @@ -344,7 +344,7 @@ bool sbbs_t::editfileinfo(file_t* f) return false; if(*uploader != '\0' || *f->from != '\0') smb_new_hfield_str(f, SMB_FILEUPLOADER, uploader); - ultoa(f->cost,str,10); + SAFEPRINTF(str, "%"PRIu64, f->cost); bputs(text[EditCreditValue]); getstr(str,10,K_NUMBER|K_EDIT|K_AUTODEL); if(msgabort(true)) diff --git a/src/sbbs3/filelist.c b/src/sbbs3/filelist.c index 540ee544209dac0057227b0e465c88e20fbae69a..b2eadb50122226f1ca78726821f0b7a1ac17e7f1 100644 --- a/src/sbbs3/filelist.c +++ b/src/sbbs3/filelist.c @@ -109,7 +109,8 @@ int main(int argc, char **argv) int i,j,dirnum,libnum,desc_off,lines,nots=0; char* omode="w"; char* pattern=NULL; - ulong m,cdt,misc=0,total_cdt=0,total_files=0,dir_files; + ulong m,misc=0,total_cdt=0,total_files=0,dir_files; + uint64_t cdt; long max_age=0; FILE* out=NULL; diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index 131ada764e4f2bc3b9f8236edd6acf2aa42da2e2..6fc323c791e9ac170334be2493736c93f1d4a11e 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -560,7 +560,7 @@ static void send_thread(void* arg) int rd; int wr; long mod; - ulong l; + uint64_t l; off_t total=0; off_t last_total=0; ulong dur; diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp index aa6044f596ce92778ba661557de51e1ddab90e70..ec2b0c421e7fcfdc8248bdb75bd08a2af3a0964e 100644 --- a/src/sbbs3/js_bbs.cpp +++ b/src/sbbs3/js_bbs.cpp @@ -733,7 +733,7 @@ static JSBool js_bbs_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) if(sbbs->current_file==NULL) p=nulstr; else - val=sbbs->current_file->cost; + val=(uint32_t)sbbs->current_file->cost; // TODO (cost is now 64-bit) break; case BBS_PROP_FILE_DIR: if(sbbs->current_file==NULL) diff --git a/src/sbbs3/js_filebase.c b/src/sbbs3/js_filebase.c index e6d09508458f947b5cac1de0a17904eebc8ec245..0583c2d398ffe091a8376929786bab675f1c5d51 100644 --- a/src/sbbs3/js_filebase.c +++ b/src/sbbs3/js_filebase.c @@ -247,7 +247,7 @@ set_file_properties(JSContext *cx, JSObject* obj, file_t* f, enum file_detail de return false; if(f->cost > 0 || detail > file_detail_metadata) { - val = UINT_TO_JSVAL(f->cost); + val = DOUBLE_TO_JSVAL((double)f->cost); if(!JS_DefineProperty(cx, obj, "cost", val, NULL, NULL, flags)) return false; } @@ -571,12 +571,7 @@ parse_file_properties(JSContext *cx, JSObject* obj, file_t* file, char** extdesc } prop_name = "cost"; if(JS_GetProperty(cx, obj, prop_name, &val) && !JSVAL_NULL_OR_VOID(val)) { - uint32_t cost = 0; - if(!JS_ValueToECMAUint32(cx, val, &cost)) { - free(cp); - JS_ReportError(cx, "Error converting '%s' property to Uint32", prop_name); - return SMB_FAILURE; - } + uint64_t cost = (uint64_t)JSVAL_TO_DOUBLE(val); if((file->cost != 0 || cost != 0) && (result = smb_new_hfield(file, SMB_COST, sizeof(cost), &cost)) != SMB_SUCCESS) { free(cp); JS_ReportError(cx, "Error %d adding '%s' property to file object", result, prop_name); diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c index 79601aca931b5cfc8fd86c2ecc6112deb8ea2041..df4159c42d264103c6a90d5206130c7959ba5c6a 100644 --- a/src/sbbs3/js_msgbase.c +++ b/src/sbbs3/js_msgbase.c @@ -1420,7 +1420,7 @@ static JSBool js_get_msg_header_resolve(JSContext *cx, JSObject *obj, jsid id) LAZY_STRING_COND("sender_time", (val=smb_get_hfield(&(p->msg),SENDERTIME,NULL))!=NULL, val, JSPROP_ENUMERATE); LAZY_UINTEGER_EXPAND("forwarded", p->msg.forwarded, JSPROP_ENUMERATE); LAZY_UINTEGER_EXPAND("expiration", p->msg.expiration, JSPROP_ENUMERATE); - LAZY_UINTEGER_EXPAND("cost", p->msg.cost, JSPROP_ENUMERATE); + LAZY_UINTEGER_EXPAND("cost", (uint32)p->msg.cost, JSPROP_ENUMERATE); LAZY_STRING_TRUNCSP_NULL("editor", p->msg.editor, JSPROP_ENUMERATE); LAZY_UINTEGER_EXPAND("columns", p->msg.columns, JSPROP_ENUMERATE); LAZY_STRING_TRUNCSP_NULL("mime_version", p->msg.mime_version, JSPROP_ENUMERATE|JSPROP_READONLY); diff --git a/src/sbbs3/pack_qwk.cpp b/src/sbbs3/pack_qwk.cpp index 0727e71969f5a99879467697708e619a55f15b5b..0da138a1fdc7a2959bc6f9ccb0cb86b47aa1a0e6 100644 --- a/src/sbbs3/pack_qwk.cpp +++ b/src/sbbs3/pack_qwk.cpp @@ -646,7 +646,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack) CRLF; } { - int64_t totalcdt = 0; + uint64_t totalcdt = 0; str_list_t ini = batch_list_read(&cfg, useron.number, XFER_BATCH_DOWNLOAD); str_list_t filenames = iniGetSectionList(ini, NULL); for(size_t i = 0; filenames[i] != NULL; i++) { @@ -655,7 +655,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack) if(!batch_file_load(&cfg, ini, filename, &f)) continue; if(!is_download_free(&cfg, f.dir, &useron, &client)) { - if(totalcdt + f.cost > (int64_t)(useron.cdt+useron.freecdt)) { + if(totalcdt + f.cost > (uint64_t)(useron.cdt+useron.freecdt)) { bprintf(text[YouOnlyHaveNCredits] ,ultoac(useron.cdt+useron.freecdt,tmp)); batch_file_remove(&cfg, useron.number, XFER_BATCH_DOWNLOAD, filename); diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp index f05c86df75b7f1a678674f584724bbaf76af043a..92217d759deb28a9c7ddd88a3b83564531fe24a3 100644 --- a/src/sbbs3/upload.cpp +++ b/src/sbbs3/upload.cpp @@ -170,8 +170,7 @@ bool sbbs_t::uploadfile(file_t* f) } if(cfg.dir[f->dir]->misc&DIR_AONLY) /* Forced anonymous */ f->hdr.attr |= MSG_ANONYMOUS; - uint32_t cdt = (uint32_t)MIN(length, UINT32_MAX); - smb_hfield_bin(f, SMB_COST, cdt); + smb_hfield_bin(f, SMB_COST, length); smb_hfield_str(f, SENDER, useron.alias); bprintf(text[FileNBytesReceived],f->name, i64toac(length,tmp)); if(!addfile(&cfg, f->dir, f, ext, /* metadata: */NULL, &client)) diff --git a/src/smblib/smbdefs.h b/src/smblib/smbdefs.h index 9adb5ed8bc8454281e9888db570235fcef9cb7db..0412dc058afaaa17eb01c9554103f227934c95e7 100644 --- a/src/smblib/smbdefs.h +++ b/src/smblib/smbdefs.h @@ -198,10 +198,11 @@ #define SMB_GROUP 0x64 #define SMB_EXPIRATION 0x65 #define SMB_PRIORITY 0x66 /* DEPRECATED */ -#define SMB_COST 0x67 +#define SMB_COST 0x67 /* 32-bit or 64-bit cost value */ #define SMB_EDITOR 0x68 /* Associated with FTN ^aNOTE: control line */ #define SMB_TAGS 0x69 /* List of tags (ala hash-tags) related to this message */ #define SMB_TAG_DELIMITER " " +#define SMB_COLUMNS 0x6a /* original text editor width in fixed-width columns */ #define SMB_FILEIDX_NAMELEN 64 #define SMB_FILENAME SUBJECT @@ -232,7 +233,6 @@ #define PRESENTTRIGGER 0x94 #define VIDEOTRIGGER 0x95 #define APPDATATRIGGER 0x96 -#define SMB_COLUMNS 0x6a /* original text editor width in fixed-width columns */ #define FIDOCTRL 0xa0 #define FIDOAREA 0xa1 @@ -656,7 +656,7 @@ typedef struct { /* Message or File */ int32_t idx_offset; /* Offset (number of records) into index */ BOOL forwarded; /* Forwarded from agent to another */ uint32_t expiration; /* Message will expire on this day (if >0) */ - uint32_t cost; /* Cost to download/read */ + uint64_t cost; /* Cost to download/read */ uint32_t flags; /* Various smblib run-time flags (see MSG_FLAG_*) */ uint16_t user_voted; /* How the current user viewing this message, voted on it */ uint32_t upvotes; /* Vote tally for this message */ diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c index ef2771d49305fd9e5fa87710000cbd394fd63aff..53b886392129906f9263ed163490820a8656e716 100644 --- a/src/smblib/smblib.c +++ b/src/smblib/smblib.c @@ -740,7 +740,7 @@ ulong smb_getmsgtxtlen(smbmsg_t* msg) return(length); } -static void set_convenience_ptr(smbmsg_t* msg, uint16_t hfield_type, void* hfield_dat) +static void set_convenience_ptr(smbmsg_t* msg, uint16_t hfield_type, size_t len, void* hfield_dat) { switch(hfield_type) { /* convenience variables */ case SENDER: @@ -840,7 +840,10 @@ static void set_convenience_ptr(smbmsg_t* msg, uint16_t hfield_type, void* hfiel msg->expiration=*(uint32_t*)hfield_dat; break; case SMB_COST: - msg->cost=*(uint32_t*)hfield_dat; + if(len == sizeof(uint32_t)) + msg->cost=*(uint32_t*)hfield_dat; + else if(len == sizeof(uint64_t)) + msg->cost=*(uint64_t*)hfield_dat; break; case RFC822MSGID: msg->id=(char*)hfield_dat; @@ -1079,7 +1082,7 @@ int smb_getmsghdr(smb_t* smb, smbmsg_t* msg) ,"%s reading header field data", __FUNCTION__); return(SMB_ERR_READ); } - set_convenience_ptr(msg,msg->hfield[i].type,msg->hfield_dat[i]); + set_convenience_ptr(msg,msg->hfield[i].type,msg->hfield[i].length,msg->hfield_dat[i]); l+=msg->hfield[i].length; } @@ -1199,7 +1202,7 @@ int smb_copymsgmem(smb_t* smb, smbmsg_t* msg, smbmsg_t* srcmsg) } memset(msg->hfield_dat[i],0,msg->hfield[i].length+1); memcpy(msg->hfield_dat[i],srcmsg->hfield_dat[i],msg->hfield[i].length); - set_convenience_ptr(msg, msg->hfield[i].type, msg->hfield_dat[i]); + set_convenience_ptr(msg, msg->hfield[i].type, msg->hfield[i].length, msg->hfield_dat[i]); } } @@ -1254,7 +1257,7 @@ int smb_hfield_add(smbmsg_t* msg, uint16_t type, size_t length, void* data, BOOL return(SMB_ERR_MEM); /* Allocate 1 extra for ASCIIZ terminator */ memset(msg->hfield_dat[i],0,length+1); memcpy(msg->hfield_dat[i],data,length); - set_convenience_ptr(msg,type,msg->hfield_dat[i]); + set_convenience_ptr(msg,type,length,msg->hfield_dat[i]); return(SMB_SUCCESS); } @@ -1373,7 +1376,7 @@ int smb_hfield_append(smbmsg_t* msg, uint16_t type, size_t length, void* data) memset(p,0,length+1); memcpy(p,data,length); /* append */ msg->hfield[i].length+=(uint16_t)length; - set_convenience_ptr(msg,type,msg->hfield_dat[i]); + set_convenience_ptr(msg,type,length,msg->hfield_dat[i]); return(SMB_SUCCESS); } @@ -1411,7 +1414,7 @@ int smb_hfield_replace(smbmsg_t* msg, uint16_t type, size_t length, void* data) memset(p,0,length+1); memcpy(p,data,length); msg->hfield[i].length=(uint16_t)length; - set_convenience_ptr(msg,type,msg->hfield_dat[i]); + set_convenience_ptr(msg,type,length,msg->hfield_dat[i]); return SMB_SUCCESS; }