summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-08-29 23:53:49 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-08-29 23:53:49 +0800
commit9d9efb47decf91be83230ff1f2318d6f2d981265 (patch)
tree8e054b1b87412d3338a6b121f4877883ec6f6ef2
parent6b2f2f3e275322f0cfeccf57d35350edae0de6a0 (diff)
downloadpttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.tar
pttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.tar.gz
pttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.tar.bz2
pttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.tar.lz
pttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.tar.xz
pttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.tar.zst
pttbbs-9d9efb47decf91be83230ff1f2318d6f2d981265.zip
* (pwcu branch) code refine
* also changed numlogin formula to 'only increase max to one per each day', which allow us to update the value in login state instead of logout stage git-svn-id: http://opensvn.csie.org/pttbbs/branches/pttbbs.pwcu@4792 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/proto.h4
-rw-r--r--mbbsd/cache.c2
-rw-r--r--mbbsd/mbbsd.c4
-rw-r--r--mbbsd/passwd.c89
-rw-r--r--util/xchatd.c2
5 files changed, 45 insertions, 56 deletions
diff --git a/include/proto.h b/include/proto.h
index bd547eea..6b14f475 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -693,8 +693,8 @@ int passwd_sync_update (int num, userec_t * buf);
int passwd_sync_query (int num, userec_t * buf);
// current user help utilities
-int pwcuBitSetLevel (unsigned int mask);
-int pwcuBitUnsetLevel (unsigned int mask);
+int pwcuBitEnableLevel (unsigned int mask);
+int pwcuBitDisableLevel (unsigned int mask);
int pwcuIncNumPost ();
int pwcuDecNumPost ();
int pwcuSetGoodPost (unsigned int newgp);
diff --git a/mbbsd/cache.c b/mbbsd/cache.c
index e9d057c4..cac2135c 100644
--- a/mbbsd/cache.c
+++ b/mbbsd/cache.c
@@ -160,7 +160,7 @@ int is_BM_cache(int bid) /* bid starts from 1 */
{
// auto enable BM permission
if (!HasUserPerm(PERM_BM))
- pwcuBitSetLevel(PERM_BM);
+ pwcuBitEnableLevel(PERM_BM);
return 1;
}
return 0;
diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c
index 8c27da5e..e193bf12 100644
--- a/mbbsd/mbbsd.c
+++ b/mbbsd/mbbsd.c
@@ -994,7 +994,7 @@ check_BM(void)
return;
// disable BM permission
- pwcuBitUnsetLevel(PERM_BM);
+ pwcuBitDisableLevel(PERM_BM);
}
static void
@@ -1145,7 +1145,7 @@ inline static void foreign_warning(void){
mail_muser(cuser, "[出入境管理局]", "etc/foreign_expired_warn");
}
else if (login_start_time - cuser.firstlogin > FOREIGN_REG_DAY * 24 * 3600){
- pwcuBitUnsetLevel(PERM_LOGINOK | PERM_POST);
+ pwcuBitDisableLevel(PERM_LOGINOK | PERM_POST);
vmsg("警告:請至出入境管理局申請永久居留");
}
}
diff --git a/mbbsd/passwd.c b/mbbsd/passwd.c
index 73f3f6fc..2bdc93fd 100644
--- a/mbbsd/passwd.c
+++ b/mbbsd/passwd.c
@@ -110,19 +110,22 @@ pwcuFinalCUser(userec_t *u)
#define PWCU_START() userec_t u; if(pwcuInitCUser (&u) != 0) return -1
#define PWCU_END() if (pwcuFinalCUser(&u) != 0) return -1; return 0
-int pwcuBitSetLevel (unsigned int mask)
+#define _ENABLE_BIT( var,mask) var |= (mask)
+#define _DISABLE_BIT(var,mask) var &= ~(mask)
+
+int pwcuBitEnableLevel (unsigned int mask)
{
PWCU_START();
- cuser.userlevel |= mask;
- u.userlevel |= mask;
+ _ENABLE_BIT( u.userlevel, mask);
+ _ENABLE_BIT(cuser.userlevel, mask);
PWCU_END();
}
-int pwcuBitUnsetLevel (unsigned int mask)
+int pwcuBitDisableLevel (unsigned int mask)
{
PWCU_START();
- cuser.userlevel &= ~mask;
- u.userlevel &= ~mask;
+ _DISABLE_BIT( u.userlevel, mask);
+ _DISABLE_BIT(cuser.userlevel, mask);
PWCU_END();
}
@@ -148,8 +151,8 @@ int
pwcuViolateLaw ()
{
PWCU_START();
- u.userlevel |= PERM_VIOLATELAW;
- cuser.userlevel |= PERM_VIOLATELAW;
+ _ENABLE_BIT( u.userlevel, PERM_VIOLATELAW);
+ _ENABLE_BIT(cuser.userlevel, PERM_VIOLATELAW);
u.timeviolatelaw = now;
cuser.timeviolatelaw = u.timeviolatelaw;
u.vl_count++;
@@ -161,8 +164,8 @@ int
pwcuSaveViolateLaw()
{
PWCU_START();
- u.userlevel &= (~PERM_VIOLATELAW);
- cuser.userlevel &= (~PERM_VIOLATELAW);
+ _DISABLE_BIT( u.userlevel, PERM_VIOLATELAW);
+ _DISABLE_BIT(cuser.userlevel, PERM_VIOLATELAW);
PWCU_END();
}
@@ -186,7 +189,7 @@ int pwcuSetLastSongTime (time4_t clk)
int pwcuSetMyAngel (const char *angel_uid)
{
PWCU_START();
- strlcpy(u.myangel, angel_uid, sizeof(u.myangel));
+ strlcpy( u.myangel, angel_uid, sizeof( u.myangel));
strlcpy(cuser.myangel, angel_uid, sizeof(cuser.myangel));
PWCU_END();
}
@@ -194,7 +197,7 @@ int pwcuSetMyAngel (const char *angel_uid)
int pwcuSetNickname (const char *nickname)
{
PWCU_START();
- strlcpy(u.nickname, nickname, sizeof(u.nickname));
+ strlcpy( u.nickname, nickname, sizeof( u.nickname));
strlcpy(cuser.nickname, nickname, sizeof(cuser.nickname));
PWCU_END();
}
@@ -203,8 +206,9 @@ int
pwcuToggleOutMail()
{
PWCU_START();
- u.uflag2 ^= REJ_OUTTAMAIL;
- cuser.uflag2 ^= REJ_OUTTAMAIL;
+ u.uflag2 ^= REJ_OUTTAMAIL;
+ cuser.uflag2 &= ~REJ_OUTTAMAIL;
+ cuser.uflag2 |= (REJ_OUTTAMAIL & u.uflag2);
PWCU_END();
}
@@ -250,17 +254,6 @@ int pwcuToggleFriendList()
// session save
-#if 0
-static void
-_setflags(int mask, int value)
-{
- if (value)
- cuser.uflag |= mask;
- else
- cuser.uflag &= ~mask;
-}
-#endif
-
// XXX this is a little different - only invoked at login,
// which we should update/calculate every variables to log.
int pwcuLoginSave ()
@@ -269,13 +262,18 @@ int pwcuLoginSave ()
// new host from 'fromhost'
strlcpy(cuser.lasthost, fromhost, sizeof(cuser.lasthost));
+
+ // calculate numlogins (only increase one per each key)
+ if (((login_start_time - cuser.firstlogin) % 86400) !=
+ ((cuser.lastlogin - cuser.firstlogin) % 86400) )
+ cuser.numlogins++;
+
+ // update last login time
cuser.lastlogin = login_start_time;
if (!PERM_HIDE(currutmp))
cuser.lastseen = login_start_time;
- // calculate numlogins
-
PWCU_END();
}
@@ -285,11 +283,12 @@ int pwcuExitSave ()
{
PWCU_START();
- u.uflag &= ~(PAGER_FLAG | CLOAK_FLAG);
+ _DISABLE_BIT(u.uflag, (PAGER_FLAG | CLOAK_FLAG));
if (currutmp->pager != PAGER_ON)
- u.uflag |= PAGER_FLAG;
+ _ENABLE_BIT(u.uflag, PAGER_FLAG);
if (currutmp->invisible)
- u.uflag |= CLOAK_FLAG;
+ _ENABLE_BIT(u.uflag, CLOAK_FLAG);
+
u.invisible = currutmp->invisible;
u.withme = currutmp->withme;
u.pager = currutmp->pager;
@@ -300,8 +299,6 @@ int pwcuExitSave ()
reload_money();
- // TODO deal with numlogin?
-
PWCU_END();
}
@@ -329,36 +326,28 @@ void pwcuInitGuestPerm ()
cuser.uflag = PAGER_FLAG | BRDSORT_FLAG | MOVIE_FLAG;
cuser.uflag2= 0; // we don't need FAVNEW_FLAG or anything else.
# ifdef GUEST_DEFAULT_DBCS_NOINTRESC
- cuser.uflag |= DBCS_NOINTRESC;
+ _ENABLE_BIT(cuser.uflag, DBCS_NOINTRESC);
# endif
}
-#define GUEST_INFO_RANDMAX (13)
+#undef DIM
+#define DIM(x) (sizeof(x)/sizeof(x[0]))
+
void pwcuInitGuestInfo ()
{
int i;
- char *nick[GUEST_INFO_RANDMAX] = {
+ char *nick[] = {
"椰子", "貝殼", "內衣", "寶特瓶", "翻車魚",
"樹葉", "浮萍", "鞋子", "潛水艇", "魔王",
"鐵罐", "考卷", "大美女"
};
- char *name[GUEST_INFO_RANDMAX] = {
- "大王椰子", "鸚鵡螺", "比基尼", "可口可樂", "仰泳的魚",
- "憶", "高岡屋", "AIR Jordon", "紅色十月號", "批踢踢",
- "SASAYA椰奶", "鴨蛋", "布魯克鱈魚香絲"
- };
- char *addr[GUEST_INFO_RANDMAX] = {
- "天堂樂園", "大海", "綠島小夜曲", "美國", "綠色珊瑚礁",
- "遠方", "原本海", "NIKE", "蘇聯", "男八618室",
- "愛之味", "天上", "藍色珊瑚礁"
- };
- i = random() % GUEST_INFO_RANDMAX;
+
+ i = random() % DIM(nick);
snprintf(cuser.nickname, sizeof(cuser.nickname),
- "海邊漂來的%s", nick[(int)i]);
+ "海邊漂來的%s", nick[i]);
strlcpy(currutmp->nickname, cuser.nickname,
sizeof(currutmp->nickname));
- strlcpy(cuser.realname, name[(int)i], sizeof(cuser.realname));
- strlcpy(cuser.address, addr[(int)i], sizeof(cuser.address));
- memset(cuser.mind, 0, sizeof(cuser.mind));
+ strlcpy(cuser.realname, "guest", sizeof(cuser.realname));
+ memset (cuser.mind, 0, sizeof(cuser.mind));
cuser.sex = i % 8;
}
diff --git a/util/xchatd.c b/util/xchatd.c
index e0c82201..912d0d7a 100644
--- a/util/xchatd.c
+++ b/util/xchatd.c
@@ -151,7 +151,7 @@ static char msg_not_here[] = "◆ [%s] 不在這間聊天室";
#define FUZZY_USER ((ChatUser *) -1)
-
+#undef cuser
typedef struct userec_t ACCT;
/* ----------------------------------------------------- */