diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2010-11-07 11:06:09 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2010-11-07 11:06:09 +0800 |
commit | bc0da295327a9ab9c70bdb0fedb9c4426abcb9f8 (patch) | |
tree | 02b0adeeedde8f6134d13a5daf1d3ab1ac368588 | |
parent | 1d1ce992d498b4756eba670afbf447302a4a7e97 (diff) | |
download | pttbbs-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.c | 39 |
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; |