作者BioStar.bbs@micro.bio.ncue.edu.tw (澎湖小雲雀) 看板: itoc
標題[文件] 精華區的篇數上限和容量上限
時間擎天崗 (Sun, 06 Jul 2003 15:21:41 +0800 (CST)) Updated: 2005/10/07
(5) 檢查的主程式
: maple/bbsd.c:tn_login()
-#ifndef LINUX /* 在 Linux 下這檢查怪怪的 */
- /* itoc.010924: 檢查個人精華區是否過多 */
- usr_fpath(fpath, cuser.userid, "gem");
- {
- struct stat st;
-
- if (!stat(fpath, &st) && (st.st_size >= 512 * 7))
- {
- cuser.userlevel &= ~PERM_POST;
- bell();
- more("etc/mboxgem.over", NULL);
- }
- }
-#endif
: maple/gem.c
extern int TagNum;
extern TagItem TagList[];
+ extern BCACHE *bshm;
: maple/gem.c 開啟 gem_bno()
- #if 0
static int /* -1:不是看板精華區 >=0:bno */
gem_bno(xo)
XO *xo;
{
...
}
- #endif
: maple/gem.c:新增 gem_checksize() 於 gem_add() 之前
static int /* 1:過大 0:沒有過大 */
gem_checksize(xo, filenum, filesize)
XO *xo;
int *filenum, *filesize;
{
int i, total_n, total_k;
char *ptr, *str, fpath[64];
struct stat st;
struct dirent *de;
DIR *dirp;
if (HAS_PERM(PERM_ALLBOARD)) /* 站長和看板總管不受限制 */
return 0;
if (*xo->dir == 'g')
{
if ((i = gem_bno(xo)) < 0) /* 如果是 (A)nnounce 的話,跳過 */
return 0;
if ((bshm->bcache + i)->battr & BRD_NOGEMCHECK)
return 0;
strcpy(fpath, xo->dir);
if (!(str = strchr(fpath + 8, '/')))
return 0;
strcpy(str + 1, fn_dir);
}
else /* if (*xo->dir == 'u') */
{
if (HAS_PERM(PERM_MYGEM))
return 0;
usr_fpath(fpath, cuser.userid, "gem/" FN_DIR);
}
if (!stat(fpath, &st))
total_n = st.st_size;
else
total_n = 0;
if (!total_n) /* .DIR 開啟失敗或 size=0 表示沒有精華區 */
return 0;
total_k = 0;
ptr = (char *) strchr(fpath, '.');
/* 看板精華區要檢查 32 個子目錄,個人精華區只需檢查 1 個子目錄 */
for (i = (*xo->dir == 'g') ? 31 : 0; i >= 0; i--)
{
*ptr = radix32[i];
*(ptr + 1) = '\0';
if (!(dirp = opendir(fpath)))
continue;
*(ptr + 1) = '/';
while (de = readdir(dirp))
{
str = de->d_name;
if (*str <= ' ' || *str == '.')
continue;
strcpy(ptr + 2, str);
if (!stat(fpath, &st))
{
if (*str == 'F')
total_n += st.st_size;
else if (*str == 'A')
total_k += st.st_size;
}
}
closedir(dirp);
}
/* 過大的檢查 */
if (*xo->dir == 'g')
{
BRD *brd;
int bno;
if ((bno = gem_bno(xo)) < 0)
return 0;
brd = bshm->bcache + bno;
if (total_n >= brd->gemsize_n * sizeof(HDR) || total_k >= brd->gemsize_k)
{
*filenum = total_n / sizeof(HDR);
*filesize = total_k;
return 1;
}
}
else
{
if (total_n >= cuser.gemsize_n * sizeof(HDR) || total_k >= cuser.gemsize_k)
{
*filenum = total_n / sizeof(HDR);
*filesize = total_k;
return 1;
}
}
return 0;
}
: maple/gem.c:gem_add()
level = xo->key;
if (level < GEM_MANAGER) /* [回收筒] 中不能新增 */
return XO_NONE;
+ if (gem_checksize(xo, &fd, &ans)) /* 借用 fd 和 ans */
+ {
+ /* 告訴使用者是用了多少,讓他服氣些 */
+ sprintf(fpath, "精華區檔案數:%d,總大小:%dKB,請刪除一些文章",
+ fd, ans >> 10);
+ vmsg(fpath);
+ return XO_FOOT;
+ }
: maple/gem.c:gem_paste()
if (!(xo->key & GEM_W_BIT))
return XO_NONE;
+ if (gem_checksize(xo, &num, &ans)) /* 借用 num 和 ans */
+ {
+ char msg[80];
+ /* 告訴使用者是用了多少,讓他服氣些 */
+ sprintf(msg, "精華區檔案數:%d,總大小:%dKB,請刪除一些文章",
+ num, ans >> 10);
+ vmsg(msg);
+ return XO_FOOT;
+ }
: maple/gem.c:gem_anchor()
int ans;
char *folder;
+ int gemsize, filenum;
+ char msg[80];
...
...
ans = vans("精華區 A)定錨 D)拔錨 J)就位 Q)取消 [A] ");
if (ans != 'q')
{
folder = GemAnchor;
+ /* 精華區容量達到上限就禁止定錨,但允許拔錨和就位 */
+ if (gem_checksize(xo, &fd, &ans) && ans != 'j' && ans != 'd')
+ if (ans != 'j' && ans != 'd' && gem_checksize(xo, &filenum, &gemsize))
+ {
+ /* 告訴使用者是用了多少,讓他服氣些 */
+ sprintf(fpath, "精華區檔案數:%d,總大小:%dKB,請刪除一些文章",
+ fd, ans / 1024);
+ vmsg(fpath);
+ return XO_FOOT;
+ }
--
| Origin | 彰化師大生物系 吟風‧眺月‧擎天崗 micro.bio.ncue.edu.tw
| Author | 218-163-206-115.HINET-IP.hinet.net