diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index 1b4fc9bba6ad2a5b6742f533cb769840fc3f59b7..600be5a12cd20651b568520b3d6bdaa25892adc1 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -768,8 +768,8 @@ public: , int mode = WM_NONE, smb_t* resmb = NULL, smbmsg_t* remsg = NULL); bool forwardmsg(smb_t*, smbmsg_t*, const char* to, const char* subject = NULL, const char* comment = NULL); void removeline(char *str, char *str2, char num, char skip); - uint msgeditor(char *buf, const char *top, char *title); - bool editfile(char *path, bool msg=false); + uint msgeditor(char *buf, const char *top, char *title, uint max_lines, uint max_line_len); + bool editfile(char *path, uint max_lines = 10000); ushort chmsgattr(const smbmsg_t*); bool quotemsg(smb_t*, smbmsg_t*, bool tails = false); bool editmsg(smb_t*, smbmsg_t*); diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp index a9c1d5f52fd87244b91bbf0f16168c86e17590d9..e732e39457d14ed9a4967ce4615d8865c92154bf 100644 --- a/src/sbbs3/useredit.cpp +++ b/src/sbbs3/useredit.cpp @@ -1083,7 +1083,7 @@ void sbbs_t::maindflts(user_t* user) if(fexist(str) && yesno(text[ViewSignatureQ])) printfile(str,P_NOATCODES); if(!noyes(text[CreateEditSignatureQ])) - editfile(str); + editfile(str, cfg.level_linespermsg[user->level] / 10); else if(fexist(str) && !noyes(text[DeleteSignatureQ])) remove(str); break; diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp index 5dd90838eddfe63f6f0be79d6713fb82cc46e124..2c271c6bb3f0620d1bf09b0c40eb54abfbe32899 100644 --- a/src/sbbs3/writemsg.cpp +++ b/src/sbbs3/writemsg.cpp @@ -25,7 +25,6 @@ #include "git_branch.h" #include "git_hash.h" -#define MAX_LINES 10000 #define MAX_LINE_LEN ((cols - 1) + 2) const char *quote_fmt=" > %.*s\r\n"; @@ -687,7 +686,7 @@ bool sbbs_t::writemsg(const char *fname, const char *top, char *subj, int mode, // remove(msgtmp); } } - if(!(msgeditor((char *)buf,mode&WM_NOTOP ? nulstr : top, subj))) { + if(!(msgeditor((char *)buf,mode&WM_NOTOP ? nulstr : top, subj, cfg.level_linespermsg[useron_level], MAX_LINE_LEN))) { if(!online) { FILE* fp = fopen(draft, "wb"); if(fp == NULL) @@ -916,9 +915,10 @@ void sbbs_t::removeline(char *str, char *str2, char num, char skip) /* The Synchronet editor. */ /* Returns the number of lines edited. */ /*****************************************************************************/ -uint sbbs_t::msgeditor(char *buf, const char *top, char *title) +uint sbbs_t::msgeditor(char *buf, const char *top, char *title, uint maxlines, uint max_line_len) { - int i,j,line,lines=0,maxlines; + int i,j; + uint line,lines=0; char strin[TERM_COLS_MAX + 1]; char tmp[512]; str_list_t str; @@ -932,8 +932,6 @@ uint sbbs_t::msgeditor(char *buf, const char *top, char *title) rioctl(IOCM|ABORT); rioctl(IOCS|ABORT); - maxlines=cfg.level_linespermsg[useron.level]; - if((str = strListDivide(NULL, buf, "\n")) == NULL) { errormsg(WHERE,ERR_ALLOC,"msgeditor",sizeof(char *)*(maxlines+1)); return(0); @@ -967,7 +965,7 @@ uint sbbs_t::msgeditor(char *buf, const char *top, char *title) while(online) { if(line < 0) line = 0; - if(line>(maxlines-10)) { + if((int)line>(int)maxlines-10) { if(line >= maxlines) bprintf(text[NoMoreLines],line); else @@ -1045,12 +1043,12 @@ uint sbbs_t::msgeditor(char *buf, const char *top, char *title) i=atoi(strin+2)-1; if(i==-1) /* /D means delete last line */ i=lines-1; - if(i>=lines || i<0) + if(i>=(int)lines || i<0) bputs(text[InvalidLineNumber]); else { free(str[i]); lines--; - while(i<lines) { + while(i<(int)lines) { str[i]=str[i+1]; i++; } @@ -1067,7 +1065,7 @@ uint sbbs_t::msgeditor(char *buf, const char *top, char *title) i=atoi(strin+2)-1; if(i < 0) i = lines - 1; - if(i >= lines || i < 0) + if(i >= (int)lines || i < 0) bputs(text[InvalidLineNumber]); else { strListInsert(&str, "", i); @@ -1085,7 +1083,7 @@ uint sbbs_t::msgeditor(char *buf, const char *top, char *title) i=lines-1; j|=K_WRAP; /* wrap when editing last line */ } - if(i>=lines || i<0) + if(i>=(int)lines || i<0) bputs(text[InvalidLineNumber]); else { SAFECOPY(strin, str[i]); @@ -1208,8 +1206,8 @@ uint sbbs_t::msgeditor(char *buf, const char *top, char *title) errormsg(WHERE, ERR_CHK, tmp, lines); lines = maxlines; } - for(i=0;i<lines;i++) - snprintf(buf + strlen(buf), MAX_LINE_LEN, "%s\r\n", str[i]); + for(i=0;i<(int)lines;i++) + snprintf(buf + strlen(buf), max_line_len, "%s\r\n", str[i]); strListFree(&str); if(!online) return 0; @@ -1219,29 +1217,25 @@ uint 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 msg) +bool sbbs_t::editfile(char *fname, uint maxlines) { char *buf,path[MAX_PATH+1]; char msgtmp[MAX_PATH+1]; char str[MAX_PATH+1]; int file; - long length,maxlines,l,mode=0; + long length,l,mode=0; FILE* stream; unsigned lines; ushort useron_xedit = useron.xedit; - if(cols < 2) { - errormsg(WHERE, ERR_CHK, "columns", cols); + if(cols < TERM_COLS_MIN) { + errormsg(WHERE, ERR_CHK, "columns (too narrow)", cols); return false; } if(useron_xedit && !chk_ar(cfg.xedit[useron_xedit-1]->ar, &useron, &client)) useron_xedit = 0; - if(msg) - maxlines=cfg.level_linespermsg[useron.level]; - else - maxlines=MAX_LINES; quotes_fname(useron_xedit, path, sizeof(path)); (void)removecase(path); @@ -1306,7 +1300,7 @@ bool sbbs_t::editfile(char *fname, bool msg) buf[0]=0; bputs(text[NewFile]); } - if(!msgeditor(buf,nulstr,/* title: */(char*)nulstr)) { + if(!msgeditor(buf,nulstr,/* title: */(char*)nulstr, maxlines, MAX_LINE_LEN)) { free(buf); return false; } @@ -1640,7 +1634,7 @@ bool sbbs_t::editmsg(smb_t* smb, smbmsg_t *msg) msg_tmp_fname(useron.xedit, msgtmp, sizeof(msgtmp)); (void)removecase(msgtmp); msgtotxt(smb, msg, msgtmp, /* header: */false, /* mode: */is_msg ? GETMSGTXT_ALL : GETMSGTXT_BODY_ONLY); - if(!editfile(msgtmp, is_msg)) + if(!editfile(msgtmp, cfg.level_linespermsg[useron.level])) return false; length=(long)flength(msgtmp); if(length<1L)