X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=mood.c;h=e0d9e2750dd65b53f988e9b7ff06b981300cc31f;hb=46b9e018548fa7baebe62b6c724d215c84dcb20f;hp=bbe84734deffd189d7fb8d05ac3e58877b356f8f;hpb=88bf6848d1c58ad0e0d9b62d7da2a81cea5bf0ff;p=paraslash.git diff --git a/mood.c b/mood.c index bbe84734..e0d9e275 100644 --- 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; }