PARA_INFO_LOG("opening mood %s\n", mood_name);
ret = mp_init(mood_def.data, mood_def.size, &(*m)->parser_context, errmsg);
osl_close_disk_object(&mood_def);
+ if (ret < 0)
+ destroy_mood(*m);
return ret;
}
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)
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);
ret = statistics.num;
out:
free(aa.array);
+ if (ret < 0)
+ close_current_mood();
return ret;
}