/*
- * Copyright (C) 2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2008 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#include "afh.h"
#include "afs.h"
#include "list.h"
+#include "ipc.h"
/**
* Contains statistical data of the currently admissible audio files.
return 1;
}
-static int mm_name_like_score_function(const char *path,
+static int mm_path_matches_score_function(const char *path,
__a_unused const struct afs_info *afsi,
__a_unused const struct afh_info *afhi,
const void *data)
return 100;
}
-static int mm_name_like_parser(const char *arg, void **data)
+static int mm_path_matches_parser(const char *arg, void **data)
{
*data = para_strdup(arg);
return 1;
}
-static void mm_name_like_cleanup(void *data)
+static void mm_path_matches_cleanup(void *data)
{
free(data);
}
{DEFINE_MOOD_METHOD(no_attributes_set)},
{DEFINE_MOOD_METHOD(played_rarely)},
{DEFINE_MOOD_METHOD(is_set)},
- {DEFINE_MOOD_METHOD_WITH_CLEANUP(name_like)},
+ {DEFINE_MOOD_METHOD_WITH_CLEANUP(path_matches)},
{.parser = NULL}
};
osl_close_disk_object(&mood_def);
if (ret < 0) {
PARA_ERROR_LOG("unable to load mood %s: %s\n", mlpd.m->name,
- PARA_STRERROR(-ret));
+ para_strerror(-ret));
destroy_mood(mlpd.m);
return ret;
}
struct osl_object mood_def;
struct mood_line_parser_data mlpd = {.line_num = 0};
- int ret = mood_get_name_and_def_by_row(mood_row, &mood_name, &mood_def);
+ int ret2, ret = mood_get_name_and_def_by_row(mood_row, &mood_name, &mood_def);
if (ret < 0) {
- para_printf(pb, "failed to get mood definition\n");
+ ret2 = para_printf(pb, "failed to get mood definition: %s\n",
+ para_strerror(-ret));
return ret;
}
if (!*mood_name) /* ignore dummy row */
goto out;
- para_printf(pb, "checking mood %s...\n", mood_name);
+ ret = para_printf(pb, "checking mood %s...\n", mood_name);
+ if (ret < 0)
+ goto out;
ret = for_each_line_ro(mood_def.data, mood_def.size,
parse_mood_line, &mlpd);
if (ret < 0)
- para_printf(pb, "%s line %u: %s\n", mood_name, mlpd.line_num,
- PARA_STRERROR(-ret));
+ ret2 = para_printf(pb, "%s line %u: %s\n", mood_name, mlpd.line_num,
+ para_strerror(-ret));
out:
osl_close_disk_object(&mood_def);
- return 1;
+ return ret;
}
/**
* Check all moods for syntax errors.
*
+ * \param fd The afs socket.
* \param query Unused.
- * \param result: Contains check messages.
*/
-int mood_check_callback(__a_unused const struct osl_object *query,
- struct osl_object *result)
+void mood_check_callback(int fd, __a_unused const struct osl_object *query)
{
- struct para_buffer pb = {.buf = NULL};
+ struct para_buffer pb = {
+ .max_size = SHMMAX,
+ .private_data = &fd,
+ .max_size_handler = pass_buffer_as_shm
+ };
- para_printf(&pb, "checking moods...\n");
+ int ret = para_printf(&pb, "checking moods...\n");
+ if (ret < 0)
+ return;
osl_rbtree_loop(moods_table, BLOBCOL_ID, &pb,
check_mood);
- result->data = pb.buf;
- result->size = pb.size;
- return 1;
+ if (pb.offset)
+ pass_buffer_as_shm(pb.buf, pb.offset, &fd);
+ free(pb.buf);
}
#if 0
int ret;
char *mood_name = NULL;
- PARA_NOTICE_LOG("reloading current mood\n");
if (!current_mood)
return 1;
+ PARA_NOTICE_LOG("reloading %s\n", current_mood->name?
+ current_mood->name : "(dummy)");
if (current_mood->name)
mood_name = para_strdup(current_mood->name);
close_current_mood();
default:
return 1;
}
- return 1;
}