From 4012bf960377f4281d2a47d22378e1b30f520190 Mon Sep 17 00:00:00 2001
From: victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>
Date: Sun, 28 Aug 2005 15:33:57 +0000
Subject: explicit fav entrance

description:
  1. A user enters Class of the main menu.
     Now fav is loaded, and fav_stack[0] is fav root.
  2. Go some dir, press 'y'.
     fav_stack[0] != NULL, so the user WAS in fav tree.
  3. press 'a' or 'i' can break the program.



git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3108 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
---
 mbbsd/board.c |  8 +++++---
 mbbsd/fav.c   | 22 +++++++++++++++-------
 2 files changed, 20 insertions(+), 10 deletions(-)

(limited to 'mbbsd')

diff --git a/mbbsd/board.c b/mbbsd/board.c
index f9331bc2..d75a3a78 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -675,8 +675,6 @@ choose_board(int newflag)
     char            keyword[13] = "", buf[64];
 
     setutmpmode(newflag ? READNEW : READBRD);
-    if( get_current_fav() == NULL )
-	fav_load();
     ++choose_board_depth;
     brdnum = 0;
     if (!cuser.userlevel)	/* guest yank all boards */
@@ -873,7 +871,7 @@ choose_board(int newflag)
 	    brdnum = -1;
 	    break;
 	case 'y':
-	    if (get_current_fav() != NULL || !IS_LISTING_FAV()){
+	    if (get_current_fav() != NULL) {
 		if (cuser.userlevel)
 		    yank_flag ^= 1; /* FAV <=> BRD */
 		else
@@ -1275,7 +1273,11 @@ Boards(void)
     init_brdbuf();
     class_bid = 0;
     LIST_FAV();
+    if( get_current_fav() == NULL )
+	fav_load();
+    fav_enter();
     choose_board(0);
+    fav_leave();
     return 0;
 }
 
diff --git a/mbbsd/fav.c b/mbbsd/fav.c
index 56b3b8c3..8aa132e2 100644
--- a/mbbsd/fav.c
+++ b/mbbsd/fav.c
@@ -43,6 +43,7 @@ static int 	fav_number;
 /* definition of fav stack, the top one is in use now. */
 static int	fav_stack_num = 0;
 static fav_t   *fav_stack[FAV_MAXDEPTH] = {0};
+static fav_t   *fav_root = NULL;
 
 static char     dirty = 0;
 
@@ -288,7 +289,7 @@ fav_item_copy(fav_type_t *target, const fav_type_t *source){
 }
 
 inline fav_t *get_fav_root(void){
-    return fav_stack[0];
+    return fav_root;
 }
 
 /**
@@ -444,6 +445,16 @@ void fav_folder_out(void)
     fav_stack_pop();
 }
 
+void fav_enter(void)
+{
+    fav_stack_push_fav(fav_root);
+}
+
+void fav_leave(void)
+{
+    fav_stack_pop();
+}
+
 static void read_favrec(FILE *frp, fav_t *fp)
 {
     int i;
@@ -503,14 +514,12 @@ int fav_load(void)
 {
     FILE *frp;
     char buf[128];
-    fav_t *fp;
     if (fav_stack_num > 0)
 	return -1;
     setuserfile(buf, FAV4);
 
     if (!dashf(buf)) {
-	fp = (fav_t *)fav_malloc(sizeof(fav_t));
-	fav_stack_push_fav(fp);
+	fav_root = (fav_t *)fav_malloc(sizeof(fav_t));
 #ifdef MEM_CHECK
 	fav_set_memcheck(MEM_CHECK);
 #endif
@@ -519,10 +528,9 @@ int fav_load(void)
 
     if ((frp = fopen(buf, "r")) == NULL)
 	return -1;
-    fp = (fav_t *)fav_malloc(sizeof(fav_t));
+    fav_root = (fav_t *)fav_malloc(sizeof(fav_t));
     fav_number = 0;
-    read_favrec(frp, fp);
-    fav_stack_push_fav(fp);
+    read_favrec(frp, fav_root);
     fclose(frp);
 #ifdef MEM_CHECK
     fav_set_memcheck(MEM_CHECK);
-- 
cgit v1.2.3