summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2011-11-11 00:47:07 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2011-11-11 00:47:07 +0800
commite8c743864ad1d7fe71ee719bea7e051402f9010e (patch)
treed4f3412e83c71b0f050b7122fb375d4805a0c468
parenteb6081959bf27d4034ca2e5fea3fd112b3d629e5 (diff)
downloadpttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.tar
pttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.tar.gz
pttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.tar.bz2
pttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.tar.lz
pttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.tar.xz
pttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.tar.zst
pttbbs-e8c743864ad1d7fe71ee719bea7e051402f9010e.zip
- improve new_mail reading
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5460 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--pttbbs/mbbsd/mail.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/pttbbs/mbbsd/mail.c b/pttbbs/mbbsd/mail.c
index 519cf249..5932aeb6 100644
--- a/pttbbs/mbbsd/mail.c
+++ b/pttbbs/mbbsd/mail.c
@@ -1005,23 +1005,32 @@ read_new_mail(void * voidfptr, void *optarg)
char genbuf[4];
arg->idc++;
- // XXX fptr->filename may be invalid.
- if (fptr->filemode || !fptr->filename[0])
- return 0;
- clear();
- move(10, 0);
- prints("您要讀來自[%s]的訊息(%s)嗎?", fptr->owner, fptr->title);
- getdata(11, 0, "請您確定(Y/N/Q)?[Y] ", genbuf, 3, DOECHO);
- if (genbuf[0] == 'q')
- return QUIT;
- if (genbuf[0] == 'n')
- return 0;
- setuserfile(fname, fptr->filename);
+ if (fptr->filemode & FILE_READ)
+ return 0;
+
+ // XXX fptr->filename may be invalid.
+ if (*fptr->filename) {
+ clear();
+ move(10, 0);
+ prints("您要讀來自[%s]的訊息(%s)嗎?", fptr->owner, fptr->title);
+ getdata(11, 0, "請您確定(Y/N/Q)?[Y] ", genbuf, 3, LCECHO);
+ if (genbuf[0] == 'q')
+ return QUIT;
+ if (genbuf[0] == 'n')
+ return 0;
+ }
+
+ // no matter what, mark as read.
fptr->filemode |= FILE_READ;
+ // Race condition here...
if (substitute_fileheader(currmaildir, fptr, fptr, arg->idc))
- return -1;
+ return -1;
+ if (!*fptr->filename)
+ return -1;
+
+ setuserfile(fname, fptr->filename);
arg->mrd = 1;
delete_it = NA;
while (!done) {