--- sbbs/src/sbbs3/viewfile.cpp 2018/04/24 16:41:23 1.1 +++ sbbs/src/sbbs3/viewfile.cpp 2018/04/24 16:42:53 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet file contents display routines */ -/* $Id: viewfile.cpp,v 1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: viewfile.cpp,v 1.1.1.2 2018/04/24 16:42:53 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2010 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -73,7 +73,9 @@ int sbbs_t::viewfile(file_t* f, int ext) ext=0; continue; case CR: - return(1); } } + return(1); + } + } return(0); } @@ -91,47 +93,52 @@ void sbbs_t::viewfiles(uint dirnum, char sprintf(viewcmd,"%s%s",cfg.dir[dirnum]->path,fspec); if(!fexist(viewcmd)) { bputs(text[FileNotFound]); - return; } + return; + } padfname(fspec,tmp); truncsp(tmp); for(i=0;iext) && chk_ar(cfg.fview[i]->ar,&useron)) { + if(!stricmp(tmp+9,cfg.fview[i]->ext) && chk_ar(cfg.fview[i]->ar,&useron,&client)) { strcpy(viewcmd,cfg.fview[i]->cmd); - break; } + break; + } if(i==cfg.total_fviews) { bprintf(text[NonviewableFile],tmp+9); - return; } + return; + } sprintf(tmp,"%s%s",cfg.dir[dirnum]->path,fspec); - if((i=external(cmdstr(viewcmd,tmp,tmp,NULL),EX_OUTL|EX_OUTR|EX_INR|EX_SH))!=0) - errormsg(WHERE,ERR_EXEC,viewcmd,i); /* must of EX_SH to ^C */ + if((i=external(cmdstr(viewcmd,tmp,tmp,NULL),EX_STDIO|EX_SH))!=0) + errormsg(WHERE,ERR_EXEC,viewcmd,i); /* must have EX_SH to ^C */ } /****************************************************************************/ /****************************************************************************/ void sbbs_t::viewfilecontents(file_t* f) { - char str[128],cmd[128]; - char tmp[512]; + char cmd[128]; + char path[MAX_PATH+1]; + char* ext; int i; - if(f->size<=0L) { - bputs(text[FileNotThere]); - return; } + getfilepath(&cfg, f, path); - sprintf(str,"%s%s",f->altpath > 0 && f->altpath<=cfg.altpaths - ? cfg.altpath[f->altpath-1] : cfg.dir[f->dir]->path - ,unpadfname(f->name,tmp)); - strcpy(tmp,f->name); - truncsp(tmp); - for(i=0;iext) - && chk_ar(cfg.fview[i]->ar,&useron)) { - strcpy(cmd,cfg.fview[i]->cmd); - break; } } - if(i==cfg.total_fviews) - bprintf(text[NonviewableFile],tmp+9); + if(f->size<=0L) { + bprintf(text[FileDoesNotExist],path); + return; + } + if((ext=getfext(path))!=NULL) { + ext++; + for(i=0;iext) + && chk_ar(cfg.fview[i]->ar,&useron,&client)) { + strcpy(cmd,cfg.fview[i]->cmd); + break; + } + } + } + if(ext==NULL || i==cfg.total_fviews) + bprintf(text[NonviewableFile],ext); else - if((i=external(cmdstr(cmd,str,str,NULL) - ,EX_OUTL|EX_OUTR|EX_INR))!=0) - errormsg(WHERE,ERR_EXEC,cmdstr(cmd,str,str,NULL),i); + if((i=external(cmdstr(cmd,path,path,NULL),EX_STDIO))!=0) + errormsg(WHERE,ERR_EXEC,cmdstr(cmd,path,path,NULL),i); }