]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - mood.c
Merge branch 'maint'
[paraslash.git] / mood.c
diff --git a/mood.c b/mood.c
index bbe84734deffd189d7fb8d05ac3e58877b356f8f..e0d9e2750dd65b53f988e9b7ff06b981300cc31f 100644 (file)
--- a/mood.c
+++ b/mood.c
@@ -626,10 +626,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)
@@ -652,7 +656,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;
        }
        clock_get_realtime(&rnow);
        compute_correction_factors(rnow.tv_sec);
@@ -669,6 +673,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;
 }