There's now a generic _cleanup_ macro with an argument. The macros for
specific types are now defined using this macro, and in the header files
where they belong.
All cleanup handlers are now inline functions.
#include "path-util.h"
#include "pager.h"
#include "macro.h"
#include "path-util.h"
#include "pager.h"
#include "macro.h"
+#include "journal-internal.h"
static enum {
ACTION_NONE,
static enum {
ACTION_NONE,
char *journal_make_match_string(sd_journal *j);
void journal_print_header(sd_journal *j);
char *journal_make_match_string(sd_journal *j);
void journal_print_header(sd_journal *j);
+
+static inline void journal_closep(sd_journal **j) {
+ sd_journal_close(*j);
+}
+
+#define _cleanup_journal_close_ _cleanup_(journal_closep)
#include "sd-journal.h"
#include "macro.h"
#include "util.h"
#include "sd-journal.h"
#include "macro.h"
#include "util.h"
+#include "journal-internal.h"
int main(int argc, char *argv[]) {
unsigned n = 0;
int main(int argc, char *argv[]) {
unsigned n = 0;
#include "util.h"
#include "utf8.h"
#include "hashmap.h"
#include "util.h"
#include "utf8.h"
#include "hashmap.h"
+#include "journal-internal.h"
#define PRINT_THRESHOLD 128
#define JSON_THRESHOLD 4096
#define PRINT_THRESHOLD 128
#define JSON_THRESHOLD 4096
#define _weakref_(x) __attribute__((weakref(#x)))
#define _introspect_(x) __attribute__((section("introspect." x)))
#define _alignas_(x) __attribute__((aligned(__alignof(x))))
#define _weakref_(x) __attribute__((weakref(#x)))
#define _introspect_(x) __attribute__((section("introspect." x)))
#define _alignas_(x) __attribute__((aligned(__alignof(x))))
+#define _cleanup_(x) __attribute__((cleanup(x)))
/* automake test harness */
#define EXIT_TEST_SKIP 77
/* automake test harness */
#define EXIT_TEST_SKIP 77
-#define _cleanup_free_ __attribute__((cleanup(freep)))
-#define _cleanup_fclose_ __attribute__((cleanup(fclosep)))
-#define _cleanup_pclose_ __attribute__((cleanup(pclosep)))
-#define _cleanup_close_ __attribute__((cleanup(closep)))
-#define _cleanup_closedir_ __attribute__((cleanup(closedirp)))
-#define _cleanup_umask_ __attribute__((cleanup(umaskp)))
-#define _cleanup_set_free_ __attribute__((cleanup(set_freep)))
-#define _cleanup_set_free_free_ __attribute__((cleanup(set_free_freep)))
-#define _cleanup_strv_free_ __attribute__((cleanup(strv_freep)))
-#define _cleanup_journal_close_ __attribute__((cleanup(journal_closep)))
-
#define VA_FORMAT_ADVANCE(format, ap) \
do { \
int _argtypes[128]; \
#define VA_FORMAT_ADVANCE(format, ap) \
do { \
int _argtypes[128]; \
#define SET_FOREACH_BACKWARDS(e, s, i) \
for ((i) = ITERATOR_LAST, (e) = set_iterate_backwards((s), &(i)); (e); (e) = set_iterate_backwards((s), &(i)))
#define SET_FOREACH_BACKWARDS(e, s, i) \
for ((i) = ITERATOR_LAST, (e) = set_iterate_backwards((s), &(i)); (e); (e) = set_iterate_backwards((s), &(i)))
+
+#define _cleanup_set_free_ _cleanup_(set_freep)
+#define _cleanup_set_free_free_ _cleanup_(set_free_freep)
+#define _cleanup_strv_free_ _cleanup_(strv_freep)
+
char **strv_copy(char * const *l) _malloc_;
unsigned strv_length(char * const *l);
char **strv_copy(char * const *l) _malloc_;
unsigned strv_length(char * const *l);
-void fclosep(FILE **f) {
- if (*f)
- fclose(*f);
-}
-
-void pclosep(FILE **f) {
- if (*f)
- pclose(*f);
-}
-
-void closep(int *fd) {
- if (*fd >= 0)
- close_nointr_nofail(*fd);
-}
-
-void closedirp(DIR **d) {
- if (*d)
- closedir(*d);
-}
-
bool filename_is_safe(const char *p) {
if (isempty(p))
bool filename_is_safe(const char *p) {
if (isempty(p))
#include <stddef.h>
#include <unistd.h>
#include <stddef.h>
#include <unistd.h>
-#include <systemd/sd-journal.h>
#include "macro.h"
#include "time-util.h"
#include "macro.h"
#include "time-util.h"
-void fclosep(FILE **f);
-void pclosep(FILE **f);
-void closep(int *fd);
-void closedirp(DIR **d);
-static inline void umaskp(mode_t *u) {
- umask(*u);
+static inline void fclosep(FILE **f) {
+ if (*f)
+ fclose(*f);
+}
+
+static inline void pclosep(FILE **f) {
+ if (*f)
+ pclose(*f);
+}
+
+static inline void closep(int *fd) {
+ if (*fd >= 0)
+ close_nointr_nofail(*fd);
+}
+
+static inline void closedirp(DIR **d) {
+ if (*d)
+ closedir(*d);
-static inline void journal_closep(sd_journal **j) {
- sd_journal_close(*j);
+static inline void umaskp(mode_t *u) {
+ umask(*u);
-#define _cleanup_globfree_ __attribute__((cleanup(globfree)))
+#define _cleanup_free_ _cleanup_(freep)
+#define _cleanup_fclose_ _cleanup_(fclosep)
+#define _cleanup_pclose_ _cleanup_(pclosep)
+#define _cleanup_close_ _cleanup_(closep)
+#define _cleanup_closedir_ _cleanup_(closedirp)
+#define _cleanup_umask_ _cleanup_(umaskp)
+#define _cleanup_globfree_ _cleanup_(globfree)
_malloc_ static inline void *malloc_multiply(size_t a, size_t b) {
if (_unlikely_(b == 0 || a > ((size_t) -1) / b))
_malloc_ static inline void *malloc_multiply(size_t a, size_t b) {
if (_unlikely_(b == 0 || a > ((size_t) -1) / b))
static inline void *mempset(void *s, int c, size_t n) {
memset(s, c, n);
static inline void *mempset(void *s, int c, size_t n) {
memset(s, c, n);
+ return (uint8_t*)s + n;
}
char *hexmem(const void *p, size_t l);
}
char *hexmem(const void *p, size_t l);
void* greedy_realloc(void **p, size_t *allocated, size_t need);
#define GREEDY_REALLOC(array, allocated, need) \
void* greedy_realloc(void **p, size_t *allocated, size_t need);
#define GREEDY_REALLOC(array, allocated, need) \
- greedy_realloc((void**) &(array), &(allocated), (sizeof *array) * (need))
+ greedy_realloc((void**) &(array), &(allocated), sizeof((array)[0]) * (need))
static inline void _reset_errno_(int *saved_errno) {
errno = *saved_errno;
static inline void _reset_errno_(int *saved_errno) {
errno = *saved_errno;