-static void com_select_callback(int fd, const struct osl_object *query)
-{
- struct para_buffer pb = {
- .max_size = shm_get_shmmax(),
- .private_data = &(struct afs_max_size_handler_data) {
- .fd = fd,
- },
- .max_size_handler = afs_max_size_handler,
- };
- char *arg = query->data;
- int num_admissible, ret, ret2;
-
- ret = clear_score_table();
- if (ret < 0) {
- ret2 = para_printf(&pb, "%s\n", para_strerror(-ret));
- goto out;
- }
- if (current_play_mode == PLAY_MODE_MOOD)
- close_current_mood();
- else
- playlist_close();
- ret = activate_mood_or_playlist(arg, &num_admissible);
- if (ret < 0) {
- ret2 = 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) {
- if (ret2 >= 0)
- ret2 = para_printf(&pb, "failed, switching to dummy\n");
- activate_mood_or_playlist(NULL, &num_admissible);
- }
- } else
- ret2 = para_printf(&pb, "activated %s (%d admissible files)\n", current_mop?
- current_mop : "dummy mood", num_admissible);
-out:
- if (ret2 >= 0 && pb.offset)
- pass_buffer_as_shm(pb.buf, pb.offset, &fd);
- free(pb.buf);
-}
-