From: Zbigniew Jędrzejewski-Szmek Date: Thu, 26 Apr 2018 11:03:39 +0000 (+0200) Subject: Move function to cat file & dropins into basic/ X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4db09749bd08031f56151d4dc068458117292b54;p=elogind.git Move function to cat file & dropins into basic/ This fixes a buglet where the second and later drop-in would not be seperated properly by a newline. --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 889de7c6a..abd125f8f 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -28,6 +28,7 @@ #include #include "alloc-util.h" +//#include "copy.h" #include "env-util.h" #include "fd-util.h" #include "fileio.h" @@ -1381,3 +1382,39 @@ int terminal_urlify_path(const char *path, const char *text, char **ret) { return terminal_urlify(url, text, ret); } + +static int cat_file(const char *filename, bool newline) { + _cleanup_close_ int fd; + + fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOCTTY); + if (fd < 0) + return -errno; + + printf("%s%s# %s%s\n", + newline ? "\n" : "", + ansi_highlight_blue(), + filename, + ansi_normal()); + fflush(stdout); + + return copy_bytes(fd, STDOUT_FILENO, (uint64_t) -1, 0); +} + +int cat_files(const char *file, char **dropins) { + char **path; + int r; + + if (file) { + r = cat_file(file, false); + if (r < 0) + return log_warning_errno(r, "Failed to cat %s: %m", file); + } + + STRV_FOREACH(path, dropins) { + r = cat_file(*path, file || path != dropins); + if (r < 0) + return log_warning_errno(r, "Failed to cat %s: %m", *path); + } + + return 0; +} diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h index b5e755eba..4550e1fc0 100644 --- a/src/basic/terminal-util.h +++ b/src/basic/terminal-util.h @@ -177,3 +177,5 @@ int vt_reset_keyboard(int fd); int terminal_urlify(const char *url, const char *text, char **ret); int terminal_urlify_path(const char *path, const char *text, char **ret); + +int cat_files(const char *file, char **files);