`sd_journal_print_with_location` and similar functions behave inconsistently compared to their documentation, which says: sd_journal_print_with_location(), sd_journal_printv_with_location(), sd_journal_send_with_location(), sd_journal_sendv_with_location(), and sd_journal_perror_with_location() [...] accept additional parameters to explicitly set the source file name, function, and line. Those arguments must contain valid journal entries including the variable name, e.g. "CODE_FILE=src/foo.c", "CODE_LINE=666", "CODE_FUNC=myfunc". Calling e.g. `sd_journal_sendv_with_location` with `CODE_FUNC=myfunction` as the value of the argument `func` results in "CODE_FUNC" : "CODE_FUNC=myfunction" because `sd_journal_*_with_location` implicitly prefix the argument `func` with `CODE_FUNC=`. For example: _public_ int sd_journal_sendv_with_location( const char *file, const char *line, const char *func, const struct iovec *iov, int n) { [...] char *f; [...] niov = newa(struct iovec, n + 3); [...] ALLOCA_CODE_FUNC(f, func); [...] niov[n++] = IOVEC_MAKE_STRING(f); return sd_journal_sendv(niov, n); } where `ALLOCA_CODE_FUNC` is: #define ALLOCA_CODE_FUNC(f, func) \ do { \ size_t _fl; \ const char *_func = (func); \ char **_f = &(f); \ _fl = strlen(_func) + 1; \ *_f = newa(char, _fl + 10); \ memcpy(*_f, "CODE_FUNC=", 10); \ memcpy(*_f + 10, _func, _fl); \ } while (false) The arguments `file` and `line` are _not_ prefixed similarly but expected to be prefixed already with `CODE_FILE=` and `CODE_LINE=` respectively and sent as is like the documentation describes. That is, the argument `func` is treated differently and behaves inconsistently compared to the arguments `file` and `line`. The behavior seems still intentional: _public_ int sd_journal_printv_with_location(int priority, const char *file, const char *line, const char *func, const char *format, va_list ap) { [...] /* func is initialized from __func__ which is not a macro, but * a static const char[], hence cannot easily be prefixed with * CODE_FUNC=, hence let's do it manually here. */ ALLOCA_CODE_FUNC(f, func); [...] } Thus, change the documentation to match the actual behavior. Note: `sd_journal_{print,send}` and `sd_journal_{print,send}v` work as expected as they only pass the function name (i.e. without `CODE_FUNC=`) to the `func` argument of the `sd_journal_*_with_location` functions they call. For example: #define sd_journal_print(priority, ...) sd_journal_print_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, __VA_ARGS__) (cherry picked from commit 673ed95966c741807f993f7fd6b5d93bbc504458) (cherry picked from commit 121bbb59f3075a07c571dca9f7c628eb7433a99b) (cherry picked from commit 2d2ec1eea4468dfb2e4ccc07ae43aa451e0e2cd2)
System and Service Manager
Details
Most documentation is available on systemd's web site.
Assorted, older, general information about systemd can be found in the systemd Wiki.
Information about build requirements is provided in the README file.
Consult our NEWS file for information about what's new in the most recent systemd versions.
Please see the Code Map for information about this repository's layout and content.
Please see the Hacking guide for information on how to hack on systemd and test your modifications.
Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.
When preparing patches for systemd, please follow our Coding Style Guidelines.
If you are looking for support, please contact our mailing list or join our IRC channel.
Stable branches with backported patches are available in the stable repo.