_cleanup_free_ char
*mid = NULL, *pid = NULL, *uid = NULL, *gid = NULL,
*sgnl = NULL, *exe = NULL, *comm = NULL,
- *filename = NULL, *truncated = NULL, *coredump = NULL;
+ *filename = NULL, *truncated = NULL;
const void *d;
size_t l;
usec_t ts;
int r, signal_as_int = 0;
const char *present = NULL, *color = NULL;
uint64_t size = UINT64_MAX;
- bool normal_coredump;
+ bool normal_coredump, has_inline_coredump;
uid_t uid_as_int = UID_INVALID;
gid_t gid_as_int = GID_INVALID;
pid_t pid_as_int = 0;
RETRIEVE(d, l, "COREDUMP_COMM", comm);
RETRIEVE(d, l, "COREDUMP_FILENAME", filename);
RETRIEVE(d, l, "COREDUMP_TRUNCATED", truncated);
- RETRIEVE(d, l, "COREDUMP", coredump);
}
+ /* Check for an inline coredump without copying the (potentially large) payload to heap. */
+ has_inline_coredump = sd_journal_get_data(j, "COREDUMP", NULL, NULL) >= 0;
+
if (!pid || !uid || !gid || !sgnl || !comm) {
log_warning("Found a coredump entry without mandatory fields (PID=%s, UID=%s, GID=%s, SIGNAL=%s, COMM=%s), ignoring.",
strna(pid), strna(uid), strna(gid), strna(sgnl), strna(comm));
return r;
analyze_coredump_file(filename, &present, &color, &size);
- } else if (coredump)
+ } else if (has_inline_coredump)
present = "journal";
else if (normal_coredump) {
present = "none";
*boot_id = NULL, *machine_id = NULL, *hostname = NULL,
*slice = NULL, *cgroup = NULL, *owner_uid = NULL,
*message = NULL, *timestamp = NULL, *filename = NULL,
- *truncated = NULL, *coredump = NULL,
+ *truncated = NULL,
*pkgmeta_name = NULL, *pkgmeta_version = NULL, *pkgmeta_json = NULL,
*tid = NULL, *thread_name = NULL;
const void *d;
size_t l;
- bool normal_coredump;
+ bool normal_coredump, has_inline_coredump;
int r;
assert(file);
RETRIEVE(d, l, "COREDUMP_TIMESTAMP", timestamp);
RETRIEVE(d, l, "COREDUMP_FILENAME", filename);
RETRIEVE(d, l, "COREDUMP_TRUNCATED", truncated);
- RETRIEVE(d, l, "COREDUMP", coredump);
RETRIEVE(d, l, "COREDUMP_PACKAGE_NAME", pkgmeta_name);
RETRIEVE(d, l, "COREDUMP_PACKAGE_VERSION", pkgmeta_version);
RETRIEVE(d, l, "COREDUMP_PACKAGE_JSON", pkgmeta_json);
RETRIEVE(d, l, "MESSAGE", message);
}
+ /* Check for an inline coredump without copying the (potentially large) payload to heap. */
+ has_inline_coredump = sd_journal_get_data(j, "COREDUMP", NULL, NULL) >= 0;
+
if (need_space)
fputs("\n", file);
if (size != UINT64_MAX)
fprintf(file, " Size on Disk: %s\n", FORMAT_BYTES(size));
- } else if (coredump)
+ } else if (has_inline_coredump)
fprintf(file, " Storage: journal\n");
else
fprintf(file, " Storage: none\n");