#include "signal.h"
#include "fd.h"
#include "mood.h"
+#include "sideband.h"
#include "command.h"
/** The osl tables used by afs. \sa blob.c. */
{
struct para_buffer pb = {
.max_size = shm_get_shmmax(),
- .private_data = &fd,
- .max_size_handler = pass_buffer_as_shm
+ .private_data = &(struct afs_max_size_handler_data) {
+ .fd = fd,
+ },
+ .max_size_handler = afs_max_size_handler,
};
char *arg = query->data;
int num_admissible, ret, ret2;
current_mop : "dummy mood", num_admissible);
out:
if (ret2 >= 0 && pb.offset)
- pass_buffer_as_shm(pb.buf, pb.offset, &fd);
+ pass_buffer_as_shm(fd, pb.buf, pb.offset);
free(pb.buf);
}
*
* \sa \ref callback_result_handler, \ref sc_send_bin_buffer().
*/
-int sc_send_result(struct osl_object *result, void *private)
+int afs_cb_result_handler(struct osl_object *result, void *private)
{
struct command_context *cc = private;
int ret;
query.data = cc->argv[1];
query.size = strlen(cc->argv[1]) + 1;
return send_callback_request(com_select_callback, &query,
- &sc_send_result, cc);
+ &afs_cb_result_handler, cc);
}
static void init_admissible_files(char *arg)
/**
* Send data as shared memory to a file descriptor.
*
+ * \param fd File descriptor to send the shmid to.
* \param buf The buffer holding the data to be sent.
* \param size The size of \a buf.
- * \param fd_ptr A pointer to the file descriptor.
- *
- * This function is used as the \a max_size handler in a \ref para_buffer
- * structure. If used this way, it is called by \ref para_printf() whenever
- * the buffer passed to para_printf() is about to exceed its maximal size.
*
* This function creates a shared memory area large enough to hold
* the content given by \a buf and \a size and sends the identifier
* of this area to the file descriptor given by \a fd_ptr.
*
+ * It is called by the AFS max_size handler as well as directly by the AFS
+ * command callbacks to send command output to the command handlers.
+ *
* \return Zero if \a buf is \p NULL or \a size is zero. Negative on errors,
* and positive on success.
*/
-int pass_buffer_as_shm(char *buf, size_t size, void *fd_ptr)
+int pass_buffer_as_shm(int fd, char *buf, size_t size)
{
- int ret, shmid, fd = *(int *)fd_ptr;
+ int ret, shmid;
void *shm;
struct callback_result *cr;
if (ret < 0)
para_printf(&pb, "%s\n", para_strerror(-ret));
if (pb.buf)
- pass_buffer_as_shm(pb.buf, pb.offset, &fd);
+ pass_buffer_as_shm(fd, pb.buf, pb.offset);
free(pb.buf);
}
}
}
ret = send_callback_request(create_tables_callback, &query,
- sc_send_result, cc);
+ afs_cb_result_handler, cc);
if (ret < 0)
/* ignore return value */
sc_send_va_buffer(&cc->scc, "%s\n", para_strerror(-ret));
flags = ~0U;
if (flags & CHECK_AFT) {
ret = send_callback_request(aft_check_callback, NULL,
- sc_send_result, cc);
+ afs_cb_result_handler, cc);
if (ret < 0)
return ret;
}
if (flags & CHECK_PLAYLISTS) {
ret = send_callback_request(playlist_check_callback,
- NULL, sc_send_result, cc);
+ NULL, afs_cb_result_handler, cc);
if (ret < 0)
return ret;
}
if (flags & CHECK_MOODS) {
ret = send_callback_request(mood_check_callback, NULL,
- sc_send_result, cc);
+ afs_cb_result_handler, cc);
if (ret < 0)
return ret;
}