]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge tags 'v0.5.9' and 'v0.6.4' into maint
authorAndre Noll <maan@tuebingen.mpg.de>
Mon, 14 Nov 2022 21:16:22 +0000 (22:16 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Mon, 14 Nov 2022 21:16:22 +0000 (22:16 +0100)
For some reason, the release commits for 0.5.9 and 0.6.4 releases
(which updated only the NEWS file) did not make it into the maint
branch. This octopus commit merges both tags to correct this omission.

NEWS.md
afs.c
attribute.c
interactive.c
mood.c
mp.c
server.c
vss.c

diff --git a/NEWS.md b/NEWS.md
index 7554cd6b9fac8ae061d8be75afa0f4f706007ef8..f2341e3347fca0ec03688295937e3465bef75a04 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -150,6 +150,23 @@ Downloads:
 [tarball](./releases/paraslash-0.6.1.tar.xz),
 [signature](./releases/paraslash-0.6.1.tar.xz.asc)
 
+---------------------------------------
+0.5.9 (2021-11-04) "reversed dimension"
+---------------------------------------
+This release contains a few important fixes which have accumulated in
+the maint branch. The paraslash-0.5.x series has now reached its end
+of life and will no longer be supported. All users should upgrade to
+a more recent version at this point.
+
+- Fix an issue with the bash completion script.
+- Initialize the random seed also when using libgrypt.
+- Fix some compiler warnings in the resample filter
+- Don't return spurious errors from the ff server command.
+
+Downloads:
+[tarball](./releases/paraslash-0.5.9.tar.bz2),
+[signature](./releases/paraslash-0.5.9.tar.bz2.asc)
+
 ---------------------------------------
 0.5.8 (2017-09-23) "branching parabola"
 ---------------------------------------
diff --git a/afs.c b/afs.c
index b6cce36f42e30cd5672d7e5cc9934cc2d659ca8f..23ba2ad60cc9b133017ed006ce89ce2e91899808 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -447,7 +447,6 @@ no_admissible_files:
        return write_all(server_socket, buf, 8);
 }
 
