summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2010-11-07 11:06:09 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2010-11-07 11:06:09 +0800
commitbc0da295327a9ab9c70bdb0fedb9c4426abcb9f8 (patch)
tree02b0adeeedde8f6134d13a5daf1d3ab1ac368588
parent1d1ce992d498b4756eba670afbf447302a4a7e97 (diff)
downloadpttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.tar
pttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.tar.gz
pttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.tar.bz2
pttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.tar.lz
pttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.tar.xz
pttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.tar.zst
pttbbs-bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8.zip
D in man should check directory.
D in mail/board should check mark. git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5220 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--pttbbs/mbbsd/bbs.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/pttbbs/mbbsd/bbs.c b/pttbbs/mbbsd/bbs.c
index 6630fad8..19a1677d 100644
--- a/pttbbs/mbbsd/bbs.c
+++ b/pttbbs/mbbsd/bbs.c
@@ -3095,6 +3095,7 @@ del_range(int ent, const fileheader_t *fhdr, const char *direct,
int num1, num2, num, cdeleted = 0;
fileheader_t *recs = NULL;
int ret = 0;
+ int check_mark = 1;
#ifdef SAFE_ARTICLE_DELETE
int use_safe_delete = 0;
@@ -3153,7 +3154,14 @@ del_range(int ent, const fileheader_t *fhdr, const char *direct,
num1, IDLEN, recs[0].owner, recs[0].title,
num2, IDLEN, recs[num-1].owner, recs[num-1].title);
- getdata(10, 0, msg_sure_yn, numstr, 3, LCECHO);
+ // HACK: warn if target is man.
+ if (*direct == 'm') {
+ outs("(範圍內的子目錄會被自動跳過,請另行用小 d 刪除)\n");
+ // do not check mark in man
+ check_mark = 0;
+ }
+
+ getdata(10, 0, msg_sure_ny, numstr, 3, LCECHO);
if (*numstr != 'y') {
free(recs);
return FULLUPDATE;
@@ -3167,23 +3175,42 @@ del_range(int ent, const fileheader_t *fhdr, const char *direct,
do {
int id = num1, i;
for (i = 0; ret == 0 && i < num; i++) {
- // TODO now we can read file header and check MARK.
+ // first, check if the record is ready for being deleted.
+ fileheader_t *fh = recs + i;
+ const char *bypass = NULL;
+
+ if (check_mark && fh->filemode & FILE_MARKED) {
+ bypass = "標記為 m 的項目";
+ } else {
+ char xfpath[PATHLEN];
+ setdirpath(xfpath, direct, fh->filename);
+ if (dashd(xfpath)) {
+ bypass = "子目錄";
+ }
+ }
+
+ if (bypass) {
+ id++;
+ mvprints(b_lines-1, 0, "跳過%s: %s\n", bypass, fh->title);
+ doupdate();
+ continue;
+ }
+
#ifdef SAFE_ARTICLE_DELETE
if (use_safe_delete &&
- safe_article_delete(id, recs+i, direct, NULL) == 0) {
+ safe_article_delete(id, fh, direct, NULL) == 0) {
id++;
}
else
#endif
- if (delete_fileheader(direct, recs+i, id) == 0) {
+ if (delete_fileheader(direct, fh, id) == 0) {
// no need to add id
} else {
ret = -1;
break;
}
- // delete file
if (!IS_DELETE_FILE_CONTENT_OK(
- delete_file_content(direct, recs+i,
+ delete_file_content(direct, fh,
backup_direct, NULL, 0))) {
ret = -1;
break;