]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - afs.h
Introduce afs_max_size_handler_data and afs_max_size_handler().
[paraslash.git] / afs.h
diff --git a/afs.h b/afs.h
index 7145c41b9ee71d10ad1fcaeb492532176dfcc25a..ba0d266ab7198896274f8dded4f215ee2131ca91 100644 (file)
--- a/afs.h
+++ b/afs.h
@@ -209,6 +209,34 @@ typedef int callback_result_handler(struct osl_object *result, void *private);
 int sc_send_result(struct osl_object *result, void *private);
 int pass_buffer_as_shm(char *buf, size_t size, void *fd_ptr);
 
+
+/** Structure passed to the AFS max_size handler. */
+struct afs_max_size_handler_data {
+       /** Local socket connecting the command handler and the AFS process. */
+       int fd;
+};
+
+/**
+ * Standard max_size handler for AFS commands.
+ *
+ * \param buf Contains (part of) the AFS command output.
+ * \param size The number of bytes in \a buf.
+ * \param private Pointer to a \ref afs_max_size_handler_data structure.
+ *
+ * Whenever the output of an AFS command exceeds the maximal size of a shared
+ * memory area, the max size handler of the para_buffer which holds the command
+ * output is called with \a private being a pointer to a structure of type
+ * afs_max_size_handler_data.
+ *
+ * \return The return value of the underlying call to \ref
+ *  pass_buffer_as_shm().
+ */
+_static_inline_ int afs_max_size_handler(char *buf, size_t size, void *private)
+{
+       struct afs_max_size_handler_data *amshd = private;
+       return pass_buffer_as_shm(buf, size, &amshd->fd);
+}
+
 __noreturn void afs_init(uint32_t cookie, int socket_fd);
 void afs_event(enum afs_events event, struct para_buffer *pb,
        void *data);