X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fjournal-file.c;h=78b937bb85f746553fe62fd00ccee72ffd4c27c7;hp=81c344fe5a589f96dddbf9f7d98db012865fd93c;hb=57535f4703b5de5d03ad6e35bd06247d378f46fe;hpb=6c7980093c4e39d07bf06484f96f489e236c7c29 diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c index 81c344fe5..78b937bb8 100644 --- a/src/journal/journal-file.c +++ b/src/journal/journal-file.c @@ -2551,7 +2551,7 @@ fail: } int journal_file_rotate(JournalFile **f, bool compress, bool seal) { - char *p; + _cleanup_free_ char *p = NULL; size_t l; JournalFile *old_file, *new_file = NULL; int r; @@ -2568,22 +2568,15 @@ int journal_file_rotate(JournalFile **f, bool compress, bool seal) { return -EINVAL; l = strlen(old_file->path); - - p = new(char, l + 1 + 32 + 1 + 16 + 1 + 16 + 1); - if (!p) + r = asprintf(&p, "%.*s@" SD_ID128_FORMAT_STR "-%016"PRIx64"-%016"PRIx64".journal", + (int) l - 8, old_file->path, + SD_ID128_FORMAT_VAL(old_file->header->seqnum_id), + le64toh((*f)->header->head_entry_seqnum), + le64toh((*f)->header->head_entry_realtime)); + if (r < 0) return -ENOMEM; - memcpy(p, old_file->path, l - 8); - p[l-8] = '@'; - sd_id128_to_string(old_file->header->seqnum_id, p + l - 8 + 1); - snprintf(p + l - 8 + 1 + 32, 1 + 16 + 1 + 16 + 8 + 1, - "-%016"PRIx64"-%016"PRIx64".journal", - le64toh((*f)->header->head_entry_seqnum), - le64toh((*f)->header->head_entry_realtime)); - r = rename(old_file->path, p); - free(p); - if (r < 0) return -errno; @@ -2634,7 +2627,7 @@ int journal_file_open_reliably( l = strlen(fname); if (asprintf(&p, "%.*s@%016llx-%016llx.journal~", - (int) (l-8), fname, + (int) l - 8, fname, (unsigned long long) now(CLOCK_REALTIME), random_ull()) < 0) return -ENOMEM;