]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - afs.c
com_addblob(): Return negative on errors
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index 4bc7871cac868a45a2d487cdf5761d9509f19bfa..0c615747435657b65ec5302192561fd902c84348 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -501,6 +501,7 @@ static int activate_mood_or_playlist(char *arg, int *num_admissible)
        enum play_mode mode;
        int ret;
 
+       PARA_INFO_LOG("new playlist: %s\n", arg);
        if (!arg) {
                ret = change_current_mood(NULL); /* always successful */
                mode = PLAY_MODE_MOOD;
@@ -602,31 +603,32 @@ static int com_select_callback(int fd, const struct osl_object *query)
 
        ret = clear_score_table();
        if (ret < 0) {
-               para_printf(&pb, "%s\n", para_strerror(-ret));
-               goto out;
+               para_printf(&pb, "could not clear score table: %s\n",
+                       para_strerror(-ret));
+               return ret;
        }
        if (current_play_mode == PLAY_MODE_MOOD)
                close_current_mood();
        else
                playlist_close();
        ret = activate_mood_or_playlist(arg, &num_admissible);
-       if (ret < 0) {
-               para_printf(&pb, "%s\nswitching back to %s\n",
-                       para_strerror(-ret), current_mop?
-                       current_mop : "dummy");
-               ret = activate_mood_or_playlist(current_mop, &num_admissible);
-               if (ret < 0) {
-                       para_printf(&pb, "failed (%s), switching to dummy\n",
-                               para_strerror(-ret));
-                       activate_mood_or_playlist(NULL, &num_admissible);
-               }
-       } else
-               para_printf(&pb, "activated %s (%d admissible files)\n",
-                       current_mop?  current_mop : "dummy mood",
-                       num_admissible);
+       if (ret >= 0)
+               goto out;
+       para_printf(&pb, "could not activate %s: %s\n"
+               "switching back to %s\n",
+               arg, para_strerror(-ret), current_mop? current_mop : "dummy");
+       /* ignore subsequent errors (but log them) */
+       ret = activate_mood_or_playlist(current_mop, &num_admissible);
+       if (ret >= 0)
+               goto out;
+       para_printf(&pb, "could not activate %s: %s\nswitching to dummy\n",
+               current_mop, para_strerror(-ret));
+       activate_mood_or_playlist(NULL, &num_admissible);
 out:
+       para_printf(&pb, "activated %s (%d admissible files)\n",
+               current_mop? current_mop : "dummy mood", num_admissible);
        flush_and_free_pb(&pb);
-       return 0;
+       return ret;
 }
 
 int com_select(struct command_context *cc)
@@ -1031,7 +1033,7 @@ out:
        exit(EXIT_FAILURE);
 }
 
-static int create_tables_callback(int fd, const struct osl_object *query)
+static int com_init_callback(int fd, const struct osl_object *query)
 {
        uint32_t table_mask = *(uint32_t *)query->data;
        int i, ret;
@@ -1052,16 +1054,18 @@ static int create_tables_callback(int fd, const struct osl_object *query)
                if (!t->create)
                        continue;
                ret = t->create(database_dir);
-               if (ret < 0)
+               if (ret < 0) {
+                       para_printf(&pb, "cannot create table %s\n", t->name);
                        goto out;
+               }
                para_printf(&pb, "successfully created %s table\n", t->name);
        }
        ret = open_afs_tables();
-out:
        if (ret < 0)
-               para_printf(&pb, "%s\n", para_strerror(-ret));
+               para_printf(&pb, "cannot open afs tables\n");
+out:
        flush_and_free_pb(&pb);
-       return 0;
+       return ret;
 }
 
 int com_init(struct command_context *cc)
@@ -1089,7 +1093,7 @@ int com_init(struct command_context *cc)
                                return -E_BAD_TABLE_NAME;
                }
        }
-       return send_callback_request(create_tables_callback, &query,
+       return send_callback_request(com_init_callback, &query,
                afs_cb_result_handler, cc);
 }