-/* Never fails if arg == NULL */
 static int activate_mood_or_playlist(const char *arg, int *num_admissible,
                char **errmsg)
 {
@@ -455,8 +454,13 @@ static int activate_mood_or_playlist(const char *arg, int *num_admissible,
        int ret;
 
        if (!arg) {
-               ret = change_current_mood(NULL, NULL); /* always successful */
                mode = PLAY_MODE_MOOD;
+               ret = change_current_mood(NULL, errmsg);
+               if (ret < 0) {
+                       if (num_admissible)
+                               *num_admissible = 0;
+                       return ret;
+               }
        } else {
                if (!strncmp(arg, "p/", 2)) {
                        ret = playlist_open(arg + 2);
@@ -615,10 +619,10 @@ static void init_admissible_files(const char *arg)
 {
        int ret = activate_mood_or_playlist(arg, NULL, NULL);
        if (ret < 0) {
-               assert(arg);
                PARA_WARNING_LOG("could not activate %s: %s\n", arg,
                        para_strerror(-ret));
-               activate_mood_or_playlist(NULL, NULL, NULL);
+               if (arg)
+                       activate_mood_or_playlist(NULL, NULL, NULL);
        }
 }
 
index f7091727bc5b62518f91436de9428ba6c14b5a86..414a65e6526fabc08ccabaec07694423665b4442 100644 (file)
@@ -236,6 +236,7 @@ out:
        if (ret < 0)
                para_printf(&aca->pbout, "error while adding %s\n",
                        lls_input(i, aca->lpr));
+       lls_free_parse_result(aca->lpr, cmd);
        return ret;
 }
 
index a8197308e8323c8fe78546117cc2e9479df0fbfd..9f4dec175caf12c9ff3bf9ad30b2c90281a9828e 100644 (file)
@@ -312,22 +312,27 @@ static int i9e_post_select(__a_unused struct sched *s, __a_unused void *context)
                goto rm_btrn;
        while (input_available()) {
                if (i9ep->stdout_btrn) {
-                       unsigned len = i9ep->key_sequence_length;
-                       assert(len < sizeof(i9ep->key_sequence) - 1);
-                       buf = i9ep->key_sequence + len;
-                       ret = read(i9ep->ici->fds[0], buf, 1);
-                       if (ret < 0) {
-                               ret = -ERRNO_TO_PARA_ERROR(errno);
-                               goto rm_btrn;
+                       while (i9ep->key_sequence_length < sizeof(i9ep->key_sequence) - 1) {
+                               buf = i9ep->key_sequence + i9ep->key_sequence_length;
+                               ret = read(i9ep->ici->fds[0], buf, 1);
+                               if (ret < 0) {
+                                       ret = -ERRNO_TO_PARA_ERROR(errno);
+                                       goto rm_btrn;
+                               }
+                               if (ret == 0) {
+                                       ret = -E_I9E_EOF;
+                                       goto rm_btrn;
+                               }
+                               buf[1] = '\0';
+                               i9ep->key_sequence_length++;
+                               rl_stuff_char((int)(unsigned char)*buf);
+                               rl_callback_read_char();
+                               if (!input_available())
+                                       break;
                        }
-                       ret = -E_I9E_EOF;
-                       if (ret == 0)
-                               goto rm_btrn;
-                       buf[1] = '\0';
-                       i9ep->key_sequence_length++;
-                       rl_stuff_char((int)(unsigned char)*buf);
-               }
-               rl_callback_read_char();
+                       i9ep->key_sequence_length = 0;
+               } else
+                       rl_callback_read_char();
                ret = 0;
        }
        if (!i9ep->stdout_btrn)
diff --git a/mood.c b/mood.c
index a63d4d2af5d10d7b64c319d915e00b9b7ea62e89..5268e77fe03c7e56d1b146935f683e30dea9a2f6 100644 (file)
--- a/mood.c
+++ b/mood.c
@@ -857,8 +857,7 @@ void close_current_mood(void)
  *
  * If there is already an open mood, it will be closed first.
  *
- * \return Positive on success, negative on errors. Loading the dummy mood
- * always succeeds.
+ * \return Positive on success, negative on errors.
  *
  * \sa struct \ref afs_info::last_played, \ref mp_eval_row().
  */
@@ -873,10 +872,14 @@ int change_current_mood(const char *mood_name, char **errmsg)
        if (mood_name) {
                struct mood *m;
                struct osl_row *row;
-               struct osl_object obj = {
-                       .data = (char *)mood_name,
-                       .size = strlen(mood_name) + 1
-               };
+               struct osl_object obj;
+
+               if (!*mood_name) {
+                       *errmsg = make_message("empty mood name");
+                       return -ERRNO_TO_PARA_ERROR(EINVAL);
+               }
+               obj.data = (char *)mood_name;
+               obj.size = strlen(mood_name) + 1;
                ret = osl(osl_get_row(moods_table, BLOBCOL_NAME, &obj, &row));
                if (ret < 0) {
                        if (errmsg)
@@ -899,7 +902,7 @@ int change_current_mood(const char *mood_name, char **errmsg)
        if (ret < 0) {
                if (errmsg)
                        *errmsg = make_message("audio file loop failed");
-               return ret;
+               goto out;
        }
        for (i = 0; i < statistics.num; i++) {
                struct admissible_file_info *a = aa.array + i;
@@ -915,6 +918,8 @@ int change_current_mood(const char *mood_name, char **errmsg)
        ret = statistics.num;
 out:
        free(aa.array);
+       if (ret < 0)
+               close_current_mood();
        return ret;
 }
 
diff --git a/mp.c b/mp.c
index 416b4f92065ef79716e7f966c3102e995071a112..aea767d99fea4b7bf0954504a03602766831a3b9 100644 (file)
--- a/mp.c
+++ b/mp.c
@@ -510,6 +510,7 @@ int mp_init(const char *definition, int nbytes, struct mp_context **result,
        mp_yy_delete_buffer(buffer_state, scanner);
        mp_yylex_destroy(scanner);
        if (ctx->errmsg) { /* parse error */
+               mp_free_ast(ctx->ast);
                if (errmsg)
                        *errmsg = ctx->errmsg;
                else
index 09087f7a72396bf01e51782dbebc1b9d1a82eb7c..d51e4e0bfe5b33c341ff744eda4f9380bd666844 100644 (file)
--- a/server.c
+++ b/server.c
@@ -432,15 +432,16 @@ static int command_post_select(struct sched *s, void *context)
 
        ret = task_get_notification(sct->task);
        if (ret < 0)
-               return ret;
+               goto fail;
        for (n = 0; n < sct->num_listen_fds; n++) {
                ret = command_task_accept(n, s, sct);
-               if (ret < 0) {
-                       free(sct->listen_fds);
-                       return ret;
-               }
+               if (ret < 0)
+                       goto fail;
        }
        return 0;
+fail:
+       free(sct->listen_fds);
+       return ret;
 }
 
 static void init_server_command_task(struct server_command_task *sct,
diff --git a/vss.c b/vss.c
index 9969a150ee63291e182f058664af9178eabf77f3..235219c1148aac2412b1b41879bf045d0b571af8 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -845,7 +845,6 @@ static void vss_compute_timeout(struct sched *s, struct vss_task *vsst)
 
 static void vss_eof(struct vss_task *vsst)
 {
-
        if (!vsst->map)
                return;
        if (mmd->new_vss_status_flags & VSS_NOMORE)
@@ -856,8 +855,8 @@ static void vss_eof(struct vss_task *vsst)
        para_munmap(vsst->map, vsst->mapsize);
        vsst->map = NULL;
        mmd->chunks_sent = 0;
-       //mmd->offset = 0;
        mmd->afd.afhi.seconds_total = 0;
+       mmd->afd.afhi.chunks_total = 0;
        mmd->afd.afhi.chunk_tv.tv_sec = 0;
        mmd->afd.afhi.chunk_tv.tv_usec = 0;
        free(mmd->afd.afhi.chunk_table);