From: Lennart Poettering Date: Mon, 13 Apr 2020 09:20:59 +0000 (+0200) Subject: fileio: optionally allow telling read_line_full() whether we are processing a tty... X-Git-Tag: v246-rc1~592^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=609ae0f59619619efe6db07e34f73a237e7f332b;p=thirdparty%2Fsystemd.git fileio: optionally allow telling read_line_full() whether we are processing a tty or not --- diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 387b3253b5e..463a8596f5a 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -1009,7 +1009,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, funlockfile); int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret) { size_t n = 0, allocated = 0, count = 0; _cleanup_free_ char *buffer = NULL; - int r, tty = -1; + int r; assert(f); @@ -1088,17 +1088,17 @@ int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret) { * \n as the single EOL marker, so there is no need to wait. We check * this condition last to avoid isatty() check if not necessary. */ - if (tty < 0) { + if ((flags & (READ_LINE_IS_A_TTY|READ_LINE_NOT_A_TTY)) == 0) { int fd; fd = fileno(f); if (fd < 0) /* Maybe an fmemopen() stream? Handle this gracefully, * and don't call isatty() on an invalid fd */ - tty = false; + flags |= READ_LINE_NOT_A_TTY; else - tty = isatty(fd); + flags |= isatty(fd) ? READ_LINE_IS_A_TTY : READ_LINE_NOT_A_TTY; } - if (tty > 0) + if (FLAGS_SET(flags, READ_LINE_IS_A_TTY)) break; } diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 58daabaa8ff..e6062121a33 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -88,7 +88,9 @@ int read_timestamp_file(const char *fn, usec_t *ret); int fputs_with_space(FILE *f, const char *s, const char *separator, bool *space); typedef enum ReadLineFlags { - READ_LINE_ONLY_NUL = 1 << 0, + READ_LINE_ONLY_NUL = 1 << 0, + READ_LINE_IS_A_TTY = 1 << 1, + READ_LINE_NOT_A_TTY = 1 << 2, } ReadLineFlags; int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret);