/*
- * Copyright (C) 2007-2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2012 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
+#include <regex.h>
+#include <osl.h>
+
#include "para.h"
#include "error.h"
#include "string.h"
#include "afh.h"
#include "afs.h"
+#include "ipc.h"
+#include "sideband.h"
/** \file playlist.c Functions for loading and saving playlists. */
struct osl_row *aft_row;
int ret = aft_get_row_of_path(path, &aft_row);
- if (ret < 0)
- para_printf(pb, "%s: %s\n", path, para_strerror(-ret));
- return 1;
+ if (ret >= 0)
+ return 1;
+ return para_printf(pb, "%s: %s\n", path, para_strerror(-ret));
}
static int check_playlist(struct osl_row *row, void *data)
char *playlist_name;
int ret = pl_get_name_and_def_by_row(row, &playlist_name, &playlist_def);
- if (ret < 0) {
- para_printf(pb, "failed to get playlist data: %s\n",
+ if (ret < 0)
+ return para_printf(pb, "failed to get playlist data: %s\n",
para_strerror(-ret));
- return 1;
- }
if (*playlist_name) { /* skip dummy row */
- para_printf(pb, "checking playlist %s...\n", playlist_name);
- for_each_line_ro(playlist_def.data, playlist_def.size,
+ ret = para_printf(pb, "checking playlist %s...\n", playlist_name);
+ if (ret < 0)
+ return ret;
+ ret = for_each_line_ro(playlist_def.data, playlist_def.size,
check_playlist_path, pb);
}
osl_close_disk_object(&playlist_def);
- return 1;
+ return ret;
}
/**
* Check the playlist table for inconsistencies.
*
+ * \param fd The afs socket.
* \param query Unused.
- * \param result Contains messages about inconsistencies.
*
* \return The return value of the underlying call to osl_rbtree_loop().
*/
-int playlist_check_callback(__a_unused const struct osl_object *query,
- struct osl_object *result)
+void playlist_check_callback(int fd, __a_unused const struct osl_object *query)
{
- struct para_buffer pb = {.buf = NULL};
+ struct para_buffer pb = {
+ .max_size = shm_get_shmmax(),
+ .private_data = &(struct afs_max_size_handler_data) {
+ .fd = fd,
+ .band = SBD_OUTPUT
+ },
+ .max_size_handler = afs_max_size_handler,
+ };
+ int ret = para_printf(&pb, "checking playlists...\n");
- para_printf(&pb, "checking playlists...\n");
+ if (ret < 0)
+ return;
osl_rbtree_loop(playlists_table, BLOBCOL_ID, &pb,
check_playlist);
- result->data = pb.buf;
- result->size = pb.offset;
- return 1;
+ if (pb.offset)
+ pass_buffer_as_shm(fd, SBD_OUTPUT, pb.buf, pb.offset);
+ free(pb.buf);
}
/**
obj.data = name;
obj.size = strlen(obj.data);
- ret = osl_get_row(playlists_table, BLOBCOL_NAME, &obj, &row);
+ ret = osl(osl_get_row(playlists_table, BLOBCOL_NAME, &obj, &row));
if (ret < 0) {
PARA_NOTICE_LOG("failed to load playlist %s\n", name);
return ret;