#include <systemd/sd-event.h>
#include <pakfire/ctx.h>
+#include <pakfire/file.h>
+#include <pakfire/filelist.h>
#include <pakfire/pty.h>
#include <pakfire/string.h>
#include <pakfire/util.h>
return length;
}
+
+ssize_t pakfire_pty_send_filelist(struct pakfire_ctx* ctx,
+ void* data, char* buffer, size_t length) {
+ struct pakfire_pty_filelist* input = data;
+ struct pakfire_file* file = NULL;
+ int r;
+
+ // If there is any path data left, we send that first
+ if (input->p) {
+ // How much data do we have left?
+ size_t l = strlen(input->p);
+
+ // Cap the length of the buffer
+ if (l < length)
+ length = l;
+
+ memcpy(buffer, input->p, length);
+
+ // If we could not send all data, we will move the pointer forward
+ if (l > length)
+ input->p += length;
+
+ // If we have sent all data, we reset the pointer
+ else if (l == length)
+ input->p = NULL;
+
+ return length;
+ }
+
+ // Read the next file
+ file = pakfire_filelist_get(input->filelist, input->i++);
+
+ // If we could not fetch a file, we have reached the end of the list
+ if (!file) {
+ // Reset the counter so we can run again
+ input->i = 0;
+
+ return 0;
+ }
+
+ // Fetch the path
+ const char* path = pakfire_file_get_path(file);
+ if (!path) {
+ r = -EINVAL;
+ goto ERROR;
+ }
+
+ // Copy the path to the buffer
+ r = pakfire_string_format(input->buffer, "%s\n", path);
+ if (r < 0)
+ goto ERROR;
+
+ // Set the pointer to the start
+ input->p = input->buffer;
+
+ // Free the file
+ pakfire_file_unref(file);
+
+ // Send the buffer
+ return pakfire_pty_send_filelist(ctx, input, buffer, length);
+
+ERROR:
+ if (file)
+ pakfire_file_unref(file);
+
+ return r;
+}
#include <systemd/sd-event.h>
#include <pakfire/ctx.h>
+#include <pakfire/filelist.h>
struct pakfire_pty;
ssize_t pakfire_pty_send_buffer(struct pakfire_ctx* ctx,
void* data, char* buffer, size_t length);
+// Stream a filelist
+
+struct pakfire_pty_filelist {
+ struct pakfire_filelist* filelist;
+ size_t i;
+
+ // Buffer for the path
+ char buffer[PATH_MAX];
+ const char* p;
+};
+
+ssize_t pakfire_pty_send_filelist(struct pakfire_ctx* ctx,
+ void* data, char* buffer, size_t length);
+
#endif /* PAKFIRE_PTY_H */