From cdcdf0534ebf518ec6beaa3f9eacc7bd82733a0d Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 2 Nov 2011 09:07:24 +0000 Subject: [PATCH] Allow "MAX_LINES" (defined here as 10000) when editing/creating text files regardless of security level setting. When run out of lines when creating/editing a file or msg, print a more meaningful message, in text.dat update (with the max lines allowed). --- src/sbbs3/sbbs.h | 6 +++--- src/sbbs3/writemsg.cpp | 32 ++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index f72395b357..9f7af20890 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -508,7 +508,7 @@ public: void forwardmail(smbmsg_t* msg, int usernum); void removeline(char *str, char *str2, char num, char skip); ulong msgeditor(char *buf, const char *top, char *title); - bool editfile(char *path); + bool editfile(char *path, bool msg=false); int loadmsg(smbmsg_t *msg, ulong number); ushort chmsgattr(ushort attr); void show_msgattr(ushort attr); @@ -521,8 +521,8 @@ public: ,uint subnum); void copyfattach(uint to, uint from, char *title); bool movemsg(smbmsg_t* msg, uint subnum); - int process_edited_text(char* buf, FILE* stream, long mode, unsigned* lines); - int process_edited_file(const char* src, const char* dest, long mode, unsigned* lines); + int process_edited_text(char* buf, FILE* stream, long mode, unsigned* lines, unsigned maxlines); + int process_edited_file(const char* src, const char* dest, long mode, unsigned* lines, unsigned maxlines); /* postmsg.cpp */ bool postmsg(uint subnum, smbmsg_t* msg, long wm_mode); diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp index 41759bc256..97c2ab8c7b 100644 --- a/src/sbbs3/writemsg.cpp +++ b/src/sbbs3/writemsg.cpp @@ -38,7 +38,8 @@ #include "sbbs.h" #include "wordwrap.h" -#define MAX_LINE_LEN 82L +#define MAX_LINES 10000 +#define MAX_LINE_LEN 82 /* not strictly enforced, mostly used as a multiplier */ const char *quote_fmt=" > %.*s\r\n"; void quotestr(char *str); @@ -104,12 +105,12 @@ void sbbs_t::quotemsg(smbmsg_t* msg, int tails) /****************************************************************************/ /****************************************************************************/ -int sbbs_t::process_edited_text(char* buf, FILE* stream, long mode, unsigned* lines) +int sbbs_t::process_edited_text(char* buf, FILE* stream, long mode, unsigned* lines, unsigned maxlines) { - int i,l; + unsigned i,l; int len=0; - for(l=i=0;buf[l] && i<cfg.level_linespermsg[useron.level];l++) { + for(l=i=0;buf[l] && i<maxlines;l++) { if((uchar)buf[l]==141 && useron.xedit && cfg.xedit[useron.xedit-1]->misc&QUICKBBS) { len+=fwrite(crlf,1,2,stream); @@ -144,7 +145,7 @@ int sbbs_t::process_edited_text(char* buf, FILE* stream, long mode, unsigned* li } if(buf[l]) - bputs(text[NoMoreLines]); + bprintf(text[NoMoreLines], i); if(lines!=NULL) *lines=i; @@ -153,7 +154,7 @@ int sbbs_t::process_edited_text(char* buf, FILE* stream, long mode, unsigned* li /****************************************************************************/ /****************************************************************************/ -int sbbs_t::process_edited_file(const char* src, const char* dest, long mode, unsigned* lines) +int sbbs_t::process_edited_file(const char* src, const char* dest, long mode, unsigned* lines, unsigned maxlines) { char* buf; long len; @@ -173,7 +174,7 @@ int sbbs_t::process_edited_file(const char* src, const char* dest, long mode, un fclose(fp); if((fp=fopen(dest,"wb"))!=NULL) { - len=process_edited_text(buf, fp, mode, lines); + len=process_edited_text(buf, fp, mode, lines, maxlines); fclose(fp); } free(buf); @@ -538,7 +539,7 @@ bool sbbs_t::writemsg(const char *fname, const char *top, char *title, long mode free(buf); return(false); } - l=process_edited_text(buf,stream,mode,&lines); + l=process_edited_text(buf,stream,mode,&lines,cfg.level_linespermsg[useron_level]); /* Signature file */ if((subnum==INVALID_SUB && cfg.msg_misc&MM_EMAILSIG) @@ -781,7 +782,7 @@ ulong sbbs_t::msgeditor(char *buf, const char *top, char *title) } if(line>(maxlines-10)) { if(line==maxlines) - bputs(text[NoMoreLines]); + bprintf(text[NoMoreLines],line); else bprintf(text[OnlyNLinesLeft],maxlines-line); } @@ -981,7 +982,7 @@ ulong sbbs_t::msgeditor(char *buf, const char *top, char *title) /****************************************************************************/ /* Edits an existing file or creates a new one in MSG format */ /****************************************************************************/ -bool sbbs_t::editfile(char *fname) +bool sbbs_t::editfile(char *fname, bool msg) { char *buf,path[MAX_PATH+1]; char msgtmp[MAX_PATH+1]; @@ -991,7 +992,10 @@ bool sbbs_t::editfile(char *fname) FILE* stream; unsigned lines; - maxlines=cfg.level_linespermsg[useron.level]; + if(msg) + maxlines=cfg.level_linespermsg[useron.level]; + else + maxlines=MAX_LINES; quotes_fname(useron.xedit, path, sizeof(path)); removecase(path); @@ -1020,7 +1024,7 @@ bool sbbs_t::editfile(char *fname) rioctl(IOCM|PAUSE|ABORT); if(external(cmdstr(cfg.xedit[useron.xedit-1]->rcmd,msgtmp,nulstr,NULL),mode,cfg.node_dir)!=0) return false; - l=process_edited_file(msgtmp, path, /* mode: */0, &lines); + l=process_edited_file(msgtmp, path, /* mode: */0, &lines,maxlines); if(l>0) { SAFEPRINTF4(str,"%s created or edited file: %s (%u bytes, %u lines)" ,useron.alias, path, l, lines); @@ -1066,7 +1070,7 @@ bool sbbs_t::editfile(char *fname) free(buf); return false; } - l=process_edited_text(buf,stream,/* mode: */0,&lines); + l=process_edited_text(buf,stream,/* mode: */0,&lines,maxlines); bprintf(text[SavedNBytes],l,lines); fclose(stream); free(buf); @@ -1296,7 +1300,7 @@ void sbbs_t::editmsg(smbmsg_t *msg, uint subnum) msg_tmp_fname(useron.xedit, msgtmp, sizeof(msgtmp)); removecase(msgtmp); msgtotxt(msg,msgtmp,0,1); - if(!editfile(msgtmp)) + if(!editfile(msgtmp, /* msg: */true)) return; length=(long)flength(msgtmp); if(length<1L) -- GitLab