在firebird2.65下编译通过,别的版本没试过。
修改其中的"W 特殊权限 1"为"W 大信箱",具有该权限的用户信箱大小为200K,
版主信箱大小为100K,普通用户40K,未通过注册用户为5K。当信箱超过容量时
不能发信,超过容量的两倍时不能收信。
由于修改的文件太多,可能有个别修改了的地方忘了贴上来,要是有编译或使用
不对的,请和我联系,我再检查一下。
1.bbs.c
在int post_reply()的switch (do_send(uid,title))中,加入
case -4: prints("使用者 '%s' 无法收信,信箱已满\n",uid);break;
2.mail.c
在int do_send()中,加入
if(getmailboxsize(lookupuser)*2<getmailsize(lookupuser))
return -4;
在int m_send()的switch (do_send(uident,NULL))中,加入
case -4: prints("[%s] 信箱已满,无法收信\n",uident);break;
修改void mailtitle()为
void mailtitle()
{
int total,used;
total=getmailboxsize(currentuser) ;
used=getmailsize(currentuser);
showtitle( "邮件选单 ", BoardName );
prints( "离开[^[[1;32m←^[[m,^[[1;32me^[[m] 选择[^[[1;32m↑^[[m,
^[[1;32m↓^[[m] 阅读信件[^[[1;32m→^[[m,^[[1;32mRtn^[[m] 回
信[^[[1;32mR^[[m] 砍信/清除旧信[^[[1;32md^[[m,^[[1;32mD^[[m]
求助[^[[1;32mh^[[m]^[[m\n" );
/*这四行应该为一行*/
prints("^[[1;44m编号 发信者 日 期 标题 您的信箱
容量为[%4dK],当前已用[%4dK]^[[m\n",total,used);
/*这两行应该为一行*/
clrtobot() ;
}
添加下面两个函数
int getmailboxsize(user)
struct userec user;
{
if(user.userlevel&(PERM_LARGEMAIL)) return 200;
if(user.userlevel&(PERM_BOARDS)) return 100;
if(user.userlevel&(PERM_LOGINOK)) return 40;
return 5;
}
int getmailsize(user)
struct userec user;
{
FILE *tempfile;
int size;
char filename[256],cmd[256],mailpath[256];
sprintf(mailpath,"mail/%c/%s/",toupper(user.userid[0]),user.userid);
sprintf(filename,"tmp/size.%s.%d",user.userid,uinfo.pid);
sprintf(cmd,"du %s > %s",mailpath,filename);
system(cmd);
if((tempfile=fopen(filename,"r"))==NULL) return 0;
if((fscanf(tempfile,"%d",&size))==0) return 0;
fclose(tempfile);
unlink(filename);
return size;
}
在int mail_reply()的switch (do_send(uid,title))中,加入
case -4: prints("[%s] 信箱已满,无法收信\n", uid); break;
在int doforward()的sprintf( genbuf, "确定将文章寄给 %s 吗", address );
前,加入
if(!strpbrk(address,"@."))
if(getmailboxsize(lookupuser)*2<getmailsize(lookupuser)){
prints("[%s] 信箱已满,无法收信。\n",address);
return -4;
}
在int do_send()的if (!(lookupuser.userlevel & PERM_READMAIL))后,加入
if(getmailboxsize(lookupuser)*2<getmailsize(lookupuser))
return -4;
3.main.c
在int check_maxmail()中,return(0);前加入
if(getmailboxsize(currentuser)<getmailsize(currentuser)){
prints("\n\n您的信箱总容量为 %d K,已经使用了 %d K,超出限制。\n",
getmailboxsize(currentuser),getmailsize(currentuser));
prints("您无法继续寄信。请删除 %d K信件后再寄信。\n",
getmailsize(currentus)-getmailboxsize(currentuser));
return -4;
}
4.permission.h
修改#define PERM_SPECIAL1 020000000为
#define PERM_LARGEMAIL 020000000
修改"特殊权限 1", /* PERM_SPECLAI1*/为
"大信箱", /* PERM_LARGEMAIL*/
--
修改:yanglc FROM 162.105.11.122
FROM 162.105.11.122