Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : 3 : : #pragma once 4 : : 5 : : #include <stddef.h> 6 : : #include <stdbool.h> 7 : : #include <sys/uio.h> 8 : : 9 : : #include "io-util.h" 10 : : #include "sd-id128.h" 11 : : #include "time-util.h" 12 : : 13 : : /* Make sure not to make this smaller than the maximum coredump size. 14 : : * See JOURNAL_SIZE_MAX in coredump.c */ 15 : : #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION 16 : : #define ENTRY_SIZE_MAX (1024*1024*770u) 17 : : #define DATA_SIZE_MAX (1024*1024*768u) 18 : : #else 19 : : #define ENTRY_SIZE_MAX (1024*1024*13u) 20 : : #define DATA_SIZE_MAX (1024*1024*11u) 21 : : #endif 22 : : #define LINE_CHUNK 8*1024u 23 : : 24 : : /* The maximum number of fields in an entry */ 25 : : #define ENTRY_FIELD_COUNT_MAX 1024 26 : : 27 : : typedef struct JournalImporter { 28 : : int fd; 29 : : bool passive_fd; 30 : : char *name; 31 : : 32 : : char *buf; 33 : : size_t size; /* total size of the buffer */ 34 : : size_t offset; /* offset to the beginning of live data in the buffer */ 35 : : size_t scanned; /* number of bytes since the beginning of data without a newline */ 36 : : size_t filled; /* total number of bytes in the buffer */ 37 : : 38 : : size_t field_len; /* used for binary fields: the field name length */ 39 : : size_t data_size; /* and the size of the binary data chunk being processed */ 40 : : 41 : : struct iovec_wrapper iovw; 42 : : 43 : : int state; 44 : : dual_timestamp ts; 45 : : sd_id128_t boot_id; 46 : : } JournalImporter; 47 : : 48 : : #define JOURNAL_IMPORTER_INIT(_fd) { .fd = (_fd), .iovw = {} } 49 : : #define JOURNAL_IMPORTER_MAKE(_fd) (JournalImporter) JOURNAL_IMPORTER_INIT(_fd) 50 : : 51 : : void journal_importer_cleanup(JournalImporter *); 52 : : int journal_importer_process_data(JournalImporter *); 53 : : int journal_importer_push_data(JournalImporter *, const char *data, size_t size); 54 : : void journal_importer_drop_iovw(JournalImporter *); 55 : : bool journal_importer_eof(const JournalImporter *); 56 : : 57 : 0 : static inline size_t journal_importer_bytes_remaining(const JournalImporter *imp) { 58 : 0 : return imp->filled; 59 : : }