afs.c: Fix open_afs_tables().
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index cc6d7467b3570228cb45f70a329da7467d007e71..d889ec771c9cc0d5c10860621528752faa778888 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -75,6 +75,8 @@ struct command_task {
        struct task task;
 };
 
+extern struct misc_meta_data *mmd;
+
 static int server_socket;
 static struct command_task command_task_struct;
 static struct signal_task signal_task_struct;
@@ -536,10 +538,17 @@ static int activate_mood_or_playlist(char *arg, int *num_admissible)
        current_play_mode = mode;
        if (arg != current_mop) {
                free(current_mop);
-               if (arg)
+               if (arg) {
                        current_mop = para_strdup(arg);
-               else
+                       mmd_lock();
+                       strcpy(mmd->afs_mode_string, arg); /* FIXME: check length */
+                       mmd_unlock();
+               } else {
+                       mmd_lock();
+                       strcpy(mmd->afs_mode_string, "dummy");
+                       mmd_unlock();
                        current_mop = NULL;
+               }
        }
        return 1;
 }
@@ -566,7 +575,7 @@ static int com_select_callback(const struct osl_object *query,
                ret = activate_mood_or_playlist(current_mop, &num_admissible);
                if (ret < 0) {
                        para_printf(&pb, "failed, switching to dummy\n");
-                       change_current_mood(NULL); /* always successful */
+                       activate_mood_or_playlist(NULL, &num_admissible);
                }
        }
        para_printf(&pb, "activated %s (%d admissible files)\n", current_mop?
@@ -675,12 +684,12 @@ static int open_afs_tables(void)
                        continue;
                PARA_ERROR_LOG("%s init: %s\n", afs_tables[i].name,
                        PARA_STRERROR(-ret));
+               break;
        }
        if (ret >= 0)
                return ret;
-       do
-               afs_tables[i].close();
-       while (i--);
+       while (i)
+               afs_tables[--i].close();
        return ret;
 }