summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2010-10-24 22:59:59 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2010-10-24 22:59:59 +0800
commitb43e85cdcb9de8771ae567f1bcb4e18d3943ee53 (patch)
treeaf8cdf3abde8b35651748193612ad99a039c0389
parentd76d5277ab6587f3a5fcda5bf0b6c37de0cd1432 (diff)
downloadpttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar
pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.gz
pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.bz2
pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.lz
pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.xz
pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.zst
pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.zip
for edit history, prevent the <NUL> dirty hack and use ".d"->"M.".
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5164 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--pttbbs/include/common.h1
-rw-r--r--pttbbs/mbbsd/bbs.c21
-rw-r--r--pttbbs/mbbsd/record.c4
3 files changed, 25 insertions, 1 deletions
diff --git a/pttbbs/include/common.h b/pttbbs/include/common.h
index baead6ee..7609d1d0 100644
--- a/pttbbs/include/common.h
+++ b/pttbbs/include/common.h
@@ -59,6 +59,7 @@
#ifdef USE_EDIT_HISTORY
// For edit_history, the new file name must be as short as possible so that so we can restore it later.
#define FN_SAFEDEL ".d"
+#define FN_SAFEDEL_PREFIX_LEN (2) // must match FN_SAFEDEL
#else
#define FN_SAFEDEL ".deleted"
#endif // USE_EDIT_HISTORY
diff --git a/pttbbs/mbbsd/bbs.c b/pttbbs/mbbsd/bbs.c
index 3c94ad0e..acd74b36 100644
--- a/pttbbs/mbbsd/bbs.c
+++ b/pttbbs/mbbsd/bbs.c
@@ -950,7 +950,11 @@ delete_allpost(const char *userid)
// usually delete_allpost are initiated by system,
// so don't set normal safedel.
+#ifdef FN_SAFEDEL_PREFIX_LEN
+ strncpy(fhdr.filename, FN_SAFEDEL, FN_SAFEDEL_PREFIX_LEN);
+#else
strcpy(fhdr.filename, FN_SAFEDEL);
+#endif
strcpy(fhdr.owner, "-");
snprintf(fhdr.title, sizeof(fhdr.title),
"%s", STR_SAFEDEL_TITLE);
@@ -3562,18 +3566,33 @@ view_post_history(int ent, const fileheader_t * fhdr, const char *direct)
if ((!fhdr) ||
((fhdr->filename[0] == '.' || !fhdr->filename[0]) &&
- (strcmp(fhdr->filename, FN_SAFEDEL) != 0))) {
+#ifdef FN_SAFEDEL_PREFIX_LEN
+ (strncmp(fhdr->filename, FN_SAFEDEL, FN_SAFEDEL_PREFIX_LEN) != 0)
+#else
+ (strcmp(fhdr->filename, FN_SAFEDEL) != 0)
+#endif
+ )) {
vmsg(err_no_history);
return FULLUPDATE;
}
// build history index file name
setdirpath(hist_file, direct, FN_EDITHISTORY "/");
+ // XXX there are, well, unfortunately two kinds of deleted filename here:
+ // M.12345678.AAA ->
+ // - (old) .d<NUL>2345678.AAA # planned to be removed in the future
+ // - (new) .d12345678.AAA
if (strcmp(FN_SAFEDEL, fhdr->filename) == 0) {
assert(strlen(FN_SAFEDEL) == strlen("M."));
// M.1 is a dirty hack, anyway..
strlcat(hist_file, "M.1", sizeof(hist_file));
strlcat(hist_file, fhdr->filename + strlen(FN_SAFEDEL) + 1, sizeof(hist_file));
+#ifdef FN_SAFEDEL_PREFIX_LEN
+ } else if (strncmp(FN_SAFEDEL, fhdr->filename, FN_SAFEDEL_PREFIX_LEN) == 0) {
+ assert(FN_SAFEDEL_PREFIX_LEN == 2); // current pattern: 2 = M.
+ strlcat(hist_file, "M.", sizeof(hist_file));
+ strlcat(hist_file, fhdr->filename + FN_SAFEDEL_PREFIX_LEN, sizeof(hist_file));
+#endif
} else {
strlcat(hist_file, fhdr->filename, sizeof(hist_file));
}
diff --git a/pttbbs/mbbsd/record.c b/pttbbs/mbbsd/record.c
index 8590e391..8ac2ab3f 100644
--- a/pttbbs/mbbsd/record.c
+++ b/pttbbs/mbbsd/record.c
@@ -276,7 +276,11 @@ set_safedel_fhdr(fileheader_t *fhdr, const char *newtitle)
"%s <%s>", STR_SAFEDEL_TITLE, fhdr->owner);
}
// snprintf(fhdr->title, sizeof(fhdr->title), "%s", STR_SAFEDEL_TITLE);
+#ifdef FN_SAFEDEL_PREFIX_LEN
+ strncpy(fhdr->filename, FN_SAFEDEL, FN_SAFEDEL_PREFIX_LEN);
+#else
strcpy(fhdr->filename, FN_SAFEDEL);
+#endif
strcpy(fhdr->owner, "-");
}