Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, libarchive.org for more info) to build successfully.

Commit d45f6fe6 authored by rswindell's avatar rswindell

Enable GCC printf-format checking for more printf-style functions and

fix the resulting warnings.
parent 6eb80f5a
......@@ -101,7 +101,7 @@ int sbbs_t::show_atcode(const char *instr)
} else if(zero_padded) {
int vlen = strlen(cp);
if(vlen < disp_len)
bprintf("%-.*s%s", disp_len - strlen(cp), "0000000000", cp);
bprintf("%-.*s%s", (int)(disp_len - strlen(cp)), "0000000000", cp);
else
bprintf("%.*s", disp_len, cp);
} else
......
......@@ -85,7 +85,7 @@ int sbbs_t::exec_misc(csi_t* csi, char *path)
if(!pp || !*pp) {
lp=getintvar(csi,*(int32_t *)csi->ip);
if(lp)
bprintf("%ld",*lp);
bprintf("%d",*lp);
}
else
putmsg(cmdstr(*pp,path,csi->str,buf)
......@@ -107,25 +107,25 @@ int sbbs_t::exec_misc(csi_t* csi, char *path)
free(p);
return(0);
case SHOW_VARS:
bprintf("shell str=(%08lX) %s\r\n"
bprintf("shell str=(%p) %s\r\n"
,csi->str,csi->str);
for(i=0;i<csi->str_vars;i++)
bprintf("local str[%d]=(%08lX) (%08lX) %s\r\n"
bprintf("local str[%d]=(%08X) (%p) %s\r\n"
,i,csi->str_var_name[i]
,csi->str_var[i]
,csi->str_var[i]);
for(i=0;i<csi->int_vars;i++)
bprintf("local int[%d]=(%08lX) (%08lX) %ld\r\n"
bprintf("local int[%d]=(%08X) (%08X) %d\r\n"
,i,csi->int_var_name[i]
,csi->int_var[i]
,csi->int_var[i]);
for(i=0;i<global_str_vars;i++)
bprintf("global str[%d]=(%08lX) (%08lX) %s\r\n"
bprintf("global str[%d]=(%08X) (%p) %s\r\n"
,i,global_str_var_name[i]
,global_str_var[i]
,global_str_var[i]);
for(i=0;i<global_int_vars;i++)
bprintf("global int[%d]=(%08lX) (%08lX) %ld\r\n"
bprintf("global int[%d]=(%08X) (%08X) %d\r\n"
,i,global_int_var_name[i]
,global_int_var[i]
,global_int_var[i]);
......
......@@ -153,7 +153,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode)
l++;
for(x=l;x>i;x--)
str1[x]=str1[x-1];
column+=rprintf("%.*s",l-i,str1+i);
column+=rprintf("%.*s",(int)(l-i),str1+i);
cursor_left(l-i);
#if 0
if(i==maxlen-1)
......@@ -526,7 +526,7 @@ size_t sbbs_t::getstr(char *strout, size_t maxlen, long mode)
l++;
for(x=l;x>i;x--)
str1[x]=str1[x-1];
column+=rprintf("%.*s",l-i,str1+i);
column+=rprintf("%.*s",(int)(l-i),str1+i);
cursor_left(l-i);
#if 0
if(i==maxlen-1) {
......
......@@ -530,7 +530,7 @@ bool sbbs_t::listfile(const char *fname, const char *buf, uint dirnum
attr(cfg.color[clr_filedesc]^HIGH);
bprintf("%.*s",i,str+j);
attr(cfg.color[clr_filedesc]);
bprintf("%.*s",strlen(str)-(j+i),str+j+i);
bprintf("%.*s",(int)(strlen(str)-(j+i)),str+j+i);
}
else
bputs(str);
......
......@@ -382,7 +382,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
for(u=0;u<mailmsgs;u++) {
if(online == ON_REMOTE)
bprintf("\b\b\b\b\b\b\b\b\b\b\b\b%4lu of %-4lu"
bprintf("\b\b\b\b\b\b\b\b\b\b\b\b%4u of %-4u"
,u+1,mailmsgs);
memset(&msg,0,sizeof(msg));
......@@ -509,7 +509,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
for(u=0;u<posts && !msgabort();u++) {
if(online == ON_REMOTE)
bprintf("\b\b\b\b\b%-5lu",u+1);
bprintf("\b\b\b\b\b%-5u",u+1);
subscan[usrsub[i][j]].ptr=post[u].idx.number; /* set ptr */
subscan[usrsub[i][j]].last=post[u].idx.number; /* set last read */
......
......@@ -136,53 +136,53 @@ void sbbs_t::msghdr(smbmsg_t* msg)
}
/* fixed fields */
bprintf("%-16.16s %08lX %04hX %.24s %s\r\n","when_written"
bprintf("%-16.16s %08X %04hX %.24s %s\r\n","when_written"
,msg->hdr.when_written.time, msg->hdr.when_written.zone
,timestr(msg->hdr.when_written.time)
,smb_zonestr(msg->hdr.when_written.zone,NULL));
bprintf("%-16.16s %08lX %04hX %.24s %s\r\n","when_imported"
bprintf("%-16.16s %08X %04hX %.24s %s\r\n","when_imported"
,msg->hdr.when_imported.time, msg->hdr.when_imported.zone
,timestr(msg->hdr.when_imported.time)
,smb_zonestr(msg->hdr.when_imported.zone,NULL));
bprintf("%-16.16s %04Xh\r\n","type" ,msg->hdr.type);
bprintf("%-16.16s %04Xh\r\n","version" ,msg->hdr.version);
bprintf("%-16.16s %04Xh\r\n","attr" ,msg->hdr.attr);
bprintf("%-16.16s %08lXh\r\n","auxattr" ,msg->hdr.auxattr);
bprintf("%-16.16s %08lXh\r\n","netattr" ,msg->hdr.netattr);
bprintf("%-16.16s %06lXh\r\n","header offset" ,msg->idx.offset);
bprintf("%-16.16s %u\r\n" ,"header length" ,msg->hdr.length);
bprintf("%-16.16s %ld\r\n" ,"number" ,msg->hdr.number);
bprintf("%-16.16s %04Xh\r\n" ,"type" ,msg->hdr.type);
bprintf("%-16.16s %04Xh\r\n" ,"version" ,msg->hdr.version);
bprintf("%-16.16s %04Xh\r\n" ,"attr" ,msg->hdr.attr);
bprintf("%-16.16s %08Xh\r\n" ,"auxattr" ,msg->hdr.auxattr);
bprintf("%-16.16s %08Xh\r\n" ,"netattr" ,msg->hdr.netattr);
bprintf("%-16.16s %06Xh\r\n" ,"header offset" ,msg->idx.offset);
bprintf("%-16.16s %u\r\n" ,"header length" ,msg->hdr.length);
bprintf("%-16.16s %d\r\n" ,"number" ,msg->hdr.number);
/* optional fixed fields */
if(msg->hdr.thread_id)
bprintf("%-16.16s %ld\r\n" ,"thread_id" ,msg->hdr.thread_id);
bprintf("%-16.16s %d\r\n" ,"thread_id" ,msg->hdr.thread_id);
if(msg->hdr.thread_back)
bprintf("%-16.16s %ld\r\n" ,"thread_back" ,msg->hdr.thread_back);
bprintf("%-16.16s %d\r\n" ,"thread_back" ,msg->hdr.thread_back);
if(msg->hdr.thread_next)
bprintf("%-16.16s %ld\r\n" ,"thread_next" ,msg->hdr.thread_next);
bprintf("%-16.16s %d\r\n" ,"thread_next" ,msg->hdr.thread_next);
if(msg->hdr.thread_first)
bprintf("%-16.16s %ld\r\n" ,"thread_first" ,msg->hdr.thread_first);
bprintf("%-16.16s %d\r\n" ,"thread_first" ,msg->hdr.thread_first);
if(msg->hdr.delivery_attempts)
bprintf("%-16.16s %hu\r\n" ,"delivery_attempts",msg->hdr.delivery_attempts);
bprintf("%-16.16s %hu\r\n" ,"delivery_attempts" ,msg->hdr.delivery_attempts);
if(msg->hdr.times_downloaded)
bprintf("%-16.16s %lu\r\n" ,"times_downloaded" ,msg->hdr.times_downloaded);
bprintf("%-16.16s %u\r\n" ,"times_downloaded" ,msg->hdr.times_downloaded);
if(msg->hdr.last_downloaded)
bprintf("%-16.16s %s\r\n" ,"last_downloaded" ,timestr(msg->hdr.last_downloaded));
if(msg->hdr.votes)
bprintf("%-16.16s %hu\r\n" ,"votes" ,msg->hdr.votes);
bprintf("%-16.16s %hu\r\n" ,"votes" ,msg->hdr.votes);
/* convenience integers */
if(msg->expiration)
bprintf("%-16.16s %s\r\n" ,"expiration"
bprintf("%-16.16s %s\r\n" ,"expiration"
,timestr(msg->expiration));
if(msg->priority)
bprintf("%-16.16s %lu\r\n" ,"priority" ,msg->priority);
bprintf("%-16.16s %u\r\n" ,"priority" ,msg->priority);
if(msg->cost)
bprintf("%-16.16s %lu\r\n" ,"cost" ,msg->cost);
bprintf("%-16.16s %u\r\n" ,"cost" ,msg->cost);
bprintf("%-16.16s %06lXh\r\n" ,"data offset" ,msg->hdr.offset);
bprintf("%-16.16s %06Xh\r\n" ,"data offset" ,msg->hdr.offset);
for(i=0;i<msg->hdr.total_dfields;i++)
bprintf("data field[%u] %s, offset %lu, length %lu\r\n"
bprintf("data field[%u] %s, offset %u, length %u\r\n"
,i
,smb_dfieldtype(msg->dfield[i].type)
,msg->dfield[i].offset
......@@ -461,8 +461,8 @@ void sbbs_t::show_thread(uint32_t msgnum, post_t* post, unsigned curmsg, int thr
// ,msg.hdr.number
,(unsigned)i == curmsg ? '>' : ':');
bprintf("\1w%-*.*s\1g%c\1g%c \1w%s\r\n"
,cols-column-12
,cols-column-12
,(int)(cols-column-12)
,(int)(cols-column-12)
,msg.hdr.attr&MSG_ANONYMOUS && !sub_op(smb.subnum)
? text[Anonymous] : msg.from
,(unsigned)i == curmsg ? '<' : ' '
......@@ -735,7 +735,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
break;
}
bprintf("\1n\1l\1h\1bThread\1n\1b: \1h\1c");
bprintf("%-.*s\r\n", cols-(column+1), msg.subj);
bprintf("%-.*s\r\n", (int)(cols-(column+1)), msg.subj);
show_thread(first, post, smb.curmsg);
subscan[subnum].last = post[smb.curmsg].idx.number;
}
......
......@@ -686,8 +686,16 @@ public:
/* con_out.cpp */
int bputs(const char *str); /* BBS puts function */
int rputs(const char *str, size_t len=0); /* BBS raw puts function */
int bprintf(const char *fmt, ...); /* BBS printf function */
int rprintf(const char *fmt, ...); /* BBS raw printf function */
int bprintf(const char *fmt, ...) /* BBS printf function */
#if defined(__GNUC__) // Catch printf-format errors
__attribute__ ((format (printf, 2, 3))); // 1 is 'this'
#endif
;
int rprintf(const char *fmt, ...) /* BBS raw printf function */
#if defined(__GNUC__) // Catch printf-format errors
__attribute__ ((format (printf, 2, 3))); // 1 is 'this'
#endif
;
void backspace(void); /* Output a destructive backspace via outchar */
void outchar(char ch); /* Output a char - check echo and emu. */
void center(char *str);
......@@ -811,7 +819,11 @@ public:
/* main.cpp */
int lputs(int level, const char* str);
int lprintf(int level, const char *fmt, ...);
int lprintf(int level, const char *fmt, ...)
#if defined(__GNUC__) // Catch printf-format errors
__attribute__ ((format (printf, 3, 4))); // 1 is 'this'
#endif
;
void printstatslog(uint node);
ulong logonstats(void);
void logoffstats(void);
......
......@@ -1067,7 +1067,7 @@ bool sbbs_t::spy(uint i /* node_num */)
return(false);
}
if(spy_socket[i-1]!=INVALID_SOCKET) {
bprintf("Node %d already being spied (%lx)\r\n",i,spy_socket[i-1]);
bprintf("Node %d already being spied (%x)\r\n",i,spy_socket[i-1]);
return(false);
}
bprintf("*** Synchronet Remote Spy on Node %d: Ctrl-C to Abort ***"
......
......@@ -827,14 +827,14 @@ ulong sbbs_t::msgeditor(char *buf, const char *top, char *title)
if(sys_status&SS_ABORT) {
if(line==lines)
free(str[line]);
continue;
continue;
}
if(strin[0]=='/' && strlen(strin)<8) {
if(!stricmp(strin,"/DEBUG") && SYSOP) {
if(line==lines)
free(str[line]);
bprintf("\r\nline=%d lines=%d rows=%d\r\n",line,lines,rows);
continue;
bprintf("\r\nline=%d lines=%d rows=%ld\r\n",line,lines,rows);
continue;
}
else if(!stricmp(strin,"/ABT")) {
if(line==lines) /* delete a line */
......@@ -842,7 +842,7 @@ ulong sbbs_t::msgeditor(char *buf, const char *top, char *title)
for(i=0;i<lines;i++)
free(str[i]);
free(str);
return(0);
return(0);
}
else if(toupper(strin[1])=='D') {
if(line==lines) /* delete a line */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment